@quereus/plugin-nativescript-sqlite 4.11.0 → 4.12.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 CHANGED
@@ -15,6 +15,37 @@ SQLite storage plugin for Quereus on NativeScript. Provides persistent storage f
15
15
  - **ACID transactions**: SQLite transactions for atomic batch writes
16
16
  - **WITHOUT ROWID**: Optimized key-value table structure
17
17
 
18
+ ## Table naming
19
+
20
+ Each logical store — a table's row data, or one of its secondary indexes — gets its own
21
+ SQLite table. The name comes from `@quereus/store`'s shared builders and is then escaped
22
+ into a legal bare SQLite identifier: digits and `a`-`z` pass through, every other byte
23
+ becomes `_XX` (uppercase hex of the UTF-8 byte). `_` is therefore always an escape
24
+ introducer and never a literal, which is what makes the escape reversible in principle — so
25
+ two differently-named tables can never land on one SQLite table.
26
+
27
+ | Logical store | SQLite table |
28
+ | --- | --- |
29
+ | table `t` in schema `main` | `quereus_main_2Et` |
30
+ | table `a-b` in schema `main` | `quereus_main_2Ea_2Db` |
31
+ | table `a b` in schema `main` | `quereus_main_2Ea_20b` |
32
+ | index `x` on table `t` | `quereus_main_2Et_5Fidx_5Fx` |
33
+ | table `café` in schema `main` | `quereus_main_2Ecaf_C3_A9` |
34
+ | unified stats | `quereus___stats__` |
35
+ | catalog (DDL) | `quereus___catalog__` |
36
+
37
+ The two reserved tables are deliberately **not** escaped, which is what keeps them
38
+ unreachable from any user table: an escaped name can never contain a bare `_` followed by a
39
+ non-hex character, so no table name can produce `__stats__` or `__catalog__`. The
40
+ `quereus_` part is the configurable `tablePrefix`.
41
+
42
+ > **Hard cutover (no on-disk migration).** An earlier version named its tables
43
+ > `{prefix}{schema}_{table}` with every character outside `[a-zA-Z0-9_]` folded to `_`.
44
+ > That mapping was many-to-one — tables `a-b` and `a b` shared one SQLite table and
45
+ > interleaved their rows — so it has been replaced outright. Databases written by the older
46
+ > version are **not** read by this version and must be re-created. Pre-1.0 dev data is
47
+ > expected to be thrown away; there is no migration importer.
48
+
18
49
  ## Installation
19
50
 
20
51
  ```bash
@@ -134,7 +165,8 @@ import { createSQLiteProvider } from '@quereus/plugin-nativescript-sqlite';
134
165
  const sqliteDb = openOrCreate('quereus.db');
135
166
  const provider = createSQLiteProvider({ db: sqliteDb });
136
167
 
137
- // Each store gets its own table: quereus_main_users, quereus_main_orders, etc.
168
+ // Each store gets its own table: quereus_main_2Eusers, quereus_main_2Eorders, etc.
169
+ // (see "Table naming" above for how the name is escaped)
138
170
  const userStore = await provider.getStore('main', 'users');
139
171
  const orderStore = await provider.getStore('main', 'orders');
140
172
  const catalogStore = await provider.getCatalogStore();
@@ -171,7 +203,7 @@ Keys and values are stored as BLOBs (binary). SQLite compares BLOBs using `memcm
171
203
  Each store creates a table with this schema:
172
204
 
