@quereus/store 0.4.14 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +52 -4
- package/dist/src/common/index.d.ts +1 -1
- package/dist/src/common/index.d.ts.map +1 -1
- package/dist/src/common/index.js +4 -2
- package/dist/src/common/index.js.map +1 -1
- package/dist/src/common/key-builder.d.ts +75 -27
- package/dist/src/common/key-builder.d.ts.map +1 -1
- package/dist/src/common/key-builder.js +104 -60
- package/dist/src/common/key-builder.js.map +1 -1
- package/dist/src/common/kv-store.d.ts +44 -6
- package/dist/src/common/kv-store.d.ts.map +1 -1
- package/dist/src/common/store-module.d.ts +16 -2
- package/dist/src/common/store-module.d.ts.map +1 -1
- package/dist/src/common/store-module.js +47 -33
- package/dist/src/common/store-module.js.map +1 -1
- package/dist/src/common/store-table.d.ts +23 -4
- package/dist/src/common/store-table.d.ts.map +1 -1
- package/dist/src/common/store-table.js +61 -42
- package/dist/src/common/store-table.js.map +1 -1
- package/package.json +1 -1
|
@@ -5,6 +5,12 @@
|
|
|
5
5
|
* to create StoreTable instances. This enables any storage backend
|
|
6
6
|
* (LevelDB, IndexedDB, React Native, etc.) to be used with the same
|
|
7
7
|
* table implementation.
|
|
8
|
+
*
|
|
9
|
+
* Storage architecture:
|
|
10
|
+
* - Data store: {schema}.{table} - row data keyed by encoded PK
|
|
11
|
+
* - Index stores: {schema}.{table}_idx_{name} - one per secondary index
|
|
12
|
+
* - Stats store: {schema}.{table}_stats - row count and metadata
|
|
13
|
+
* - Catalog store: __catalog__ - DDL metadata keyed by {schema}.{table}
|
|
8
14
|
*/
|
|
9
15
|
import type { Database, TableSchema, TableIndexSchema, VirtualTableModule, BaseModuleConfig, BestAccessPlanRequest, BestAccessPlanResult } from '@quereus/quereus';
|
|
10
16
|
import type { KVStore, KVStoreProvider } from './kv-store.js';
|
|
@@ -79,15 +85,23 @@ export declare class StoreModule implements VirtualTableModule<StoreTable, Store
|
|
|
79
85
|
*/
|
|
80
86
|
getBestAccessPlan(_db: Database, tableInfo: TableSchema, request: BestAccessPlanRequest): BestAccessPlanResult;
|
|
81
87
|
/**
|
|
82
|
-
* Get or create a store for a table.
|
|
88
|
+
* Get or create a data store for a table.
|
|
83
89
|
*/
|
|
84
90
|
getStore(tableKey: string, _config: StoreTableConfig): Promise<KVStore>;
|
|
91
|
+
/**
|
|
92
|
+
* Get or create an index store for a table.
|
|
93
|
+
*/
|
|
94
|
+
getIndexStore(schemaName: string, tableName: string, indexName: string): Promise<KVStore>;
|
|
95
|
+
/**
|
|
96
|
+
* Get or create a stats store for a table.
|
|
97
|
+
*/
|
|
98
|
+
getStatsStore(schemaName: string, tableName: string): Promise<KVStore>;
|
|
85
99
|
/**
|
|
86
100
|
* Get or create a transaction coordinator for a table.
|
|
87
101
|
*/
|
|
88
102
|
getCoordinator(tableKey: string, config: StoreTableConfig): Promise<TransactionCoordinator>;
|
|
89
103
|
/**
|
|
90
|
-
* Save table DDL to
|
|
104
|
+
* Save table DDL to the catalog store.
|
|
91
105
|
*/
|
|
92
106
|
saveTableDDL(tableSchema: TableSchema): Promise<void>;
|
|
93
107
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store-module.d.ts","sourceRoot":"","sources":["../../../src/common/store-module.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"store-module.d.ts","sourceRoot":"","sources":["../../../src/common/store-module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EACX,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EAEpB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAU5F;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,gBAAgB;IAC1D,kDAAkD;IAClD,SAAS,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAChC,4CAA4C;IAC5C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,WAAY,YAAW,kBAAkB,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,gBAAgB;IACtG,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,YAAY,CAAkD;IACtE,OAAO,CAAC,MAAM,CAAsC;IACpD,OAAO,CAAC,YAAY,CAAC,CAAoB;gBAE7B,QAAQ,EAAE,eAAe,EAAE,YAAY,CAAC,EAAE,iBAAiB;IAKvE;;OAEG;IACH,eAAe,IAAI,iBAAiB,GAAG,SAAS;IAIhD;;OAEG;IACH,WAAW,IAAI,eAAe;IAI9B;;;;;;;OAOG;IACG,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAyCzE;;;OAGG;IACG,OAAO,CACZ,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,OAAO,EACd,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,EAC1B,mBAAmB,CAAC,EAAE,WAAW,GAC/B,OAAO,CAAC,UAAU,CAAC;IA4CtB;;OAEG;IACG,OAAO,CACZ,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,OAAO,EACd,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;IAgChB;;OAEG;IACG,WAAW,CAChB,GAAG,EAAE,QAAQ,EACb,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,gBAAgB,GAC3B,OAAO,CAAC,IAAI,CAAC;IA4BhB;;OAEG;YACW,iBAAiB;IA6B/B;;OAEG;IACH,iBAAiB,CAChB,GAAG,EAAE,QAAQ,EACb,SAAS,EAAE,WAAW,EACtB,OAAO,EAAE,qBAAqB,GAC5B,oBAAoB;IA8EvB;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAe7E;;OAEG;IACG,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI/F;;OAEG;IACG,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI5E;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAUjG;;OAEG;IACG,YAAY,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3D;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAcrC;;OAEG;IACG,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM1E;;OAEG;IACH,OAAO,CAAC,WAAW;IAMnB;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAW/B;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;CAIvE"}
|
|
@@ -5,12 +5,18 @@
|
|
|
5
5
|
* to create StoreTable instances. This enables any storage backend
|
|
6
6
|
* (LevelDB, IndexedDB, React Native, etc.) to be used with the same
|
|
7
7
|
* table implementation.
|
|
8
|
+
*
|
|
9
|
+
* Storage architecture:
|
|
10
|
+
* - Data store: {schema}.{table} - row data keyed by encoded PK
|
|
11
|
+
* - Index stores: {schema}.{table}_idx_{name} - one per secondary index
|
|
12
|
+
* - Stats store: {schema}.{table}_stats - row count and metadata
|
|
13
|
+
* - Catalog store: __catalog__ - DDL metadata keyed by {schema}.{table}
|
|
8
14
|
*/
|
|
9
15
|
import { AccessPlanBuilder, QuereusError, StatusCode } from '@quereus/quereus';
|
|
10
16
|
import { TransactionCoordinator } from './transaction.js';
|
|
11
17
|
import { StoreTable } from './store-table.js';
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
18
|
+
import { buildCatalogKey, buildCatalogScanBounds, buildIndexKey, buildFullScanBounds, } from './key-builder.js';
|
|
19
|
+
import { deserializeRow } from './serialization.js';
|
|
14
20
|
import { generateTableDDL } from './ddl-generator.js';
|
|
15
21
|
/**
|
|
16
22
|
* Generic store module that works with any KVStoreProvider.
|
|
@@ -126,10 +132,18 @@ export class StoreModule {
|
|
|
126
132
|
await table.disconnect();
|
|
127
133
|
this.tables.delete(tableKey);
|
|
128
134
|
}
|
|
129
|
-
//
|
|
130
|
-
|
|
135
|
+
// Delete all stores for this table (data, indexes, stats)
|
|
136
|
+
if (this.provider.deleteTableStores) {
|
|
137
|
+
await this.provider.deleteTableStores(schemaName, tableName);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
// Fallback: just close the data store
|
|
141
|
+
await this.provider.closeStore(schemaName, tableName);
|
|
142
|
+
}
|
|
131
143
|
this.stores.delete(tableKey);
|
|
132
144
|
this.coordinators.delete(tableKey);
|
|
145
|
+
// Remove DDL from catalog
|
|
146
|
+
await this.removeTableDDL(schemaName, tableName);
|
|
133
147
|
// Emit schema change event for table drop
|
|
134
148
|
this.eventEmitter?.emitSchemaChange({
|
|
135
149
|
type: 'drop',
|
|
@@ -147,17 +161,12 @@ export class StoreModule {
|
|
|
147
161
|
if (!table) {
|
|
148
162
|
throw new QuereusError(`Store table '${tableName}' not found in schema '${schemaName}'`, StatusCode.NOTFOUND);
|
|
149
163
|
}
|
|
150
|
-
|
|
151
|
-
const
|
|
152
|
-
// Store index metadata
|
|
153
|
-
const indexMetaKey = buildMetaKey('index', schemaName, tableName, indexSchema.name);
|
|
154
|
-
const indexMetaValue = serializeRow([
|
|
155
|
-
indexSchema.name,
|
|
156
|
-
JSON.stringify(indexSchema.columns),
|
|
157
|
-
]);
|
|
158
|
-
await store.put(indexMetaKey, indexMetaValue);
|
|
164
|
+
// Create the index store
|
|
165
|
+
const indexStore = await this.provider.getIndexStore(schemaName, tableName, indexSchema.name);
|
|
159
166
|
// Build index entries for existing rows
|
|
160
|
-
await this.
|
|
167
|
+
const dataStore = await this.getStore(tableKey, table.getConfig());
|
|
168
|
+
const tableSchema = table.getSchema();
|
|
169
|
+
await this.buildIndexEntries(dataStore, indexStore, tableSchema, indexSchema);
|
|
161
170
|
// Emit schema change event
|
|
162
171
|
this.eventEmitter?.emitSchemaChange({
|
|
163
172
|
type: 'create',
|
|
@@ -169,19 +178,19 @@ export class StoreModule {
|
|
|
169
178
|
/**
|
|
170
179
|
* Build index entries for all existing rows in a table.
|
|
171
180
|
*/
|
|
172
|
-
async buildIndexEntries(
|
|
181
|
+
async buildIndexEntries(dataStore, indexStore, tableSchema, indexSchema) {
|
|
173
182
|
const encodeOptions = { collation: 'NOCASE' };
|
|
174
183
|
// Scan all data rows
|
|
175
|
-
const bounds =
|
|
176
|
-
const batch =
|
|
177
|
-
for await (const entry of
|
|
184
|
+
const bounds = buildFullScanBounds();
|
|
185
|
+
const batch = indexStore.batch();
|
|
186
|
+
for await (const entry of dataStore.iterate(bounds)) {
|
|
178
187
|
const row = deserializeRow(entry.value);
|
|
179
188
|
// Extract PK values
|
|
180
189
|
const pkValues = tableSchema.primaryKeyDefinition.map(pk => row[pk.index]);
|
|
181
190
|
// Extract index column values
|
|
182
191
|
const indexValues = indexSchema.columns.map(col => row[col.index]);
|
|
183
192
|
// Build and store index key
|
|
184
|
-
const indexKey = buildIndexKey(
|
|
193
|
+
const indexKey = buildIndexKey(indexValues, pkValues, encodeOptions);
|
|
185
194
|
batch.put(indexKey, new Uint8Array(0)); // Index value is empty
|
|
186
195
|
}
|
|
187
196
|
await batch.write();
|
|
@@ -247,7 +256,7 @@ export class StoreModule {
|
|
|
247
256
|
}
|
|
248
257
|
// --- StoreTableModule interface implementation ---
|
|
249
258
|
/**
|
|
250
|
-
* Get or create a store for a table.
|
|
259
|
+
* Get or create a data store for a table.
|
|
251
260
|
*/
|
|
252
261
|
async getStore(tableKey, _config) {
|
|
253
262
|
let store = this.stores.get(tableKey);
|
|
@@ -261,6 +270,18 @@ export class StoreModule {
|
|
|
261
270
|
}
|
|
262
271
|
return store;
|
|
263
272
|
}
|
|
273
|
+
/**
|
|
274
|
+
* Get or create an index store for a table.
|
|
275
|
+
*/
|
|
276
|
+
async getIndexStore(schemaName, tableName, indexName) {
|
|
277
|
+
return this.provider.getIndexStore(schemaName, tableName, indexName);
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Get or create a stats store for a table.
|
|
281
|
+
*/
|
|
282
|
+
async getStatsStore(schemaName, tableName) {
|
|
283
|
+
return this.provider.getStatsStore(schemaName, tableName);
|
|
284
|
+
}
|
|
264
285
|
/**
|
|
265
286
|
* Get or create a transaction coordinator for a table.
|
|
266
287
|
*/
|
|
@@ -274,22 +295,15 @@ export class StoreModule {
|
|
|
274
295
|
return coordinator;
|
|
275
296
|
}
|
|
276
297
|
/**
|
|
277
|
-
* Save table DDL to
|
|
298
|
+
* Save table DDL to the catalog store.
|
|
278
299
|
*/
|
|
279
300
|
async saveTableDDL(tableSchema) {
|
|
280
|
-
const tableKey = `${tableSchema.schemaName}.${tableSchema.name}`.toLowerCase();
|
|
281
301
|
const ddl = generateTableDDL(tableSchema);
|
|
282
|
-
const
|
|
302
|
+
const catalogKey = buildCatalogKey(tableSchema.schemaName, tableSchema.name);
|
|
283
303
|
const encoder = new TextEncoder();
|
|
284
304
|
const encodedDDL = encoder.encode(ddl);
|
|
285
|
-
// Save to table's own store
|
|
286
|
-
const store = this.stores.get(tableKey);
|
|
287
|
-
if (store) {
|
|
288
|
-
await store.put(metaKey, encodedDDL);
|
|
289
|
-
}
|
|
290
|
-
// Also save to catalog store for discovery
|
|
291
305
|
const catalogStore = await this.provider.getCatalogStore();
|
|
292
|
-
await catalogStore.put(
|
|
306
|
+
await catalogStore.put(catalogKey, encodedDDL);
|
|
293
307
|
}
|
|
294
308
|
/**
|
|
295
309
|
* Load all DDL statements from the catalog store.
|
|
@@ -297,7 +311,7 @@ export class StoreModule {
|
|
|
297
311
|
*/
|
|
298
312
|
async loadAllDDL() {
|
|
299
313
|
const catalogStore = await this.provider.getCatalogStore();
|
|
300
|
-
const bounds =
|
|
314
|
+
const bounds = buildCatalogScanBounds();
|
|
301
315
|
const decoder = new TextDecoder();
|
|
302
316
|
const ddlStatements = [];
|
|
303
317
|
for await (const entry of catalogStore.iterate(bounds)) {
|
|
@@ -310,9 +324,9 @@ export class StoreModule {
|
|
|
310
324
|
* Remove DDL from the catalog store when a table is dropped.
|
|
311
325
|
*/
|
|
312
326
|
async removeTableDDL(schemaName, tableName) {
|
|
313
|
-
const
|
|
327
|
+
const catalogKey = buildCatalogKey(schemaName, tableName);
|
|
314
328
|
const catalogStore = await this.provider.getCatalogStore();
|
|
315
|
-
await catalogStore.delete(
|
|
329
|
+
await catalogStore.delete(catalogKey);
|
|
316
330
|
}
|
|
317
331
|
/**
|
|
318
332
|
* Parse module configuration from vtab args.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store-module.js","sourceRoot":"","sources":["../../../src/common/store-module.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAI/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAgD,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC1G,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAYtD;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,WAAW;IACd,QAAQ,CAAkB;IAC1B,MAAM,GAAyB,IAAI,GAAG,EAAE,CAAC;IACzC,YAAY,GAAwC,IAAI,GAAG,EAAE,CAAC;IAC9D,MAAM,GAA4B,IAAI,GAAG,EAAE,CAAC;IAC5C,YAAY,CAAqB;IAEzC,YAAY,QAAyB,EAAE,YAAgC;QACrE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,MAAM,CAAC,EAAY,EAAE,WAAwB;QACjD,MAAM,QAAQ,GAAG,GAAG,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAE/E,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,YAAY,CACpB,gBAAgB,WAAW,CAAC,IAAI,+BAA+B,WAAW,CAAC,UAAU,GAAG,EACxF,UAAU,CAAC,KAAK,CACjB,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,QAAgD,CAAC,CAAC;QAE9F,6EAA6E;QAC7E,4EAA4E;QAC5E,sDAAsD;QACtD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QACrF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAEjC,MAAM,KAAK,GAAG,IAAI,UAAU,CAC1B,EAAE,EACF,IAAI,EACJ,WAAW,EACX,MAAM,EACN,IAAI,CAAC,YAAY;QACjB,yDAAyD;SAC1D,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAEjC,wDAAwD;QACxD,IAAI,CAAC,YAAY,EAAE,gBAAgB,CAAC;YAClC,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,OAAO;YACnB,UAAU,EAAE,WAAW,CAAC,UAAU;YAClC,UAAU,EAAE,WAAW,CAAC,IAAI;YAC5B,GAAG,EAAE,gBAAgB,CAAC,WAAW,CAAC;SACnC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CACX,EAAY,EACZ,KAAc,EACd,WAAmB,EACnB,UAAkB,EAClB,SAAiB,EACjB,OAA0B,EAC1B,mBAAiC;QAEjC,MAAM,QAAQ,GAAG,GAAG,UAAU,IAAI,SAAS,EAAE,CAAC,WAAW,EAAE,CAAC;QAE5D,gDAAgD;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,2DAA2D;QAC3D,MAAM,QAAQ,GAA6B,EAAE,CAAC;QAC9C,IAAI,OAAO,EAAE,SAAS,KAAK,SAAS;YAAE,QAAQ,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QAE7E,sEAAsE;QACtE,MAAM,WAAW,GAAgB,mBAAmB,IAAI;YACtD,IAAI,EAAE,SAAS;YACf,UAAU,EAAE,UAAU;YACtB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,cAAc,EAAE,IAAI,GAAG,EAAE;YACzB,oBAAoB,EAAE,EAAE;YACxB,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACnC,WAAW,EAAE,KAAK;YAClB,MAAM,EAAE,KAAK;YACb,cAAc,EAAE,OAAO;YACvB,QAAQ;YACR,UAAU,EAAE,IAAI;YAChB,aAAa,EAAE,CAAC;SACjB,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE1C,MAAM,KAAK,GAAG,IAAI,UAAU,CAC1B,EAAE,EACF,IAAI,EACJ,WAAW,EACX,MAAM,EACN,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,8CAA8C;SACpD,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CACX,GAAa,EACb,KAAc,EACd,WAAmB,EACnB,UAAkB,EAClB,SAAiB;QAEjB,MAAM,QAAQ,GAAG,GAAG,UAAU,IAAI,SAAS,EAAE,CAAC,WAAW,EAAE,CAAC;QAE5D,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;QAED,+BAA+B;QAC/B,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEnC,0CAA0C;QAC1C,IAAI,CAAC,YAAY,EAAE,gBAAgB,CAAC;YAClC,IAAI,EAAE,MAAM;YACZ,UAAU,EAAE,OAAO;YACnB,UAAU;YACV,UAAU,EAAE,SAAS;SACtB,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CACf,GAAa,EACb,UAAkB,EAClB,SAAiB,EACjB,WAA6B;QAE7B,MAAM,QAAQ,GAAG,GAAG,UAAU,IAAI,SAAS,EAAE,CAAC,WAAW,EAAE,CAAC;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAExC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,YAAY,CACpB,gBAAgB,SAAS,0BAA0B,UAAU,GAAG,EAChE,UAAU,CAAC,QAAQ,CACpB,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;QAC/D,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAEtC,uBAAuB;QACvB,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QACpF,MAAM,cAAc,GAAG,YAAY,CAAC;YAClC,WAAW,CAAC,IAAI;YAChB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC;SACpC,CAAC,CAAC;QACH,MAAM,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QAE9C,wCAAwC;QACxC,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAE9D,2BAA2B;QAC3B,IAAI,CAAC,YAAY,EAAE,gBAAgB,CAAC;YAClC,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,OAAO;YACnB,UAAU;YACV,UAAU,EAAE,WAAW,CAAC,IAAI;SAC7B,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAC7B,KAAc,EACd,WAAwB,EACxB,WAA6B;QAE7B,MAAM,aAAa,GAAG,EAAE,SAAS,EAAE,QAAiB,EAAE,CAAC;QAEvD,qBAAqB;QACrB,MAAM,MAAM,GAAG,oBAAoB,CAAC,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QAC9E,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QAE5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAChD,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAExC,oBAAoB;YACpB,MAAM,QAAQ,GAAG,WAAW,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;YAE3E,8BAA8B;YAC9B,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YAEnE,4BAA4B;YAC5B,MAAM,QAAQ,GAAG,aAAa,CAC5B,WAAW,CAAC,UAAU,EACtB,WAAW,CAAC,IAAI,EAChB,WAAW,CAAC,IAAI,EAChB,WAAW,EACX,QAAQ,EACR,aAAa,CACd,CAAC;YACF,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,uBAAuB;QACjE,CAAC;QAED,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,iBAAiB,CACf,GAAa,EACb,SAAsB,EACtB,OAA8B;QAE9B,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC;QAEpD,6CAA6C;QAC7C,MAAM,SAAS,GAAG,SAAS,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QACrE,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC3C,CAAC,CAAC,WAAW,KAAK,SAAS;YAC3B,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC;YACjC,CAAC,CAAC,EAAE,KAAK,GAAG,CACb,CAAC;QAEF,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClE,+BAA+B;YAC/B,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAC7C,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CACzE,CAAC;YACF,OAAO,iBAAiB;iBACrB,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC;iBACf,iBAAiB,CAAC,cAAc,CAAC;iBACjC,QAAQ,CAAC,IAAI,CAAC;iBACd,cAAc,CAAC,0BAA0B,CAAC;iBAC1C,KAAK,EAAE,CAAC;QACb,CAAC;QAED,oCAAoC;QACpC,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACxC,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC9C,CAAC,CAAC,WAAW,KAAK,SAAS;YAC3B,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC;YACjC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CACxB,CAAC;QAEF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,mBAAmB;YACnB,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAC7C,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAC5E,CAAC;YACF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC,CAAC;YAC/D,OAAO,iBAAiB;iBACrB,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC;iBACzB,iBAAiB,CAAC,cAAc,CAAC;iBACjC,cAAc,CAAC,8BAA8B,CAAC;iBAC9C,KAAK,EAAE,CAAC;QACb,CAAC;QAED,kCAAkC;QAClC,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC;QACxC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACrD,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC9C,CAAC,CAAC,WAAW,KAAK,SAAS;gBAC3B,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC;gBACpC,CAAC,CAAC,EAAE,KAAK,GAAG,CACb,CAAC;YAEF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAC7C,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAC/E,CAAC;gBACF,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC,CAAC;gBACjE,OAAO,iBAAiB;qBACrB,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC;qBACzB,iBAAiB,CAAC,cAAc,CAAC;qBACjC,cAAc,CAAC,uBAAuB,KAAK,CAAC,IAAI,EAAE,CAAC;qBACnD,KAAK,EAAE,CAAC;YACb,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,OAAO,iBAAiB;aACrB,QAAQ,CAAC,aAAa,CAAC;aACvB,iBAAiB,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAChE,cAAc,CAAC,uBAAuB,CAAC;aACvC,KAAK,EAAE,CAAC;IACb,CAAC;IAED,oDAAoD;IAEpD;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,QAAgB,EAAE,OAAyB;QACxD,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACpD,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YAE5D,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,iDAAiD,QAAQ,EAAE,CAAC,CAAC;YAC/E,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,QAAgB,EAAE,MAAwB;QAC7D,IAAI,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACpD,WAAW,GAAG,IAAI,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACnE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,WAAwB;QACzC,MAAM,QAAQ,GAAG,GAAG,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC/E,MAAM,GAAG,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QAC9E,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAEvC,4BAA4B;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACvC,CAAC;QAED,2CAA2C;QAC3C,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;QAC3D,MAAM,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC9C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;QAC3D,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,aAAa,GAAa,EAAE,CAAC;QAEnC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACvD,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACxC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,UAAkB,EAAE,SAAiB;QACxD,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QAC3D,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;QAC3D,MAAM,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,IAA0C;QAC5D,OAAO;YACL,SAAS,EAAG,IAAI,EAAE,SAAiC,IAAI,QAAQ;SAChE,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YACzC,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAE1B,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,UAAkB,EAAE,SAAiB;QAC5C,MAAM,QAAQ,GAAG,GAAG,UAAU,IAAI,SAAS,EAAE,CAAC,WAAW,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"store-module.js","sourceRoot":"","sources":["../../../src/common/store-module.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,11 @@
|
|
|
3
3
|
*
|
|
4
4
|
* This is a platform-agnostic table implementation that works with any
|
|
5
5
|
* KVStore implementation (LevelDB, IndexedDB, or custom stores).
|
|
6
|
+
*
|
|
7
|
+
* Storage architecture:
|
|
8
|
+
* - Data store: {schema}.{table} - row data keyed by encoded PK
|
|
9
|
+
* - Index stores: {schema}.{table}_idx_{name} - one per secondary index
|
|
10
|
+
* - Stats store: {schema}.{table}_stats - row count and metadata
|
|
6
11
|
*/
|
|
7
12
|
import { VirtualTable, IndexConstraintOp, type Database, type TableSchema, type Row, type FilterInfo, type SqlValue, type VirtualTableConnection, type UpdateArgs } from '@quereus/quereus';
|
|
8
13
|
import type { KVStore } from './kv-store.js';
|
|
@@ -25,8 +30,12 @@ export interface StoreTableConfig {
|
|
|
25
30
|
* Provides access to stores and coordinators.
|
|
26
31
|
*/
|
|
27
32
|
export interface StoreTableModule {
|
|
28
|
-
/** Get
|
|
33
|
+
/** Get the data store for a table. */
|
|
29
34
|
getStore(tableKey: string, config: StoreTableConfig): Promise<KVStore>;
|
|
35
|
+
/** Get an index store for a table. */
|
|
36
|
+
getIndexStore(schemaName: string, tableName: string, indexName: string): Promise<KVStore>;
|
|
37
|
+
/** Get the stats store for a table. */
|
|
38
|
+
getStatsStore(schemaName: string, tableName: string): Promise<KVStore>;
|
|
30
39
|
/** Get a coordinator for a table. */
|
|
31
40
|
getCoordinator(tableKey: string, config: StoreTableConfig): Promise<TransactionCoordinator>;
|
|
32
41
|
/** Save table DDL to persistent storage. */
|
|
@@ -44,6 +53,8 @@ export declare class StoreTable extends VirtualTable {
|
|
|
44
53
|
protected config: StoreTableConfig;
|
|
45
54
|
protected store: KVStore | null;
|
|
46
55
|
protected storeInitPromise: Promise<KVStore> | null;
|
|
56
|
+
protected indexStores: Map<string, KVStore>;
|
|
57
|
+
protected statsStore: KVStore | null;
|
|
47
58
|
protected coordinator: TransactionCoordinator | null;
|
|
48
59
|
protected connection: StoreConnection | null;
|
|
49
60
|
protected eventEmitter?: StoreEventEmitter;
|
|
@@ -59,7 +70,7 @@ export declare class StoreTable extends VirtualTable {
|
|
|
59
70
|
/** Get the table schema. */
|
|
60
71
|
getSchema(): TableSchema;
|
|
61
72
|
/**
|
|
62
|
-
* Ensure the store is open and DDL is persisted.
|
|
73
|
+
* Ensure the data store is open and DDL is persisted.
|
|
63
74
|
* Uses a promise-based singleton pattern to prevent race conditions
|
|
64
75
|
* when multiple concurrent queries access the same table.
|
|
65
76
|
*/
|
|
@@ -69,6 +80,14 @@ export declare class StoreTable extends VirtualTable {
|
|
|
69
80
|
* Only called once per table instance.
|
|
70
81
|
*/
|
|
71
82
|
private initializeStore;
|
|
83
|
+
/**
|
|
84
|
+
* Get or create an index store for the given index name.
|
|
85
|
+
*/
|
|
86
|
+
protected ensureIndexStore(indexName: string): Promise<KVStore>;
|
|
87
|
+
/**
|
|
88
|
+
* Get or create the stats store.
|
|
89
|
+
*/
|
|
90
|
+
protected ensureStatsStore(): Promise<KVStore>;
|
|
72
91
|
/**
|
|
73
92
|
* Ensure the coordinator is available and connection is registered.
|
|
74
93
|
*/
|
|
@@ -77,7 +96,7 @@ export declare class StoreTable extends VirtualTable {
|
|
|
77
96
|
protected applyPendingStats(): void;
|
|
78
97
|
/** Discard pending stats on rollback. */
|
|
79
98
|
protected discardPendingStats(): void;
|
|
80
|
-
/** Flush statistics to
|
|
99
|
+
/** Flush statistics to the stats store. */
|
|
81
100
|
protected flushStats(): Promise<void>;
|
|
82
101
|
/** Create a new connection for transaction support. */
|
|
83
102
|
createConnection(): Promise<VirtualTableConnection>;
|
|
@@ -98,7 +117,7 @@ export declare class StoreTable extends VirtualTable {
|
|
|
98
117
|
/** Perform an update operation (INSERT, UPDATE, DELETE). */
|
|
99
118
|
update(args: UpdateArgs): Promise<Row | undefined>;
|
|
100
119
|
/** Update secondary indexes after a row change. */
|
|
101
|
-
protected updateSecondaryIndexes(
|
|
120
|
+
protected updateSecondaryIndexes(inTransaction: boolean, oldRow: Row | null, newRow: Row | null, pk: SqlValue[]): Promise<void>;
|
|
102
121
|
/** Check if two PK arrays are equal. */
|
|
103
122
|
protected keysEqual(a: SqlValue[], b: SqlValue[]): boolean;
|
|
104
123
|
/** Disconnect from the store. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store-table.d.ts","sourceRoot":"","sources":["../../../src/common/store-table.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"store-table.d.ts","sourceRoot":"","sources":["../../../src/common/store-table.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,13 +3,20 @@
|
|
|
3
3
|
*
|
|
4
4
|
* This is a platform-agnostic table implementation that works with any
|
|
5
5
|
* KVStore implementation (LevelDB, IndexedDB, or custom stores).
|
|
6
|
+
*
|
|
7
|
+
* Storage architecture:
|
|
8
|
+
* - Data store: {schema}.{table} - row data keyed by encoded PK
|
|
9
|
+
* - Index stores: {schema}.{table}_idx_{name} - one per secondary index
|
|
10
|
+
* - Stats store: {schema}.{table}_stats - row count and metadata
|
|
6
11
|
*/
|
|
7
12
|
import { VirtualTable, IndexConstraintOp, ConflictResolution, QuereusError, ConstraintError, StatusCode, } from '@quereus/quereus';
|
|
8
13
|
import { StoreConnection } from './store-connection.js';
|
|
9
|
-
import { buildDataKey,
|
|
14
|
+
import { buildDataKey, buildIndexKey, buildFullScanBounds, } from './key-builder.js';
|
|
10
15
|
import { serializeRow, deserializeRow, serializeStats, deserializeStats, } from './serialization.js';
|
|
11
16
|
/** Number of mutations before persisting statistics. */
|
|
12
17
|
const STATS_FLUSH_INTERVAL = 100;
|
|
18
|
+
/** Single key used in the stats store (stats store has only one entry). */
|
|
19
|
+
const STATS_KEY = new Uint8Array(0);
|
|
13
20
|
/**
|
|
14
21
|
* Generic KVStore-backed virtual table.
|
|
15
22
|
*
|
|
@@ -22,6 +29,8 @@ export class StoreTable extends VirtualTable {
|
|
|
22
29
|
config;
|
|
23
30
|
store = null;
|
|
24
31
|
storeInitPromise = null;
|
|
32
|
+
indexStores = new Map();
|
|
33
|
+
statsStore = null;
|
|
25
34
|
coordinator = null;
|
|
26
35
|
connection = null;
|
|
27
36
|
eventEmitter;
|
|
@@ -51,20 +60,17 @@ export class StoreTable extends VirtualTable {
|
|
|
51
60
|
return this.tableSchema;
|
|
52
61
|
}
|
|
53
62
|
/**
|
|
54
|
-
* Ensure the store is open and DDL is persisted.
|
|
63
|
+
* Ensure the data store is open and DDL is persisted.
|
|
55
64
|
* Uses a promise-based singleton pattern to prevent race conditions
|
|
56
65
|
* when multiple concurrent queries access the same table.
|
|
57
66
|
*/
|
|
58
67
|
ensureStore() {
|
|
59
|
-
// If already resolved, return immediately
|
|
60
68
|
if (this.store) {
|
|
61
69
|
return Promise.resolve(this.store);
|
|
62
70
|
}
|
|
63
|
-
// If initialization is in progress, return the existing promise
|
|
64
71
|
if (this.storeInitPromise) {
|
|
65
72
|
return this.storeInitPromise;
|
|
66
73
|
}
|
|
67
|
-
// Start initialization and cache the promise
|
|
68
74
|
this.storeInitPromise = this.initializeStore();
|
|
69
75
|
return this.storeInitPromise;
|
|
70
76
|
}
|
|
@@ -87,11 +93,30 @@ export class StoreTable extends VirtualTable {
|
|
|
87
93
|
return this.store;
|
|
88
94
|
}
|
|
89
95
|
catch (error) {
|
|
90
|
-
// Clear the promise so retries are possible
|
|
91
96
|
this.storeInitPromise = null;
|
|
92
97
|
throw error;
|
|
93
98
|
}
|
|
94
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* Get or create an index store for the given index name.
|
|
102
|
+
*/
|
|
103
|
+
async ensureIndexStore(indexName) {
|
|
104
|
+
let indexStore = this.indexStores.get(indexName);
|
|
105
|
+
if (!indexStore) {
|
|
106
|
+
indexStore = await this.storeModule.getIndexStore(this.schemaName, this.tableName, indexName);
|
|
107
|
+
this.indexStores.set(indexName, indexStore);
|
|
108
|
+
}
|
|
109
|
+
return indexStore;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Get or create the stats store.
|
|
113
|
+
*/
|
|
114
|
+
async ensureStatsStore() {
|
|
115
|
+
if (!this.statsStore) {
|
|
116
|
+
this.statsStore = await this.storeModule.getStatsStore(this.schemaName, this.tableName);
|
|
117
|
+
}
|
|
118
|
+
return this.statsStore;
|
|
119
|
+
}
|
|
95
120
|
/**
|
|
96
121
|
* Ensure the coordinator is available and connection is registered.
|
|
97
122
|
*/
|
|
@@ -99,16 +124,13 @@ export class StoreTable extends VirtualTable {
|
|
|
99
124
|
if (!this.coordinator) {
|
|
100
125
|
const tableKey = `${this.schemaName}.${this.tableName}`.toLowerCase();
|
|
101
126
|
this.coordinator = await this.storeModule.getCoordinator(tableKey, this.config);
|
|
102
|
-
// Register callbacks for transaction lifecycle
|
|
103
127
|
this.coordinator.registerCallbacks({
|
|
104
128
|
onCommit: () => this.applyPendingStats(),
|
|
105
129
|
onRollback: () => this.discardPendingStats(),
|
|
106
130
|
});
|
|
107
131
|
}
|
|
108
|
-
// Ensure connection is registered with database
|
|
109
132
|
if (!this.connection) {
|
|
110
133
|
this.connection = new StoreConnection(this.tableName, this.coordinator);
|
|
111
|
-
// Register with the database for transaction management
|
|
112
134
|
const dbInternal = this.db;
|
|
113
135
|
await dbInternal.registerConnection(this.connection);
|
|
114
136
|
}
|
|
@@ -125,7 +147,6 @@ export class StoreTable extends VirtualTable {
|
|
|
125
147
|
this.cachedStats.updatedAt = Date.now();
|
|
126
148
|
this.mutationCount += Math.abs(this.pendingStatsDelta);
|
|
127
149
|
this.pendingStatsDelta = 0;
|
|
128
|
-
// Schedule lazy flush if needed
|
|
129
150
|
if (this.mutationCount >= STATS_FLUSH_INTERVAL && !this.statsFlushPending) {
|
|
130
151
|
this.statsFlushPending = true;
|
|
131
152
|
queueMicrotask(() => this.flushStats());
|
|
@@ -135,16 +156,15 @@ export class StoreTable extends VirtualTable {
|
|
|
135
156
|
discardPendingStats() {
|
|
136
157
|
this.pendingStatsDelta = 0;
|
|
137
158
|
}
|
|
138
|
-
/** Flush statistics to
|
|
159
|
+
/** Flush statistics to the stats store. */
|
|
139
160
|
async flushStats() {
|
|
140
161
|
this.statsFlushPending = false;
|
|
141
162
|
this.mutationCount = 0;
|
|
142
|
-
if (!this.cachedStats
|
|
163
|
+
if (!this.cachedStats) {
|
|
143
164
|
return;
|
|
144
165
|
}
|
|
145
|
-
const
|
|
146
|
-
|
|
147
|
-
await this.store.put(statsKey, serializeStats(this.cachedStats));
|
|
166
|
+
const statsStore = await this.ensureStatsStore();
|
|
167
|
+
await statsStore.put(STATS_KEY, serializeStats(this.cachedStats));
|
|
148
168
|
}
|
|
149
169
|
/** Create a new connection for transaction support. */
|
|
150
170
|
async createConnection() {
|
|
@@ -163,11 +183,9 @@ export class StoreTable extends VirtualTable {
|
|
|
163
183
|
/** Query the table with optional filters. */
|
|
164
184
|
async *query(filterInfo) {
|
|
165
185
|
const store = await this.ensureStore();
|
|
166
|
-
const schema = this.tableSchema;
|
|
167
|
-
// Check if we can use PK-based access
|
|
168
186
|
const pkAccess = this.analyzePKAccess(filterInfo);
|
|
169
187
|
if (pkAccess.type === 'point') {
|
|
170
|
-
const key = buildDataKey(
|
|
188
|
+
const key = buildDataKey(pkAccess.values, this.encodeOptions);
|
|
171
189
|
const value = await store.get(key);
|
|
172
190
|
if (value) {
|
|
173
191
|
const row = deserializeRow(value);
|
|
@@ -182,7 +200,7 @@ export class StoreTable extends VirtualTable {
|
|
|
182
200
|
return;
|
|
183
201
|
}
|
|
184
202
|
// Full table scan
|
|
185
|
-
const bounds =
|
|
203
|
+
const bounds = buildFullScanBounds();
|
|
186
204
|
for await (const entry of store.iterate(bounds)) {
|
|
187
205
|
const row = deserializeRow(entry.value);
|
|
188
206
|
if (this.matchesFilters(row, filterInfo)) {
|
|
@@ -233,8 +251,7 @@ export class StoreTable extends VirtualTable {
|
|
|
233
251
|
}
|
|
234
252
|
/** Scan a range of PK values. */
|
|
235
253
|
async *scanPKRange(store, _access, filterInfo) {
|
|
236
|
-
const
|
|
237
|
-
const bounds = buildTableScanBounds(schema.schemaName, schema.name);
|
|
254
|
+
const bounds = buildFullScanBounds();
|
|
238
255
|
// TODO: Refine bounds based on range constraints
|
|
239
256
|
for await (const entry of store.iterate(bounds)) {
|
|
240
257
|
const row = deserializeRow(entry.value);
|
|
@@ -290,7 +307,7 @@ export class StoreTable extends VirtualTable {
|
|
|
290
307
|
if (!values)
|
|
291
308
|
throw new QuereusError('INSERT requires values', StatusCode.MISUSE);
|
|
292
309
|
const pk = this.extractPK(values);
|
|
293
|
-
const key = buildDataKey(
|
|
310
|
+
const key = buildDataKey(pk, this.encodeOptions);
|
|
294
311
|
// Check for existing row (for conflict handling)
|
|
295
312
|
const existing = await store.get(key);
|
|
296
313
|
if (existing && args.onConflict !== ConflictResolution.REPLACE) {
|
|
@@ -304,7 +321,7 @@ export class StoreTable extends VirtualTable {
|
|
|
304
321
|
await store.put(key, serializedRow);
|
|
305
322
|
}
|
|
306
323
|
// Update secondary indexes
|
|
307
|
-
await this.updateSecondaryIndexes(
|
|
324
|
+
await this.updateSecondaryIndexes(inTransaction, null, values, pk);
|
|
308
325
|
// Track statistics (only count as new if not replacing)
|
|
309
326
|
if (!existing) {
|
|
310
327
|
this.trackMutation(+1, inTransaction);
|
|
@@ -330,8 +347,8 @@ export class StoreTable extends VirtualTable {
|
|
|
330
347
|
throw new QuereusError('UPDATE requires values and oldKeyValues', StatusCode.MISUSE);
|
|
331
348
|
const oldPk = this.extractPK(oldKeyValues);
|
|
332
349
|
const newPk = this.extractPK(values);
|
|
333
|
-
const oldKey = buildDataKey(
|
|
334
|
-
const newKey = buildDataKey(
|
|
350
|
+
const oldKey = buildDataKey(oldPk, this.encodeOptions);
|
|
351
|
+
const newKey = buildDataKey(newPk, this.encodeOptions);
|
|
335
352
|
// Get old row for index updates
|
|
336
353
|
const oldRowData = await store.get(oldKey);
|
|
337
354
|
const oldRow = oldRowData ? deserializeRow(oldRowData) : null;
|
|
@@ -352,7 +369,7 @@ export class StoreTable extends VirtualTable {
|
|
|
352
369
|
await store.put(newKey, serializedRow);
|
|
353
370
|
}
|
|
354
371
|
// Update secondary indexes
|
|
355
|
-
await this.updateSecondaryIndexes(
|
|
372
|
+
await this.updateSecondaryIndexes(inTransaction, oldRow, values, newPk);
|
|
356
373
|
// Queue or emit event
|
|
357
374
|
const updateEvent = {
|
|
358
375
|
type: 'update',
|
|
@@ -374,7 +391,7 @@ export class StoreTable extends VirtualTable {
|
|
|
374
391
|
if (!oldKeyValues)
|
|
375
392
|
throw new QuereusError('DELETE requires oldKeyValues', StatusCode.MISUSE);
|
|
376
393
|
const pk = this.extractPK(oldKeyValues);
|
|
377
|
-
const key = buildDataKey(
|
|
394
|
+
const key = buildDataKey(pk, this.encodeOptions);
|
|
378
395
|
// Get old row for index cleanup
|
|
379
396
|
const oldRowData = await store.get(key);
|
|
380
397
|
const oldRow = oldRowData ? deserializeRow(oldRowData) : null;
|
|
@@ -386,7 +403,7 @@ export class StoreTable extends VirtualTable {
|
|
|
386
403
|
}
|
|
387
404
|
// Remove from secondary indexes
|
|
388
405
|
if (oldRow) {
|
|
389
|
-
await this.updateSecondaryIndexes(
|
|
406
|
+
await this.updateSecondaryIndexes(inTransaction, oldRow, null, pk);
|
|
390
407
|
this.trackMutation(-1, inTransaction);
|
|
391
408
|
}
|
|
392
409
|
// Queue or emit event
|
|
@@ -410,34 +427,38 @@ export class StoreTable extends VirtualTable {
|
|
|
410
427
|
}
|
|
411
428
|
}
|
|
412
429
|
/** Update secondary indexes after a row change. */
|
|
413
|
-
async updateSecondaryIndexes(
|
|
430
|
+
async updateSecondaryIndexes(inTransaction, oldRow, newRow, pk) {
|
|
414
431
|
const schema = this.tableSchema;
|
|
415
432
|
const indexes = schema.indexes || [];
|
|
416
|
-
const store = coordinator.getStore();
|
|
417
433
|
for (const index of indexes) {
|
|
434
|
+
const indexStore = await this.ensureIndexStore(index.name);
|
|
418
435
|
const indexCols = index.columns.map(c => c.index);
|
|
419
436
|
// Remove old index entry
|
|
420
437
|
if (oldRow) {
|
|
421
438
|
const oldIndexValues = indexCols.map(i => oldRow[i]);
|
|
422
|
-
const oldIndexKey = buildIndexKey(
|
|
423
|
-
if (inTransaction) {
|
|
424
|
-
|
|
439
|
+
const oldIndexKey = buildIndexKey(oldIndexValues, pk, this.encodeOptions);
|
|
440
|
+
if (inTransaction && this.coordinator) {
|
|
441
|
+
// For transactions, we need to track index operations separately
|
|
442
|
+
// For now, apply directly (transaction support for indexes is TODO)
|
|
443
|
+
await indexStore.delete(oldIndexKey);
|
|
425
444
|
}
|
|
426
445
|
else {
|
|
427
|
-
await
|
|
446
|
+
await indexStore.delete(oldIndexKey);
|
|
428
447
|
}
|
|
429
448
|
}
|
|
430
449
|
// Add new index entry
|
|
431
450
|
if (newRow) {
|
|
432
451
|
const newIndexValues = indexCols.map(i => newRow[i]);
|
|
433
|
-
const newIndexKey = buildIndexKey(
|
|
452
|
+
const newIndexKey = buildIndexKey(newIndexValues, pk, this.encodeOptions);
|
|
434
453
|
// Index value is empty - we just need the key for lookups
|
|
435
454
|
const emptyValue = new Uint8Array(0);
|
|
436
|
-
if (inTransaction) {
|
|
437
|
-
|
|
455
|
+
if (inTransaction && this.coordinator) {
|
|
456
|
+
// For transactions, we need to track index operations separately
|
|
457
|
+
// For now, apply directly (transaction support for indexes is TODO)
|
|
458
|
+
await indexStore.put(newIndexKey, emptyValue);
|
|
438
459
|
}
|
|
439
460
|
else {
|
|
440
|
-
await
|
|
461
|
+
await indexStore.put(newIndexKey, emptyValue);
|
|
441
462
|
}
|
|
442
463
|
}
|
|
443
464
|
}
|
|
@@ -468,10 +489,8 @@ export class StoreTable extends VirtualTable {
|
|
|
468
489
|
if (this.cachedStats) {
|
|
469
490
|
return this.cachedStats.rowCount;
|
|
470
491
|
}
|
|
471
|
-
const
|
|
472
|
-
const
|
|
473
|
-
const statsKey = buildMetaKey('stats', schema.schemaName, schema.name);
|
|
474
|
-
const statsData = await store.get(statsKey);
|
|
492
|
+
const statsStore = await this.ensureStatsStore();
|
|
493
|
+
const statsData = await statsStore.get(STATS_KEY);
|
|
475
494
|
if (statsData) {
|
|
476
495
|
this.cachedStats = deserializeStats(statsData);
|
|
477
496
|
return this.cachedStats.rowCount;
|