[]
A memory table stores data locally in the client.
Data is provided directly through the data option when calling addTable.
All operations occur in memory.
No server communication is involved.
Memory tables are suitable for:
Static datasets
Client-side applications
Prototyping scenarios
Offline use cases
Use the data property of IDataSourceOption:
const dataManager = spread.dataManager();
const table = dataManager.addTable("employees", {
data: [
{ id: 1, name: "Alice", age: 24 },
{ id: 2, name: "Bob", age: 26 },
{ id: 3, name: "Cindy", age: 25 }
]
});The table is now defined, but not yet initialized.
After creating a table, call:
table.fetch();Although the data is already available locally, calling fetch() ensures:
The internal data state is initialized
Schema processing (if defined) is applied
The table is ready for View creation
Example:
table.fetch().then(function () {
const view = table.addView("defaultView");
});All table types require fetch() before further operations.
The data option supports multiple formats:
JSON array (default)
CSV string
XML string
If data is a JSON array, no additional configuration is required.
const table = dataManager.addTable("employees", {
data: [
{ id: 1, name: "Alice", price: 24 },
{ id: 2, name: "Bob", price: 26 },
{ id: 3, name: "Cindy", age: 25 }
]
});JSON is the default data type.
If schema.type is not specified, it is treated as "json".
When providing CSV data as a string, you must specify:
schema: {
type: "csv"
}Example:
const table = dataManager.addTable("employees", {
data: `id,name,price
1,Alice,24
2,Bob,26
3,Cindy,25`,
schema: {
type: "csv"
}
});Without
schema.type = "csv", the string will be treated as a normal JSON value, and parsing will not occur.
When providing XML data, you must specify:
schema.type = "xml"
schema.dataPath (if the collection is nested)
Example:
const table = dataManager.addTable("employees", {
data: `
<root>
<row>
<id>1</id>
<name>Alice</name>
<price>24</price>
</row>
<row>
<id>2</id>
<name>Bob</name>
<price>26</price>
</row>
<row>
<id>3</id>
<name>Cindy</name>
<price>25</price>
</row>
</root>
`,
schema: {
type: "xml",
dataPath: "root.row"
}
});Explanation:
type: "xml" enables XML parsing.
dataPath specifies where the record collection resides.
If dataPath is not specified, the entire parsed object is returned.
In memory tables, schema serves two primary purposes:
Data parsing (when using CSV or XML)
Column modeling and data behavior
If no schema is provided:
JSON data is inferred automatically
Columns are generated from object keys
Schema configuration is documented in the Schema section.
This section demonstrates typical usage in memory tables.
The schema.type property determines how the data string is parsed:
schema.type | Expected data format |
|---|---|
json (default) | JSON array |
csv | CSV string |
xml | XML string |
columnJson | Column-based JSON structure |
If a string is provided without setting schema.type, it is treated as "json" and will not be parsed as CSV or XML.
Schema can define column structure and data types:
const table = dataManager.addTable("orders", {
data: [
{ id: 1, orderDate: "2025-01-01" }
],
schema: {
columns: {
orderDate: {
dataType: "date"
}
}
}
});Column definitions allow:
Data type conversion
Formatting behavior
Primary key definition
Advanced column configuration
If a field contains a nested object, it can be expanded into multiple columns using spread.
Example:
const table = dataManager.addTable("sales", {
data: [
{
id: 1,
address: {
country: "USA",
state: "California",
city: "San Francisco",
postalCode: "94105"
}
},
{
id: 2,
address: {
country: "Germany",
state: "Berlin",
city: "Berlin",
postalCode: "10115"
}
}
],
schema: {
columns: {
address: {
spread: true
}
}
}
});After fetch(), the nested fields become separate columns.
This allows structured data to be flattened for View usage.
Memory tables support export and import through:
JSON
SJS
Since data resides entirely in memory, full serialization is supported.