173
205
  ```sql
174
- create table quereus_main_users (
206
+ create table quereus_main_2Eusers (
175
207
  key blob primary key,
176
208
  value blob
177
209
  ) without rowid
@@ -4,11 +4,25 @@
4
4
  * Manages SQLite-backed KV stores for the StoreModule.
5
5
  * Uses a single SQLite database with multiple tables (one per logical store).
6
6
  *
7
- * Storage naming convention:
8
- * {prefix}{schema}_{table} - Data store (row data)
9
- * {prefix}{schema}_{table}_idx_{name} - Index store (secondary indexes)
10
- * {prefix}__stats__ - Unified stats store (row counts for all tables)
11
- * {prefix}__catalog__ - Catalog store (DDL metadata)
7
+ * Storage naming convention. Every logical store name comes from the shared builders
8
+ * (`buildDataStoreName` / `buildIndexStoreName`), then {@link encodeSqliteName} escapes it
9
+ * into a legal bare SQLite identifier:
10
+ *
11
+ * {prefix}{encoded {schema}.{table}} - Data store (row data)
12
+ * {prefix}{encoded {schema}.{table}_idx_{name}} - Index store (secondary indexes)
13
+ * {prefix}__stats__ - Unified stats store (row counts)
14
+ * {prefix}__catalog__ - Catalog store (DDL metadata)
15
+ *
16
+ * e.g. table `users` in schema `main` → `quereus_main_2Eusers`.
17
+ *
18
+ * The two reserved stores are NOT run through the encoder, and that is exactly what keeps
19
+ * them in a namespace no table can reach — see {@link encodeSqliteName}.
20
+ *
21
+ * HARD CUTOVER: an earlier version derived its own table names (`{prefix}{schema}_{table}`,
22
+ * with every character outside `[a-zA-Z0-9_]` folded to `_`). Those tables are NOT read
23
+ * here and databases written by it must be re-created; there is no on-disk migration. The
24
+ * old scheme was many-to-one, so two differently-named tables could share one SQLite table
25
+ * and interleave their rows.
12
26
  */
13
27
  import type { KVStore, KVStoreProvider } from '@quereus/store';
14
28
  import { type SQLiteDatabase } from './store.js';
@@ -40,15 +54,6 @@ export declare class SQLiteProvider implements KVStoreProvider {
40
54
  private catalogStore;
41
55
  private statsStore;
42
56
  constructor(options: SQLiteProviderOptions);
43
- /**
44
- * Get the table name for a store.
45
- * Sanitizes schema/table names to valid SQLite identifiers.
46
- */
47
- private getTableName;
48
- /**
49
- * Get the key for the store cache.
50
- */
51
- private getStoreKey;
52
57
  getStore(schemaName: string, tableName: string, _options?: Record<string, unknown>): Promise<KVStore>;
53
58
  getIndexStore(schemaName: string, tableName: string, indexName: string): Promise<KVStore>;
54
59
  getStatsStore(_schemaName: string, _tableName: string): Promise<KVStore>;
@@ -58,8 +63,34 @@ export declare class SQLiteProvider implements KVStoreProvider {
58
63
  closeAll(): Promise<void>;
59
64
  deleteIndexStore(schemaName: string, tableName: string, indexName: string): Promise<void>;
60
65
  deleteTableStores(schemaName: string, tableName: string, indexNames: readonly string[]): Promise<void>;
66
+ /**
67
+ * The SQLite table backing a logical store.
68
+ *
69
+ * The ONE derivation, shared by every caller: a second hand-derived spelling of this is
70
+ * precisely the defect class the naming work had to remove from this file once (a store
71
+ * opened under one name and reclaimed under another leaves the rows in place).
72
+ */
73
+ private physicalTableName;
74
+ /**
75
+ * Get or open the store for a logical store name, caching by that CANONICAL name —
76
+ * the same string the shared builders produce and `StoreModule` reasons about. Keying
77
+ * the cache by anything else (a separately-derived spelling) risks two cache entries
78
+ * for one physical table, or one entry shared by two.
79
+ */
61
80
  private getOrCreateStore;
62
- private closeStoreByKey;
81
+ private closeStoreByName;
82
+ /**
83
+ * Erase a store by dropping its backing table, after closing and evicting any cached
84
+ * handle — so a store re-opened later under the same name is EMPTY, which is the reclaim
85
+ * contract on {@link KVStoreProvider.deleteTableStores}. `if exists` makes deleting a
86
+ * store that was never created a no-op that creates nothing, as that contract also asks.
87
+ *
88
+ * The table name is interpolated rather than bound because SQLite cannot parameterize an
89
+ * identifier; {@link encodeSqliteName} restricts every produced name to `[0-9a-z_]` plus
90
+ * the uppercase hex of its escapes, so there is no quoting or injection surface — the
91
+ * same reason `SQLiteStore` interpolates it.
92
+ */
93
+ private dropStoreByName;
63
94
  }
64
95
  /**
65
96
  * Create a SQLite provider with the given options.
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE/D,OAAO,EAAe,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACrC;;;OAGG;IACH,EAAE,EAAE,cAAc,CAAC;IAEnB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,qBAAa,cAAe,YAAW,eAAe;IACrD,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,UAAU,CAA4B;gBAElC,OAAO,EAAE,qBAAqB;IAK1C;;;OAGG;IACH,OAAO,CAAC,YAAY;IAKpB;;OAEG;IACH,OAAO,CAAC,WAAW;IAIb,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAKrG,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMzF,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQxE,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAOnC,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhE,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxF,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBzB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzF,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB5G,OAAO,CAAC,gBAAgB;YAWV,eAAe;CAO7B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,CAEnF"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE/D,OAAO,EAAe,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AA2C9D;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACrC;;;OAGG;IACH,EAAE,EAAE,cAAc,CAAC;IAEnB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,qBAAa,cAAe,YAAW,eAAe;IACrD,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,UAAU,CAA4B;gBAElC,OAAO,EAAE,qBAAqB;IAKpC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAIrG,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIzF,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQxE,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAOnC,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhE,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxF,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBzB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzF,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB5G;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;YAWV,gBAAgB;IAQ9B;;;;;;;;;;OAUG;YACW,eAAe;CAQ7B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,CAEnF"}
@@ -4,14 +4,67 @@
4
4
  * Manages SQLite-backed KV stores for the StoreModule.
5
5
  * Uses a single SQLite database with multiple tables (one per logical store).
6
6
  *
7
- * Storage naming convention:
8
- * {prefix}{schema}_{table} - Data store (row data)
9
- * {prefix}{schema}_{table}_idx_{name} - Index store (secondary indexes)
10
- * {prefix}__stats__ - Unified stats store (row counts for all tables)
11
- * {prefix}__catalog__ - Catalog store (DDL metadata)
7
+ * Storage naming convention. Every logical store name comes from the shared builders
8
+ * (`buildDataStoreName` / `buildIndexStoreName`), then {@link encodeSqliteName} escapes it
9
+ * into a legal bare SQLite identifier:
10
+ *
11
+ * {prefix}{encoded {schema}.{table}} - Data store (row data)
12
+ * {prefix}{encoded {schema}.{table}_idx_{name}} - Index store (secondary indexes)
13
+ * {prefix}__stats__ - Unified stats store (row counts)
14
+ * {prefix}__catalog__ - Catalog store (DDL metadata)
15
+ *
16
+ * e.g. table `users` in schema `main` → `quereus_main_2Eusers`.
17
+ *
18
+ * The two reserved stores are NOT run through the encoder, and that is exactly what keeps
19
+ * them in a namespace no table can reach — see {@link encodeSqliteName}.
20
+ *
21
+ * HARD CUTOVER: an earlier version derived its own table names (`{prefix}{schema}_{table}`,
22
+ * with every character outside `[a-zA-Z0-9_]` folded to `_`). Those tables are NOT read
23
+ * here and databases written by it must be re-created; there is no on-disk migration. The
24
+ * old scheme was many-to-one, so two differently-named tables could share one SQLite table
25
+ * and interleave their rows.
12
26
  */
13
- import { STORE_SUFFIX, STATS_STORE_NAME } from '@quereus/store';
27
+ import { buildDataStoreName, buildIndexStoreName, CATALOG_STORE_NAME, STATS_STORE_NAME } from '@quereus/store';
14
28
  import { SQLiteStore } from './store.js';
29
+ const textEncoder = new TextEncoder();
30
+ /**
31
+ * Escape a logical store name into a legal bare SQLite identifier.
32
+ *
33
+ * Bytes `0`-`9` and `a`-`z` pass through; every other byte becomes `_XX` (uppercase hex of
34
+ * the UTF-8 byte). `_` is therefore ALWAYS an escape introducer and never a literal, which
35
+ * is what makes the mapping injective: the output can be parsed back unambiguously, so two
36
+ * different store names can never produce the same identifier. That matters because
37
+ * `StoreModule.assertStoreNameFree` compares LOGICAL names and only stands in for a
38
+ * physical collision check while this mapping is one-to-one.
39
+ *
40
+ * Percent-escaping (what `@quereus/plugin-leveldb` uses) is deliberately not reused here:
41
+ * `%` is illegal in a bare SQLite identifier, and `SQLiteStore` interpolates the table name
42
+ * straight into its SQL unquoted — so escaping into `[a-z0-9_]` keeps every produced name a
43
+ * legal bare identifier and adds no quoting/injection surface.
44
+ *
45
+ * Two properties the callers rely on:
46
+ *
47
+ * - Injective under SQLite's ASCII-case-insensitive identifier comparison too. The input
48
+ * is already lowercased by the shared builders, so no ASCII uppercase survives to be
49
+ * escaped and the escape hex is the only uppercase in the output; case-folding it back
50
+ * to `_2e` still decodes to the same byte.
51
+ * - Disjoint from the reserved store names. `{prefix}__stats__` and `{prefix}__catalog__`
52
+ * are used UNESCAPED; an encoded name can never contain a bare `_` followed by a
53
+ * non-hex character, so no table name can produce `__stats__` (its second `_` is not a
54
+ * hex digit) and no table can spoof a reserved store. Do not run the reserved names
55
+ * through this function.
56
+ */
57
+ function encodeSqliteName(name) {
58
+ let out = '';
59
+ for (const byte of textEncoder.encode(name)) {
60
+ const isDigit = byte >= 0x30 && byte <= 0x39;
61
+ const isLower = byte >= 0x61 && byte <= 0x7a;
62
+ out += (isDigit || isLower)
63
+ ? String.fromCharCode(byte)
64
+ : '_' + byte.toString(16).toUpperCase().padStart(2, '0');
65
+ }
66
+ return out;
67
+ }
15
68
  /**
16
69
  * SQLite implementation of KVStoreProvider for NativeScript.
17
70
  *
@@ -28,28 +81,11 @@ export class SQLiteProvider {
28
81
  this.db = options.db;
29
82
  this.tablePrefix = options.tablePrefix ?? 'quereus_';
30
83
  }
31
- /**
32
- * Get the table name for a store.
33
- * Sanitizes schema/table names to valid SQLite identifiers.
34
- */
35
- getTableName(schemaName, tableName) {
36
- const sanitized = `${schemaName}_${tableName}`.replace(/[^a-zA-Z0-9_]/g, '_');
37
- return `${this.tablePrefix}${sanitized}`;
38
- }
39
- /**
40
- * Get the key for the store cache.
41
- */
42
- getStoreKey(schemaName, tableName) {
43
- return `${schemaName}.${tableName}`.toLowerCase();
44
- }
45
84
  async getStore(schemaName, tableName, _options) {
46
- const key = this.getStoreKey(schemaName, tableName);
47
- return this.getOrCreateStore(key, this.getTableName(schemaName, tableName));
85
+ return this.getOrCreateStore(buildDataStoreName(schemaName, tableName));
48
86
  }
49
87
  async getIndexStore(schemaName, tableName, indexName) {
50
- const key = `${this.getStoreKey(schemaName, tableName)}${STORE_SUFFIX.INDEX}${indexName}`;
51
- const sqliteTableName = `${this.getTableName(schemaName, tableName)}${STORE_SUFFIX.INDEX}${indexName}`.replace(/[^a-zA-Z0-9_]/g, '_');
52
- return this.getOrCreateStore(key, sqliteTableName);
88
+ return this.getOrCreateStore(buildIndexStoreName(schemaName, tableName, indexName));
53
89
  }
54
90
  async getStatsStore(_schemaName, _tableName) {
55
91
  // Use the unified __stats__ store for all tables
@@ -60,17 +96,15 @@ export class SQLiteProvider {
60
96
  }
61
97
  async getCatalogStore() {
62
98
  if (!this.catalogStore) {
63
- this.catalogStore = SQLiteStore.create(this.db, `${this.tablePrefix}__catalog__`);
99
+ this.catalogStore = SQLiteStore.create(this.db, `${this.tablePrefix}${CATALOG_STORE_NAME}`);
64
100
  }
65
101
  return this.catalogStore;
66
102
  }
67
103
  async closeStore(schemaName, tableName) {
68
- const key = this.getStoreKey(schemaName, tableName);
69
- await this.closeStoreByKey(key);
104
+ await this.closeStoreByName(buildDataStoreName(schemaName, tableName));
70
105
  }
71
106
  async closeIndexStore(schemaName, tableName, indexName) {
72
- const key = `${this.getStoreKey(schemaName, tableName)}${STORE_SUFFIX.INDEX}${indexName}`;
73
- await this.closeStoreByKey(key);
107
+ await this.closeStoreByName(buildIndexStoreName(schemaName, tableName, indexName));
74
108
  }
75
109
  async closeAll() {
76
110
  for (const store of this.stores.values()) {
@@ -89,38 +123,72 @@ export class SQLiteProvider {
89
123
  this.db.close();
90
124
  }
91
125
  async deleteIndexStore(schemaName, tableName, indexName) {
92
- const key = `${this.getStoreKey(schemaName, tableName)}${STORE_SUFFIX.INDEX}${indexName}`;
93
- await this.closeStoreByKey(key);
94
- // Note: SQLite doesn't need explicit store deletion - table is dropped when closed
126
+ await this.dropStoreByName(buildIndexStoreName(schemaName, tableName, indexName));
95
127
  }
96
128
  async deleteTableStores(schemaName, tableName, indexNames) {
97
- // Close data store
98
- const dataKey = this.getStoreKey(schemaName, tableName);
99
- await this.closeStoreByKey(dataKey);
100
- // Stats are in the unified __stats__ store, so no need to close a separate store
101
- // The individual stats entry will be removed by the calling code if needed
102
- // Close exactly the table's index stores (by name), not every store matching
129
+ // Drop the data store's backing table.
130
+ await this.dropStoreByName(buildDataStoreName(schemaName, tableName));
131
+ // Stats live in the unified __stats__ store, so there is no per-table stats store to
132
+ // drop here. (The table's ENTRY in that store is not reclaimed by anyone today —
133
+ // tracked as `bug-drop-table-leaves-stale-stats-entry`; it is a stale row-count
134
+ // estimate, not stale rows.)
135
+ // Drop exactly the table's index stores (by name), not every store matching
103
136
  // the `{table}_idx_` prefix — that prefix also matches a sibling table
104
137
  // literally named `{table}_idx_<x>`.
105
138
  for (const indexName of indexNames) {
106
- await this.closeStoreByKey(`${dataKey}${STORE_SUFFIX.INDEX}${indexName}`);
139
+ await this.dropStoreByName(buildIndexStoreName(schemaName, tableName, indexName));
107
140
  }
108
141
  }
109
- getOrCreateStore(key, sqliteTableName) {
110
- let store = this.stores.get(key);
142
+ /**
143
+ * The SQLite table backing a logical store.
144
+ *
145
+ * The ONE derivation, shared by every caller: a second hand-derived spelling of this is
146
+ * precisely the defect class the naming work had to remove from this file once (a store
147
+ * opened under one name and reclaimed under another leaves the rows in place).
148
+ */
149
+ physicalTableName(storeName) {
150
+ return `${this.tablePrefix}${encodeSqliteName(storeName)}`;
151
+ }
152
+ /**
153
+ * Get or open the store for a logical store name, caching by that CANONICAL name —
154
+ * the same string the shared builders produce and `StoreModule` reasons about. Keying
155
+ * the cache by anything else (a separately-derived spelling) risks two cache entries
156
+ * for one physical table, or one entry shared by two.
157
+ */
158
+ getOrCreateStore(storeName) {
159
+ let store = this.stores.get(storeName);
111
160
  if (!store) {
112
- store = SQLiteStore.create(this.db, sqliteTableName);
113
- this.stores.set(key, store);
161
+ store = SQLiteStore.create(this.db, this.physicalTableName(storeName));
162
+ this.stores.set(storeName, store);
114
163
  }
115
164
  return store;
116
165
  }
117
- async closeStoreByKey(key) {
118
- const store = this.stores.get(key);
166
+ async closeStoreByName(storeName) {
167
+ const store = this.stores.get(storeName);
119
168
  if (store) {
120
169
  await store.close();
121
- this.stores.delete(key);
170
+ this.stores.delete(storeName);
122
171
  }
123
172
  }
173
+ /**
174
+ * Erase a store by dropping its backing table, after closing and evicting any cached
175
+ * handle — so a store re-opened later under the same name is EMPTY, which is the reclaim
176
+ * contract on {@link KVStoreProvider.deleteTableStores}. `if exists` makes deleting a
177
+ * store that was never created a no-op that creates nothing, as that contract also asks.
178
+ *
179
+ * The table name is interpolated rather than bound because SQLite cannot parameterize an
180
+ * identifier; {@link encodeSqliteName} restricts every produced name to `[0-9a-z_]` plus
181
+ * the uppercase hex of its escapes, so there is no quoting or injection surface — the
182
+ * same reason `SQLiteStore` interpolates it.
183
+ */
184
+ async dropStoreByName(storeName) {
185
+ await this.closeStoreByName(storeName);
186
+ // NOTE: dropping a table returns its pages to this SQLite file's freelist for reuse,
187
+ // but does not shrink the file on disk — that needs a `vacuum`, which is not run here.
188
+ // If a mobile app's database file growing and never shrinking becomes a complaint,
189
+ // that is the thread to pull.
190
+ this.db.execute(`drop table if exists ${this.physicalTableName(storeName)}`);
191
+ }
124
192
  }
125
193
  /**
126
194
  * Create a SQLite provider with the given options.
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/provider.ts"],"names":[],"mappings":"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"}
@@ -62,6 +62,17 @@ export declare class SQLiteStore implements KVStore {
62
62
  static create(db: SQLiteDatabase, tableName?: string): SQLiteStore;
63
63
  private ensureTable;
64
64
  get(key: Uint8Array): Promise<Uint8Array | undefined>;
65
+ /**
66
+ * The shared fallback: `SQLiteDatabase.select` is synchronous and in-process, so a batch
67
+ * is N local statement executions with no round trip to collapse.
68
+ *
69
+ * NOTE: a single `select key, value from … where key in (?, ?, …)` would replace those N
70
+ * statements with one, but it needs a per-batch-size SQL string (or a rebuilt statement
71
+ * each call) and a key→value re-ordering pass, since `in` answers in table order rather
72
+ * than argument order. Not worth it while the reads are local; do it if a SQLite-backed
73
+ * mobile profile ever shows the per-statement overhead.
74
+ */
75
+ getMany(keys: readonly Uint8Array[]): Promise<(Uint8Array | undefined)[]>;
65
76
  put(key: Uint8Array, value: Uint8Array): Promise<void>;
66
77
  delete(key: Uint8Array): Promise<void>;
67
78
  has(key: Uint8Array): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAgB,KAAK,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhH;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/C,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;IACnD,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,iBAAiB,EAAE,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5D,KAAK,IAAI,IAAI,CAAC;CACf;AAWD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,oCAAoC;IACpC,EAAE,EAAE,cAAc,CAAC;IACnB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,qBAAa,WAAY,YAAW,OAAO;IACzC,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAS;IAGvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,OAAO,EAAE,kBAAkB;IAcvC;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,cAAc,EAAE,SAAS,GAAE,MAAa,GAAG,WAAW;IAIxE,OAAO,CAAC,WAAW;IAWb,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAWrD,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtD,MAAM,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtC,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAMrC,OAAO,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,aAAa,CAAC,OAAO,CAAC;IAoBhE,kFAAkF;YACpE,UAAU;IASxB;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IAwBxB;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAOzB,KAAK,IAAI,UAAU;IAKb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;;;;;;;;;OAUG;IACG,gBAAgB,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAQjE,OAAO,CAAC,SAAS;IAMjB;;;OAGG;IACH,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,KAAK,CAAC;QAAC,GAAG,EAAE,UAAU,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,GAAG,EAAE,UAAU,CAAA;KAAE,CAAC,GAAG,IAAI;CAa1H"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAgC,KAAK,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhI;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/C,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;IACnD,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,iBAAiB,EAAE,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5D,KAAK,IAAI,IAAI,CAAC;CACf;AAWD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,oCAAoC;IACpC,EAAE,EAAE,cAAc,CAAC;IACnB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,qBAAa,WAAY,YAAW,OAAO;IACzC,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAS;IAGvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,OAAO,EAAE,kBAAkB;IAcvC;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,cAAc,EAAE,SAAS,GAAE,MAAa,GAAG,WAAW;IAIxE,OAAO,CAAC,WAAW;IAWb,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAW3D;;;;;;;;;OASG;IACH,OAAO,CAAC,IAAI,EAAE,SAAS,UAAU,EAAE,GAAG,OAAO,CAAC,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,CAAC;IAInE,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtD,MAAM,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtC,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAMrC,OAAO,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,aAAa,CAAC,OAAO,CAAC;IAoBhE,kFAAkF;YACpE,UAAU;IASxB;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IAwBxB;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAOzB,KAAK,IAAI,UAAU;IAKb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;;;;;;;;;OAUG;IACG,gBAAgB,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAQjE,OAAO,CAAC,SAAS;IAMjB;;;OAGG;IACH,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,KAAK,CAAC;QAAC,GAAG,EAAE,UAAU,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,GAAG,EAAE,UAAU,CAAA;KAAE,CAAC,GAAG,IAAI;CAa1H"}
package/dist/src/store.js CHANGED
@@ -4,7 +4,7 @@
4
4
  * Uses @nativescript-community/sqlite for SQLite bindings on iOS/Android.
5
5
  * Keys and values are stored as BLOBs for correct lexicographic ordering.
6
6
  */
7
- import { pagedIterate } from '@quereus/store';
7
+ import { defaultGetMany, pagedIterate } from '@quereus/store';
8
8
  /**
9
9
  * Entries per `select` when {@link SQLiteStore.iterate} pages a range.
10
10
  *
@@ -72,6 +72,19 @@ export class SQLiteStore {
72
72
  }
73
73
  return toUint8Array(rows[0].value);
74
74
  }
75
+ /**
76
+ * The shared fallback: `SQLiteDatabase.select` is synchronous and in-process, so a batch
77
+ * is N local statement executions with no round trip to collapse.
78
+ *
79
+ * NOTE: a single `select key, value from … where key in (?, ?, …)` would replace those N
80
+ * statements with one, but it needs a per-batch-size SQL string (or a rebuilt statement
81
+ * each call) and a key→value re-ordering pass, since `in` answers in table order rather
82
+ * than argument order. Not worth it while the reads are local; do it if a SQLite-backed
83
+ * mobile profile ever shows the per-statement overhead.
84
+ */
85
+ getMany(keys) {
86
+ return defaultGetMany(this, keys);
87
+ }
75
88
  async put(key, value) {
76
89
  this.checkOpen();
77
90
  this.db.execute(this.sqlPut, [toArrayBuffer(key), toArrayBuffer(value)]);
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quereus/plugin-nativescript-sqlite",
3
- "version": "4.11.0",
3
+ "version": "4.12.0",
4
4
  "type": "module",
5
5
  "description": "NativeScript SQLite storage plugin for Quereus - mobile persistent storage",
6
6
  "keywords": [
@@ -42,9 +42,9 @@
42
42
  },
43
43
  "peerDependencies": {
44
44
  "@nativescript-community/sqlite": "^3.0.0",
45
- "@quereus/isolation": "^4.11.0",
46
- "@quereus/quereus": "^4.11.0",
47
- "@quereus/store": "^4.11.0"
45
+ "@quereus/isolation": "^4.12.0",
46
+ "@quereus/quereus": "^4.12.0",
47
+ "@quereus/store": "^4.12.0"
48
48
  },
49
49
  "engines": {
50
50
  "quereus": "^0.24.0"
@@ -87,8 +87,8 @@
87
87
  "test": "cd ../.. && node --import ./packages/quereus-plugin-nativescript-sqlite/register.mjs node_modules/mocha/bin/mocha.js \"packages/quereus-plugin-nativescript-sqlite/test/**/*.spec.ts\" --reporter min --colors"
88
88
  },
89
89
  "dependencies": {
90
- "@quereus/quereus": "^4.11.0",
91
- "@quereus/store": "^4.11.0"
90
+ "@quereus/quereus": "^4.12.0",
91
+ "@quereus/store": "^4.12.0"
92
92
  },
93
93
  "devDependencies": {
94
94
  "@quereus/isolation": "*",