@quereus/plugin-nativescript-sqlite 0.2.1 → 0.3.1
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/dist/src/provider.d.ts +14 -0
- package/dist/src/provider.d.ts.map +1 -1
- package/dist/src/provider.js +64 -11
- package/dist/src/provider.js.map +1 -1
- package/package.json +3 -3
package/dist/src/provider.d.ts
CHANGED
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
*
|
|
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
|
+
*
|
|
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)
|
|
6
12
|
*/
|
|
7
13
|
import type { KVStore, KVStoreProvider } from '@quereus/store';
|
|
8
14
|
import { type SQLiteDatabase } from './store.js';
|
|
@@ -32,6 +38,7 @@ export declare class SQLiteProvider implements KVStoreProvider {
|
|
|
32
38
|
private tablePrefix;
|
|
33
39
|
private stores;
|
|
34
40
|
private catalogStore;
|
|
41
|
+
private statsStore;
|
|
35
42
|
constructor(options: SQLiteProviderOptions);
|
|
36
43
|
/**
|
|
37
44
|
* Get the table name for a store.
|
|
@@ -43,9 +50,16 @@ export declare class SQLiteProvider implements KVStoreProvider {
|
|
|
43
50
|
*/
|
|
44
51
|
private getStoreKey;
|
|
45
52
|
getStore(schemaName: string, tableName: string, _options?: Record<string, unknown>): Promise<KVStore>;
|
|
53
|
+
getIndexStore(schemaName: string, tableName: string, indexName: string): Promise<KVStore>;
|
|
54
|
+
getStatsStore(_schemaName: string, _tableName: string): Promise<KVStore>;
|
|
46
55
|
getCatalogStore(): Promise<KVStore>;
|
|
47
56
|
closeStore(schemaName: string, tableName: string): Promise<void>;
|
|
57
|
+
closeIndexStore(schemaName: string, tableName: string, indexName: string): Promise<void>;
|
|
48
58
|
closeAll(): Promise<void>;
|
|
59
|
+
deleteIndexStore(schemaName: string, tableName: string, indexName: string): Promise<void>;
|
|
60
|
+
deleteTableStores(schemaName: string, tableName: string): Promise<void>;
|
|
61
|
+
private getOrCreateStore;
|
|
62
|
+
private closeStoreByKey;
|
|
49
63
|
}
|
|
50
64
|
/**
|
|
51
65
|
* 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
|
|
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,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB7E,OAAO,CAAC,gBAAgB;YAWV,eAAe;CAO7B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,CAEnF"}
|
package/dist/src/provider.js
CHANGED
|
@@ -3,7 +3,14 @@
|
|
|
3
3
|
*
|
|
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
|
+
*
|
|
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)
|
|
6
12
|
*/
|
|
13
|
+
import { STORE_SUFFIX, STATS_STORE_NAME } from '@quereus/store';
|
|
7
14
|
import { SQLiteStore } from './store.js';
|
|
8
15
|
/**
|
|
9
16
|
* SQLite implementation of KVStoreProvider for NativeScript.
|
|
@@ -16,6 +23,7 @@ export class SQLiteProvider {
|
|
|
16
23
|
tablePrefix;
|
|
17
24
|
stores = new Map();
|
|
18
25
|
catalogStore = null;
|
|
26
|
+
statsStore = null;
|
|
19
27
|
constructor(options) {
|
|
20
28
|
this.db = options.db;
|
|
21
29
|
this.tablePrefix = options.tablePrefix ?? 'quereus_';
|
|
@@ -36,13 +44,19 @@ export class SQLiteProvider {
|
|
|
36
44
|
}
|
|
37
45
|
async getStore(schemaName, tableName, _options) {
|
|
38
46
|
const key = this.getStoreKey(schemaName, tableName);
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
47
|
+
return this.getOrCreateStore(key, this.getTableName(schemaName, tableName));
|
|
48
|
+
}
|
|
49
|
+
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);
|
|
53
|
+
}
|
|
54
|
+
async getStatsStore(_schemaName, _tableName) {
|
|
55
|
+
// Use the unified __stats__ store for all tables
|
|
56
|
+
if (!this.statsStore) {
|
|
57
|
+
this.statsStore = SQLiteStore.create(this.db, `${this.tablePrefix}${STATS_STORE_NAME}`);
|
|
44
58
|
}
|
|
45
|
-
return
|
|
59
|
+
return this.statsStore;
|
|
46
60
|
}
|
|
47
61
|
async getCatalogStore() {
|
|
48
62
|
if (!this.catalogStore) {
|
|
@@ -52,11 +66,11 @@ export class SQLiteProvider {
|
|
|
52
66
|
}
|
|
53
67
|
async closeStore(schemaName, tableName) {
|
|
54
68
|
const key = this.getStoreKey(schemaName, tableName);
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
69
|
+
await this.closeStoreByKey(key);
|
|
70
|
+
}
|
|
71
|
+
async closeIndexStore(schemaName, tableName, indexName) {
|
|
72
|
+
const key = `${this.getStoreKey(schemaName, tableName)}${STORE_SUFFIX.INDEX}${indexName}`;
|
|
73
|
+
await this.closeStoreByKey(key);
|
|
60
74
|
}
|
|
61
75
|
async closeAll() {
|
|
62
76
|
for (const store of this.stores.values()) {
|
|
@@ -67,9 +81,48 @@ export class SQLiteProvider {
|
|
|
67
81
|
await this.catalogStore.close();
|
|
68
82
|
this.catalogStore = null;
|
|
69
83
|
}
|
|
84
|
+
if (this.statsStore) {
|
|
85
|
+
await this.statsStore.close();
|
|
86
|
+
this.statsStore = null;
|
|
87
|
+
}
|
|
70
88
|
// Close the underlying database
|
|
71
89
|
this.db.close();
|
|
72
90
|
}
|
|
91
|
+
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
|
|
95
|
+
}
|
|
96
|
+
async deleteTableStores(schemaName, tableName) {
|
|
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 all index stores for this table
|
|
103
|
+
const indexPrefix = `${dataKey}${STORE_SUFFIX.INDEX}`;
|
|
104
|
+
for (const [key, store] of this.stores) {
|
|
105
|
+
if (key.startsWith(indexPrefix)) {
|
|
106
|
+
await store.close();
|
|
107
|
+
this.stores.delete(key);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
getOrCreateStore(key, sqliteTableName) {
|
|
112
|
+
let store = this.stores.get(key);
|
|
113
|
+
if (!store) {
|
|
114
|
+
store = SQLiteStore.create(this.db, sqliteTableName);
|
|
115
|
+
this.stores.set(key, store);
|
|
116
|
+
}
|
|
117
|
+
return store;
|
|
118
|
+
}
|
|
119
|
+
async closeStoreByKey(key) {
|
|
120
|
+
const store = this.stores.get(key);
|
|
121
|
+
if (store) {
|
|
122
|
+
await store.close();
|
|
123
|
+
this.stores.delete(key);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
73
126
|
}
|
|
74
127
|
/**
|
|
75
128
|
* Create a SQLite provider with the given options.
|
package/dist/src/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/provider.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAuB,MAAM,YAAY,CAAC;AAmB9D;;;;;GAKG;AACH,MAAM,OAAO,cAAc;IAClB,EAAE,CAAiB;IACnB,WAAW,CAAS;IACpB,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;IACxC,YAAY,GAAuB,IAAI,CAAC;IACxC,UAAU,GAAuB,IAAI,CAAC;IAE9C,YAAY,OAA8B;QACzC,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,UAAU,CAAC;IACtD,CAAC;IAED;;;OAGG;IACK,YAAY,CAAC,UAAkB,EAAE,SAAiB;QACzD,MAAM,SAAS,GAAG,GAAG,UAAU,IAAI,SAAS,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;QAC9E,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,SAAS,EAAE,CAAC;IAC1C,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,UAAkB,EAAE,SAAiB;QACxD,OAAO,GAAG,UAAU,IAAI,SAAS,EAAE,CAAC,WAAW,EAAE,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,UAAkB,EAAE,SAAiB,EAAE,QAAkC;QACvF,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,UAAkB,EAAE,SAAiB,EAAE,SAAiB;QAC3E,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,YAAY,CAAC,KAAK,GAAG,SAAS,EAAE,CAAC;QAC1F,MAAM,eAAe,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,YAAY,CAAC,KAAK,GAAG,SAAS,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;QACtI,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,WAAmB,EAAE,UAAkB;QAC1D,iDAAiD;QACjD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACtB,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,gBAAgB,EAAE,CAAC,CAAC;QACzF,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,eAAe;QACpB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACxB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,aAAa,CAAC,CAAC;QACnF,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,UAAkB,EAAE,SAAiB;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACpD,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,UAAkB,EAAE,SAAiB,EAAE,SAAiB;QAC7E,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,YAAY,CAAC,KAAK,GAAG,SAAS,EAAE,CAAC;QAC1F,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,QAAQ;QACb,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAEpB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;YAChC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC1B,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACxB,CAAC;QAED,gCAAgC;QAChC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,UAAkB,EAAE,SAAiB,EAAE,SAAiB;QAC9E,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,YAAY,CAAC,KAAK,GAAG,SAAS,EAAE,CAAC;QAC1F,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAChC,mFAAmF;IACpF,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,UAAkB,EAAE,SAAiB;QAC5D,mBAAmB;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACxD,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAEpC,iFAAiF;QACjF,2EAA2E;QAE3E,wCAAwC;QACxC,MAAM,WAAW,GAAG,GAAG,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC;QACtD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACxC,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;gBACjC,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;gBACpB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC;QACF,CAAC;IACF,CAAC;IAEO,gBAAgB,CAAC,GAAW,EAAE,eAAuB;QAC5D,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEjC,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;YACrD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO,KAAK,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,GAAW;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,EAAE,CAAC;YACX,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACF,CAAC;CACD;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAA8B;IAClE,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quereus/plugin-nativescript-sqlite",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "NativeScript SQLite storage plugin for Quereus - mobile persistent storage",
|
|
6
6
|
"keywords": [
|
|
@@ -42,8 +42,8 @@
|
|
|
42
42
|
},
|
|
43
43
|
"peerDependencies": {
|
|
44
44
|
"@nativescript-community/sqlite": "^3.0.0",
|
|
45
|
-
"@quereus/quereus": "^0.
|
|
46
|
-
"@quereus/store": "^0.
|
|
45
|
+
"@quereus/quereus": "^0.12.1",
|
|
46
|
+
"@quereus/store": "^0.5.1"
|
|
47
47
|
},
|
|
48
48
|
"engines": {
|
|
49
49
|
"quereus": "^0.24.0"
|