@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.
@@ -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 persistent storage (both table store and catalog).
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":"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"}
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 { buildMetaKey, buildMetaScanBounds, buildIndexKey, buildTableScanBounds } from './key-builder.js';
13
- import { serializeRow, deserializeRow } from './serialization.js';
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
- // Close the store via provider
130
- await this.provider.closeStore(schemaName, tableName);
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
- const store = await this.getStore(tableKey, table.getConfig());
151
- const tableSchema = table.getSchema();
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.buildIndexEntries(store, tableSchema, indexSchema);
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(store, tableSchema, indexSchema) {
181
+ async buildIndexEntries(dataStore, indexStore, tableSchema, indexSchema) {
173
182
  const encodeOptions = { collation: 'NOCASE' };
174
183
  // Scan all data rows
175
- const bounds = buildTableScanBounds(tableSchema.schemaName, tableSchema.name);
176
- const batch = store.batch();
177
- for await (const entry of store.iterate(bounds)) {
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(tableSchema.schemaName, tableSchema.name, indexSchema.name, indexValues, pkValues, encodeOptions);
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 persistent storage (both table store and catalog).
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 metaKey = buildMetaKey('ddl', tableSchema.schemaName, tableSchema.name);
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(metaKey, encodedDDL);
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 = buildMetaScanBounds('ddl');
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 metaKey = buildMetaKey('ddl', schemaName, tableName);
327
+ const catalogKey = buildCatalogKey(schemaName, tableName);
314
328
  const catalogStore = await this.provider.getCatalogStore();
315
- await catalogStore.delete(metaKey);
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":"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"}
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 a store for a table. */
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 persistent storage. */
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(coordinator: TransactionCoordinator, inTransaction: boolean, oldRow: Row | null, newRow: Row | null, pk: SqlValue[]): Promise<void>;
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":"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"}
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, buildTableScanBounds, buildIndexKey, buildMetaKey, } from './key-builder.js';
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 persistent storage. */
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 || !this.store) {
163
+ if (!this.cachedStats) {
143
164
  return;
144
165
  }
145
- const schema = this.tableSchema;
146
- const statsKey = buildMetaKey('stats', schema.schemaName, schema.name);
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(schema.schemaName, schema.name, pkAccess.values, this.encodeOptions);
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 = buildTableScanBounds(schema.schemaName, schema.name);
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 schema = this.tableSchema;
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(schema.schemaName, schema.name, pk, this.encodeOptions);
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(coordinator, inTransaction, null, values, pk);
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(schema.schemaName, schema.name, oldPk, this.encodeOptions);
334
- const newKey = buildDataKey(schema.schemaName, schema.name, newPk, this.encodeOptions);
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(coordinator, inTransaction, oldRow, values, newPk);
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(schema.schemaName, schema.name, pk, this.encodeOptions);
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(coordinator, inTransaction, oldRow, null, pk);
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(coordinator, inTransaction, oldRow, newRow, pk) {
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(schema.schemaName, schema.name, index.name, oldIndexValues, pk, this.encodeOptions);
423
- if (inTransaction) {
424
- coordinator.delete(oldIndexKey);
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 store.delete(oldIndexKey);
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(schema.schemaName, schema.name, index.name, newIndexValues, pk, this.encodeOptions);
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
- coordinator.put(newIndexKey, emptyValue);
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 store.put(newIndexKey, emptyValue);
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 store = await this.ensureStore();
472
- const schema = this.tableSchema;
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;