@framers/sql-storage-adapter 0.6.16 → 0.7.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/README.md +130 -20
- package/dist/adapters/betterSqliteAdapter.d.ts +18 -2
- package/dist/adapters/betterSqliteAdapter.d.ts.map +1 -1
- package/dist/adapters/betterSqliteAdapter.js +18 -7
- package/dist/adapters/betterSqliteAdapter.js.map +1 -1
- package/dist/adapters/capacitorSqliteAdapter.d.ts +8 -0
- package/dist/adapters/capacitorSqliteAdapter.d.ts.map +1 -1
- package/dist/adapters/capacitorSqliteAdapter.js +4 -1
- package/dist/adapters/capacitorSqliteAdapter.js.map +1 -1
- package/dist/adapters/electron/electronMainAdapter.d.ts +10 -0
- package/dist/adapters/electron/electronMainAdapter.d.ts.map +1 -1
- package/dist/adapters/electron/electronMainAdapter.js +21 -12
- package/dist/adapters/electron/electronMainAdapter.js.map +1 -1
- package/dist/adapters/indexedDbAdapter.d.ts +198 -54
- package/dist/adapters/indexedDbAdapter.d.ts.map +1 -1
- package/dist/adapters/indexedDbAdapter.js +549 -129
- package/dist/adapters/indexedDbAdapter.js.map +1 -1
- package/dist/adapters/postgresAdapter.d.ts +143 -4
- package/dist/adapters/postgresAdapter.d.ts.map +1 -1
- package/dist/adapters/postgresAdapter.js +612 -107
- package/dist/adapters/postgresAdapter.js.map +1 -1
- package/dist/adapters/sqlJsAdapter.d.ts +17 -3
- package/dist/adapters/sqlJsAdapter.d.ts.map +1 -1
- package/dist/adapters/sqlJsAdapter.js +15 -3
- package/dist/adapters/sqlJsAdapter.js.map +1 -1
- package/dist/core/contracts/dialect.d.ts +103 -4
- package/dist/core/contracts/dialect.d.ts.map +1 -1
- package/dist/core/contracts/index.d.ts +1 -1
- package/dist/core/contracts/index.d.ts.map +1 -1
- package/dist/core/database.d.ts +28 -8
- package/dist/core/database.d.ts.map +1 -1
- package/dist/core/database.js +34 -5
- package/dist/core/database.js.map +1 -1
- package/dist/core/resolver.d.ts +14 -1
- package/dist/core/resolver.d.ts.map +1 -1
- package/dist/core/resolver.js +28 -8
- package/dist/core/resolver.js.map +1 -1
- package/dist/dialects/PostgresDialect.d.ts +17 -1
- package/dist/dialects/PostgresDialect.d.ts.map +1 -1
- package/dist/dialects/PostgresDialect.js +91 -6
- package/dist/dialects/PostgresDialect.js.map +1 -1
- package/dist/dialects/SqliteDialect.d.ts +21 -5
- package/dist/dialects/SqliteDialect.d.ts.map +1 -1
- package/dist/dialects/SqliteDialect.js +109 -5
- package/dist/dialects/SqliteDialect.js.map +1 -1
- package/dist/dialects/shared.d.ts +17 -0
- package/dist/dialects/shared.d.ts.map +1 -0
- package/dist/dialects/shared.js +66 -0
- package/dist/dialects/shared.js.map +1 -0
- package/dist/features/kv/idb.d.ts +79 -0
- package/dist/features/kv/idb.d.ts.map +1 -0
- package/dist/features/kv/idb.js +14 -0
- package/dist/features/kv/idb.js.map +1 -0
- package/dist/features/kv/index.d.ts +14 -0
- package/dist/features/kv/index.d.ts.map +1 -0
- package/dist/features/kv/index.js +14 -0
- package/dist/features/kv/index.js.map +1 -0
- package/dist/features/kv/indexedDbKeyValueStore.d.ts +77 -0
- package/dist/features/kv/indexedDbKeyValueStore.d.ts.map +1 -0
- package/dist/features/kv/indexedDbKeyValueStore.js +127 -0
- package/dist/features/kv/indexedDbKeyValueStore.js.map +1 -0
- package/dist/features/kv/keyValueStore.d.ts +48 -0
- package/dist/features/kv/keyValueStore.d.ts.map +1 -0
- package/dist/features/kv/keyValueStore.js +54 -0
- package/dist/features/kv/keyValueStore.js.map +1 -0
- package/dist/features/kv/sqlKeyValueStore.d.ts +34 -0
- package/dist/features/kv/sqlKeyValueStore.d.ts.map +1 -0
- package/dist/features/kv/sqlKeyValueStore.js +91 -0
- package/dist/features/kv/sqlKeyValueStore.js.map +1 -0
- package/dist/features/kv/valueCodec.d.ts +35 -0
- package/dist/features/kv/valueCodec.d.ts.map +1 -0
- package/dist/features/kv/valueCodec.js +462 -0
- package/dist/features/kv/valueCodec.js.map +1 -0
- package/dist/features/migrations/dataExport.js +9 -6
- package/dist/features/migrations/dataExport.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/shared/postgresTarget.d.ts +4 -3
- package/dist/shared/postgresTarget.d.ts.map +1 -1
- package/dist/shared/postgresTarget.js +6 -4
- package/dist/shared/postgresTarget.js.map +1 -1
- package/dist/shared/segment.d.ts +43 -0
- package/dist/shared/segment.d.ts.map +1 -0
- package/dist/shared/segment.js +77 -0
- package/dist/shared/segment.js.map +1 -0
- package/dist/shared/sqlPlaceholders.d.ts +8 -0
- package/dist/shared/sqlPlaceholders.d.ts.map +1 -1
- package/dist/shared/sqlPlaceholders.js +22 -0
- package/dist/shared/sqlPlaceholders.js.map +1 -1
- package/package.json +10 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/core/database.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,sBAAsB,EAAuB,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAmD,MAAM,YAAY,CAAC;AACpG,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/core/database.ts"],"names":[],"mappings":"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"}
|
package/dist/core/resolver.d.ts
CHANGED
|
@@ -25,7 +25,7 @@ export interface StorageResolutionOptions {
|
|
|
25
25
|
* the connection string comes from DATABASE_URL.
|
|
26
26
|
*/
|
|
27
27
|
postgres?: PostgresAdapterOptions;
|
|
28
|
-
/** Options passed to the IndexedDB adapter (browser persistence). */
|
|
28
|
+
/** Options passed to the IndexedDB adapter (browser persistence), all of them. */
|
|
29
29
|
indexedDb?: IndexedDbAdapterOptions;
|
|
30
30
|
/** Options forwarded to adapter.open. */
|
|
31
31
|
openOptions?: StorageOpenOptions;
|
|
@@ -55,6 +55,19 @@ export interface StorageResolutionOptions {
|
|
|
55
55
|
* `filePath` is given.
|
|
56
56
|
*/
|
|
57
57
|
strict?: boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Keeps the resolved adapter's tables apart from other users of the same
|
|
60
|
+
* database: on PostgreSQL a schema of the segment's name, on better-sqlite3
|
|
61
|
+
* and sql.js a file with the segment in its name (`app.sqlite3` becomes
|
|
62
|
+
* `app-agentos.sqlite3`), on IndexedDB and Capacitor a database name with
|
|
63
|
+
* the segment appended (`app-db-agentos`). Lower-case letters, digits and
|
|
64
|
+
* underscores; not `public`, `information_schema` or a name beginning with
|
|
65
|
+
* `pg_`. A name that cannot be a segment is refused before any adapter is
|
|
66
|
+
* tried, and so is a segment with `postgres.pool`, which the Postgres
|
|
67
|
+
* adapter cannot start in the segment. Takes the place of a `segment` in
|
|
68
|
+
* `postgres`, `indexedDb` or `capacitor`.
|
|
69
|
+
*/
|
|
70
|
+
segment?: string;
|
|
58
71
|
}
|
|
59
72
|
/**
|
|
60
73
|
* Resolves the most appropriate storage adapter for the current runtime.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/core/resolver.ts"],"names":[],"mappings":"AAyCA,OAAO,KAAK,EAAE,cAAc,EAAyB,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAE7F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAgC,KAAK,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAChH,OAAO,EAAyB,KAAK,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACjG,OAAO,EAAoB,KAAK,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/core/resolver.ts"],"names":[],"mappings":"AAyCA,OAAO,KAAK,EAAE,cAAc,EAAyB,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAE7F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAgC,KAAK,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAChH,OAAO,EAAyB,KAAK,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACjG,OAAO,EAAoB,KAAK,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAG9F,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGxE,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,WAAW,wBAAwB;IACvC,iGAAiG;IACjG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,uBAAuB,CAAC;IACpC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,kFAAkF;IAClF,SAAS,CAAC,EAAE,uBAAuB,CAAC;IACpC,yCAAyC;IACzC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,iFAAiF;IACjF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB;;;;;;;;;;;;;;;;;OAiBG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA+DD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,aAAmB,wBAAwB,KAAQ,OAAO,CAAC,cAAc,CA4L1G,CAAC"}
|
package/dist/core/resolver.js
CHANGED
|
@@ -43,6 +43,7 @@ import { createCapacitorSqliteAdapter } from '../adapters/capacitorSqliteAdapter
|
|
|
43
43
|
import { createPostgresAdapter } from '../adapters/postgresAdapter.js';
|
|
44
44
|
import { IndexedDbAdapter } from '../adapters/indexedDbAdapter.js';
|
|
45
45
|
import { isNonEmpty, namesPostgresServer } from '../shared/postgresTarget.js';
|
|
46
|
+
import { validateSegment } from '../shared/segment.js';
|
|
46
47
|
import { getStorageLogger } from '../shared/logger.js';
|
|
47
48
|
const isCapacitorRuntime = () => {
|
|
48
49
|
if (typeof window === 'undefined') {
|
|
@@ -86,6 +87,24 @@ const unsupportedKind = (kind) => {
|
|
|
86
87
|
* Tries candidates in the supplied priority order and falls back when one fails.
|
|
87
88
|
*/
|
|
88
89
|
export const resolveStorageAdapter = async (options = {}) => {
|
|
90
|
+
// A segment name is a programming error, not an adapter that failed: refuse
|
|
91
|
+
// it before trying any.
|
|
92
|
+
const segment = options.segment === undefined ? undefined : validateSegment(options.segment);
|
|
93
|
+
// A segment on a pool of the caller's never opens: the Postgres adapter sets
|
|
94
|
+
// the segment's search_path when it starts a connection, and it does not
|
|
95
|
+
// start the connections of a pool it did not make. Without strict, the
|
|
96
|
+
// failed postgres candidate would fall through to a local file in the
|
|
97
|
+
// segment, so the pair is refused before any adapter is tried.
|
|
98
|
+
if ((segment ?? options.postgres?.segment) !== undefined && options.postgres?.pool) {
|
|
99
|
+
throw new Error("A segment cannot run on a PostgreSQL pool of the caller's (postgres.pool): the segment's search_path is set when " +
|
|
100
|
+
'each connection of the pool starts, and the adapter does not start the connections of a pool it did not make. ' +
|
|
101
|
+
'Give the connection settings and the segment instead of the pool.');
|
|
102
|
+
}
|
|
103
|
+
/** The segment an adapter's own options carry, unless the resolver's takes their place. */
|
|
104
|
+
const segmentFor = (own) => {
|
|
105
|
+
const chosen = segment ?? own;
|
|
106
|
+
return chosen === undefined ? {} : { segment: chosen };
|
|
107
|
+
};
|
|
89
108
|
const envOverride = getEnv('STORAGE_ADAPTER');
|
|
90
109
|
const log = options.logger ?? getStorageLogger();
|
|
91
110
|
const strict = options.strict === true;
|
|
@@ -157,6 +176,7 @@ export const resolveStorageAdapter = async (options = {}) => {
|
|
|
157
176
|
return createPostgresAdapter({
|
|
158
177
|
...postgresOptions,
|
|
159
178
|
...(postgresConnection ? { connectionString: postgresConnection } : {}),
|
|
179
|
+
...segmentFor(postgresOptions?.segment),
|
|
160
180
|
});
|
|
161
181
|
},
|
|
162
182
|
openOptions: postgresConnection ? { connectionString: postgresConnection } : undefined
|
|
@@ -165,13 +185,13 @@ export const resolveStorageAdapter = async (options = {}) => {
|
|
|
165
185
|
case 'better-sqlite3':
|
|
166
186
|
return {
|
|
167
187
|
name,
|
|
168
|
-
factory: async () => createBetterSqliteAdapter(filePath),
|
|
188
|
+
factory: async () => createBetterSqliteAdapter(filePath, segmentFor(undefined)),
|
|
169
189
|
openOptions: { filePath }
|
|
170
190
|
};
|
|
171
191
|
case 'capacitor':
|
|
172
192
|
return {
|
|
173
193
|
name,
|
|
174
|
-
factory: async () => createCapacitorSqliteAdapter(options.capacitor)
|
|
194
|
+
factory: async () => createCapacitorSqliteAdapter({ ...options.capacitor, ...segmentFor(options.capacitor?.segment) })
|
|
175
195
|
};
|
|
176
196
|
case 'indexeddb':
|
|
177
197
|
return {
|
|
@@ -180,11 +200,10 @@ export const resolveStorageAdapter = async (options = {}) => {
|
|
|
180
200
|
// Use dedicated indexedDb options, fallback to legacy openOptions.adapterOptions
|
|
181
201
|
const legacyOptions = options.openOptions?.adapterOptions;
|
|
182
202
|
return new IndexedDbAdapter({
|
|
203
|
+
...options.indexedDb,
|
|
183
204
|
dbName: options.indexedDb?.dbName || legacyOptions?.dbName || 'app-db',
|
|
184
|
-
storeName: options.indexedDb?.storeName,
|
|
185
205
|
autoSave: options.indexedDb?.autoSave ?? true,
|
|
186
|
-
|
|
187
|
-
sqlJsConfig: options.indexedDb?.sqlJsConfig,
|
|
206
|
+
...segmentFor(options.indexedDb?.segment),
|
|
188
207
|
});
|
|
189
208
|
}
|
|
190
209
|
};
|
|
@@ -194,7 +213,7 @@ export const resolveStorageAdapter = async (options = {}) => {
|
|
|
194
213
|
case 'memory':
|
|
195
214
|
return {
|
|
196
215
|
name: 'sqljs',
|
|
197
|
-
factory: async () => createSqlJsAdapter(),
|
|
216
|
+
factory: async () => createSqlJsAdapter(segmentFor(undefined)),
|
|
198
217
|
openOptions: { filePath }
|
|
199
218
|
};
|
|
200
219
|
default:
|
|
@@ -216,8 +235,9 @@ export const resolveStorageAdapter = async (options = {}) => {
|
|
|
216
235
|
...options.openOptions,
|
|
217
236
|
};
|
|
218
237
|
await adapter.open(openOptions);
|
|
219
|
-
if (!quiet)
|
|
220
|
-
log.info({ adapter: candidate.name }, `Using adapter "${candidate.name}".`);
|
|
238
|
+
if (!quiet) {
|
|
239
|
+
log.info(segment === undefined ? { adapter: candidate.name } : { adapter: candidate.name, segment }, `Using adapter "${candidate.name}"${segment === undefined ? '' : ` for segment "${segment}"`}.`);
|
|
240
|
+
}
|
|
221
241
|
return adapter;
|
|
222
242
|
}
|
|
223
243
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/core/resolver.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,WAAW,CAAC;AAC1F,MAAM,MAAM,GAAG,OAAO,OAAO,KAAK,WAAW,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;AAE1E,6DAA6D;AAC7D,MAAM,QAAQ,GAAG,KAAK,EAAE,KAAe,EAAmB,EAAE;IAC1D,IAAI,SAAS,EAAE,CAAC;QACd,8EAA8E;QAC9E,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,wCAAwC;IACxC,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC;YACH,4DAA4D;YAC5D,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YAClC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,2BAA2B;YAC3B,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC,CAAC;AAEF,kCAAkC;AAClC,MAAM,MAAM,GAAG,CAAC,GAAW,EAAsB,EAAE;IACjD,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAClD,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,6BAA6B;AAC7B,MAAM,MAAM,GAAG,GAAW,EAAE;IAC1B,IAAI,MAAM,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC5D,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;IACvB,CAAC;IACD,gDAAgD;IAChD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAGF,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,4BAA4B,EAAgC,MAAM,oCAAoC,CAAC;AAChH,OAAO,EAAE,qBAAqB,EAA+B,MAAM,6BAA6B,CAAC;AACjG,OAAO,EAAE,gBAAgB,EAAgC,MAAM,8BAA8B,CAAC;AAC9F,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAsB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/core/resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { SqlDialect } from '../core/contracts/dialect.js';
|
|
1
|
+
import type { CastType, ColumnKind, DateBucketUnit, IntervalUnit, JsonValueType, SqlDialect } from '../core/contracts/dialect.js';
|
|
2
2
|
/**
|
|
3
3
|
* PostgreSQL dialect implementation.
|
|
4
4
|
*
|
|
@@ -10,10 +10,26 @@ export declare class PostgresDialect implements SqlDialect {
|
|
|
10
10
|
readonly name: "postgres";
|
|
11
11
|
insertOrIgnore(table: string, columns: string[], placeholders: string[]): string;
|
|
12
12
|
insertOrReplace(table: string, columns: string[], placeholders: string[], primaryKey?: string): string;
|
|
13
|
+
upsert(table: string, columns: string[], placeholders: string[], conflictColumns: string[], updateColumns?: string[]): string;
|
|
13
14
|
jsonExtract(column: string, jsonPath: string): string;
|
|
15
|
+
jsonExtractAs(column: string, jsonPath: string, type: JsonValueType): string;
|
|
16
|
+
jsonArrayContains(jsonArray: string, valueExpr: string): string;
|
|
14
17
|
ifnull(expr: string, fallback: string): string;
|
|
15
18
|
autoIncrementPrimaryKey(): string;
|
|
19
|
+
columnType(kind: ColumnKind): string;
|
|
16
20
|
pragma(_key: string, _value: string): string | null;
|
|
17
21
|
placeholder(index: number): string;
|
|
22
|
+
now(): string;
|
|
23
|
+
cast(expr: string, type: CastType): string;
|
|
24
|
+
addInterval(expr: string, amount: number, unit: IntervalUnit): string;
|
|
25
|
+
dateBucket(unit: DateBucketUnit, expr: string): string;
|
|
26
|
+
ilike(expr: string, pattern: string): string;
|
|
27
|
+
inList(expr: string, items: string[]): string;
|
|
28
|
+
inArray(expr: string, arrayParam: string): string;
|
|
29
|
+
rowLock(mode: 'update' | 'share', wait?: 'wait' | 'skipLocked' | 'noWait'): string;
|
|
30
|
+
advisoryTransactionLock(keyExpr: string): string | null;
|
|
31
|
+
greatest(...exprs: string[]): string;
|
|
32
|
+
least(...exprs: string[]): string;
|
|
33
|
+
uuid(): string;
|
|
18
34
|
}
|
|
19
35
|
//# sourceMappingURL=PostgresDialect.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostgresDialect.d.ts","sourceRoot":"","sources":["../../src/dialects/PostgresDialect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"PostgresDialect.d.ts","sourceRoot":"","sources":["../../src/dialects/PostgresDialect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,UAAU,EACV,cAAc,EACd,YAAY,EACZ,aAAa,EACb,UAAU,EACX,MAAM,8BAA8B,CAAC;AAyBtC;;;;;;GAMG;AACH,qBAAa,eAAgB,YAAW,UAAU;IAChD,QAAQ,CAAC,IAAI,aAAuB;IAEpC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,MAAM;IAIhF,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM;IAItG,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EAAE,EACjB,YAAY,EAAE,MAAM,EAAE,EACtB,eAAe,EAAE,MAAM,EAAE,EACzB,aAAa,CAAC,EAAE,MAAM,EAAE,GACvB,MAAM;IAQT,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAUrD,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,MAAM;IAS5E,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAI/D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAI9C,uBAAuB,IAAI,MAAM;IAIjC,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;IAKpC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAInD,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIlC,GAAG,IAAI,MAAM;IAIb,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM;IAK1C,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,MAAM;IAMrE,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAItD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAI5C,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;IAI7C,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAIjD,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,EAAE,IAAI,GAAE,MAAM,GAAG,YAAY,GAAG,QAAiB,GAAG,MAAM;IAO1F,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIvD,QAAQ,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;IAKpC,KAAK,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;IAKjC,IAAI,IAAI,MAAM;CAGf"}
|
|
@@ -1,3 +1,23 @@
|
|
|
1
|
+
import { checkChoice, checkDateBucketUnit, intervalSeconds, parseJsonPath, upsertUpdateColumns } from './shared.js';
|
|
2
|
+
const COLUMN_TYPES = {
|
|
3
|
+
text: 'TEXT',
|
|
4
|
+
integer: 'INTEGER',
|
|
5
|
+
bigint: 'BIGINT',
|
|
6
|
+
real: 'DOUBLE PRECISION',
|
|
7
|
+
boolean: 'BOOLEAN',
|
|
8
|
+
timestamp: 'TIMESTAMPTZ',
|
|
9
|
+
json: 'JSONB',
|
|
10
|
+
uuid: 'UUID',
|
|
11
|
+
blob: 'BYTEA',
|
|
12
|
+
};
|
|
13
|
+
const CAST_TYPES = {
|
|
14
|
+
text: 'text',
|
|
15
|
+
integer: 'integer',
|
|
16
|
+
real: 'double precision',
|
|
17
|
+
timestamp: 'timestamptz',
|
|
18
|
+
};
|
|
19
|
+
/** ISO 8601 UTC text with milliseconds, as the SQLite dialect writes times. */
|
|
20
|
+
const ISO_TEXT = `'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"'`;
|
|
1
21
|
/**
|
|
2
22
|
* PostgreSQL dialect implementation.
|
|
3
23
|
*
|
|
@@ -13,12 +33,14 @@ export class PostgresDialect {
|
|
|
13
33
|
return `INSERT INTO ${table} (${columns.join(', ')}) VALUES (${placeholders.join(', ')}) ON CONFLICT DO NOTHING`;
|
|
14
34
|
}
|
|
15
35
|
insertOrReplace(table, columns, placeholders, primaryKey) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
36
|
+
return this.upsert(table, columns, placeholders, [primaryKey ?? columns[0]]);
|
|
37
|
+
}
|
|
38
|
+
upsert(table, columns, placeholders, conflictColumns, updateColumns) {
|
|
39
|
+
const updates = upsertUpdateColumns(columns, conflictColumns, updateColumns);
|
|
40
|
+
const action = updates.length
|
|
41
|
+
? `DO UPDATE SET ${updates.map((column) => `${column} = EXCLUDED.${column}`).join(', ')}`
|
|
42
|
+
: 'DO NOTHING';
|
|
43
|
+
return `INSERT INTO ${table} (${columns.join(', ')}) VALUES (${placeholders.join(', ')}) ON CONFLICT (${conflictColumns.join(', ')}) ${action}`;
|
|
22
44
|
}
|
|
23
45
|
jsonExtract(column, jsonPath) {
|
|
24
46
|
const path = jsonPath.replace(/^\$\./, '');
|
|
@@ -29,17 +51,80 @@ export class PostgresDialect {
|
|
|
29
51
|
const args = parts.map((p) => `'${p}'`).join(', ');
|
|
30
52
|
return `jsonb_extract_path_text(${column}::jsonb, ${args})`;
|
|
31
53
|
}
|
|
54
|
+
jsonExtractAs(column, jsonPath, type) {
|
|
55
|
+
checkChoice('jsonExtractAs type', type, ['text', 'integer', 'real', 'json']);
|
|
56
|
+
const path = `'{${parseJsonPath(jsonPath).join(',')}}'`;
|
|
57
|
+
if (type === 'json')
|
|
58
|
+
return `((${column})::jsonb #> ${path})`;
|
|
59
|
+
const text = `((${column})::jsonb #>> ${path})`;
|
|
60
|
+
if (type === 'text')
|
|
61
|
+
return text;
|
|
62
|
+
return `(${text})::${type === 'integer' ? 'integer' : 'double precision'}`;
|
|
63
|
+
}
|
|
64
|
+
jsonArrayContains(jsonArray, valueExpr) {
|
|
65
|
+
return `EXISTS (SELECT 1 FROM jsonb_array_elements_text((${jsonArray})::jsonb) AS element(value) WHERE element.value = CAST(${valueExpr} AS text))`;
|
|
66
|
+
}
|
|
32
67
|
ifnull(expr, fallback) {
|
|
33
68
|
return `COALESCE(${expr}, ${fallback})`;
|
|
34
69
|
}
|
|
35
70
|
autoIncrementPrimaryKey() {
|
|
36
71
|
return 'INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY';
|
|
37
72
|
}
|
|
73
|
+
columnType(kind) {
|
|
74
|
+
checkChoice('columnType kind', kind, Object.keys(COLUMN_TYPES));
|
|
75
|
+
return COLUMN_TYPES[kind];
|
|
76
|
+
}
|
|
38
77
|
pragma(_key, _value) {
|
|
39
78
|
return null;
|
|
40
79
|
}
|
|
41
80
|
placeholder(index) {
|
|
42
81
|
return `$${index + 1}`;
|
|
43
82
|
}
|
|
83
|
+
now() {
|
|
84
|
+
return 'now()';
|
|
85
|
+
}
|
|
86
|
+
cast(expr, type) {
|
|
87
|
+
checkChoice('cast type', type, ['text', 'integer', 'real', 'timestamp']);
|
|
88
|
+
return `CAST(${expr} AS ${CAST_TYPES[type]})`;
|
|
89
|
+
}
|
|
90
|
+
addInterval(expr, amount, unit) {
|
|
91
|
+
// Seconds, not days: a day added to a timestamptz follows the session's
|
|
92
|
+
// time zone across a DST change, while SQLite adds 86400 seconds.
|
|
93
|
+
return `((${expr})::timestamptz + interval '${intervalSeconds(amount, unit)} seconds')`;
|
|
94
|
+
}
|
|
95
|
+
dateBucket(unit, expr) {
|
|
96
|
+
return `to_char(date_trunc('${checkDateBucketUnit(unit)}', (${expr})::timestamptz AT TIME ZONE 'UTC'), ${ISO_TEXT})`;
|
|
97
|
+
}
|
|
98
|
+
ilike(expr, pattern) {
|
|
99
|
+
return `${expr} ILIKE ${pattern}`;
|
|
100
|
+
}
|
|
101
|
+
inList(expr, items) {
|
|
102
|
+
return items.length ? `${expr} IN (${items.join(', ')})` : '(1 = 0)';
|
|
103
|
+
}
|
|
104
|
+
inArray(expr, arrayParam) {
|
|
105
|
+
return `${expr} = ANY(${arrayParam})`;
|
|
106
|
+
}
|
|
107
|
+
rowLock(mode, wait = 'wait') {
|
|
108
|
+
checkChoice('rowLock mode', mode, ['update', 'share']);
|
|
109
|
+
checkChoice('rowLock wait', wait, ['wait', 'skipLocked', 'noWait']);
|
|
110
|
+
const lock = mode === 'update' ? ' FOR UPDATE' : ' FOR SHARE';
|
|
111
|
+
return wait === 'skipLocked' ? `${lock} SKIP LOCKED` : wait === 'noWait' ? `${lock} NOWAIT` : lock;
|
|
112
|
+
}
|
|
113
|
+
advisoryTransactionLock(keyExpr) {
|
|
114
|
+
return `SELECT pg_advisory_xact_lock(${keyExpr})`;
|
|
115
|
+
}
|
|
116
|
+
greatest(...exprs) {
|
|
117
|
+
if (exprs.length === 0)
|
|
118
|
+
throw new Error('greatest needs at least one expression.');
|
|
119
|
+
return `GREATEST(${exprs.join(', ')})`;
|
|
120
|
+
}
|
|
121
|
+
least(...exprs) {
|
|
122
|
+
if (exprs.length === 0)
|
|
123
|
+
throw new Error('least needs at least one expression.');
|
|
124
|
+
return `LEAST(${exprs.join(', ')})`;
|
|
125
|
+
}
|
|
126
|
+
uuid() {
|
|
127
|
+
return 'gen_random_uuid()';
|
|
128
|
+
}
|
|
44
129
|
}
|
|
45
130
|
//# sourceMappingURL=PostgresDialect.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostgresDialect.js","sourceRoot":"","sources":["../../src/dialects/PostgresDialect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PostgresDialect.js","sourceRoot":"","sources":["../../src/dialects/PostgresDialect.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,35 @@
|
|
|
1
|
-
import type { SqlDialect } from '../core/contracts/dialect.js';
|
|
1
|
+
import type { CastType, ColumnKind, DateBucketUnit, IntervalUnit, JsonValueType, SqlDialect } from '../core/contracts/dialect.js';
|
|
2
2
|
/**
|
|
3
3
|
* SQLite dialect implementation.
|
|
4
4
|
*
|
|
5
|
-
* Generates
|
|
6
|
-
*
|
|
7
|
-
* positional `?` placeholders.
|
|
5
|
+
* Generates SQLite SQL: `INSERT OR IGNORE`, `ON CONFLICT ... DO UPDATE`
|
|
6
|
+
* upserts, `json_extract()`, `ifnull()`, `strftime()` times in ISO 8601 UTC
|
|
7
|
+
* text, `PRAGMA`, and positional `?` placeholders.
|
|
8
8
|
*/
|
|
9
9
|
export declare class SqliteDialect implements SqlDialect {
|
|
10
10
|
readonly name: "sqlite";
|
|
11
11
|
insertOrIgnore(table: string, columns: string[], placeholders: string[]): string;
|
|
12
|
-
insertOrReplace(table: string, columns: string[], placeholders: string[],
|
|
12
|
+
insertOrReplace(table: string, columns: string[], placeholders: string[], primaryKey?: string): string;
|
|
13
|
+
upsert(table: string, columns: string[], placeholders: string[], conflictColumns: string[], updateColumns?: string[]): string;
|
|
13
14
|
jsonExtract(column: string, jsonPath: string): string;
|
|
15
|
+
jsonExtractAs(column: string, jsonPath: string, type: JsonValueType): string;
|
|
16
|
+
jsonArrayContains(jsonArray: string, valueExpr: string): string;
|
|
14
17
|
ifnull(expr: string, fallback: string): string;
|
|
15
18
|
autoIncrementPrimaryKey(): string;
|
|
19
|
+
columnType(kind: ColumnKind): string;
|
|
16
20
|
pragma(key: string, value: string): string | null;
|
|
17
21
|
placeholder(_index: number): string;
|
|
22
|
+
now(): string;
|
|
23
|
+
cast(expr: string, type: CastType): string;
|
|
24
|
+
addInterval(expr: string, amount: number, unit: IntervalUnit): string;
|
|
25
|
+
dateBucket(unit: DateBucketUnit, expr: string): string;
|
|
26
|
+
ilike(expr: string, pattern: string): string;
|
|
27
|
+
inList(expr: string, items: string[]): string;
|
|
28
|
+
inArray(expr: string, arrayParam: string): string;
|
|
29
|
+
rowLock(mode: 'update' | 'share', wait?: 'wait' | 'skipLocked' | 'noWait'): string;
|
|
30
|
+
advisoryTransactionLock(_keyExpr: string): string | null;
|
|
31
|
+
greatest(...exprs: string[]): string;
|
|
32
|
+
least(...exprs: string[]): string;
|
|
33
|
+
uuid(): string;
|
|
18
34
|
}
|
|
19
35
|
//# sourceMappingURL=SqliteDialect.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqliteDialect.d.ts","sourceRoot":"","sources":["../../src/dialects/SqliteDialect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"SqliteDialect.d.ts","sourceRoot":"","sources":["../../src/dialects/SqliteDialect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,UAAU,EACV,cAAc,EACd,YAAY,EACZ,aAAa,EACb,UAAU,EACX,MAAM,8BAA8B,CAAC;AA0BtC;;;;;;GAMG;AACH,qBAAa,aAAc,YAAW,UAAU;IAC9C,QAAQ,CAAC,IAAI,WAAqB;IAElC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,MAAM;IAIhF,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM;IAOtG,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EAAE,EACjB,YAAY,EAAE,MAAM,EAAE,EACtB,eAAe,EAAE,MAAM,EAAE,EACzB,aAAa,CAAC,EAAE,MAAM,EAAE,GACvB,MAAM;IAQT,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIrD,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,MAAM;IAU5E,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAI/D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAI9C,uBAAuB,IAAI,MAAM;IAIjC,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;IAKpC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIjD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAInC,GAAG,IAAI,MAAM;IAIb,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM;IAM1C,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,MAAM;IAKrE,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAItD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAI5C,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;IAI7C,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAIjD,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,EAAE,IAAI,GAAE,MAAM,GAAG,YAAY,GAAG,QAAiB,GAAG,MAAM;IAM1F,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIxD,QAAQ,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;IAIpC,KAAK,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;IAIjC,IAAI,IAAI,MAAM;CAMf"}
|
|
@@ -1,9 +1,30 @@
|
|
|
1
|
+
import { checkChoice, checkDateBucketUnit, intervalSeconds, parseJsonPath, upsertUpdateColumns } from './shared.js';
|
|
2
|
+
/** The time format a bound Date takes, which SQLite's date functions read and write. */
|
|
3
|
+
const ISO_FORMAT = '%Y-%m-%dT%H:%M:%fZ';
|
|
4
|
+
const BUCKET_FORMATS = {
|
|
5
|
+
minute: '%Y-%m-%dT%H:%M:00.000Z',
|
|
6
|
+
hour: '%Y-%m-%dT%H:00:00.000Z',
|
|
7
|
+
day: '%Y-%m-%dT00:00:00.000Z',
|
|
8
|
+
month: '%Y-%m-01T00:00:00.000Z',
|
|
9
|
+
year: '%Y-01-01T00:00:00.000Z',
|
|
10
|
+
};
|
|
11
|
+
const COLUMN_TYPES = {
|
|
12
|
+
text: 'TEXT',
|
|
13
|
+
integer: 'INTEGER',
|
|
14
|
+
bigint: 'INTEGER',
|
|
15
|
+
real: 'REAL',
|
|
16
|
+
boolean: 'INTEGER',
|
|
17
|
+
timestamp: 'TEXT',
|
|
18
|
+
json: 'TEXT',
|
|
19
|
+
uuid: 'TEXT',
|
|
20
|
+
blob: 'BLOB',
|
|
21
|
+
};
|
|
1
22
|
/**
|
|
2
23
|
* SQLite dialect implementation.
|
|
3
24
|
*
|
|
4
|
-
* Generates
|
|
5
|
-
*
|
|
6
|
-
* positional `?` placeholders.
|
|
25
|
+
* Generates SQLite SQL: `INSERT OR IGNORE`, `ON CONFLICT ... DO UPDATE`
|
|
26
|
+
* upserts, `json_extract()`, `ifnull()`, `strftime()` times in ISO 8601 UTC
|
|
27
|
+
* text, `PRAGMA`, and positional `?` placeholders.
|
|
7
28
|
*/
|
|
8
29
|
export class SqliteDialect {
|
|
9
30
|
constructor() {
|
|
@@ -12,23 +33,106 @@ export class SqliteDialect {
|
|
|
12
33
|
insertOrIgnore(table, columns, placeholders) {
|
|
13
34
|
return `INSERT OR IGNORE INTO ${table} (${columns.join(', ')}) VALUES (${placeholders.join(', ')})`;
|
|
14
35
|
}
|
|
15
|
-
insertOrReplace(table, columns, placeholders,
|
|
16
|
-
|
|
36
|
+
insertOrReplace(table, columns, placeholders, primaryKey) {
|
|
37
|
+
// ON CONFLICT DO UPDATE, not INSERT OR REPLACE: REPLACE deletes the
|
|
38
|
+
// conflicting row first, which fires ON DELETE actions on its dependents
|
|
39
|
+
// and resets the columns the statement does not name.
|
|
40
|
+
return this.upsert(table, columns, placeholders, [primaryKey ?? columns[0]]);
|
|
41
|
+
}
|
|
42
|
+
upsert(table, columns, placeholders, conflictColumns, updateColumns) {
|
|
43
|
+
const updates = upsertUpdateColumns(columns, conflictColumns, updateColumns);
|
|
44
|
+
const action = updates.length
|
|
45
|
+
? `DO UPDATE SET ${updates.map((column) => `${column} = excluded.${column}`).join(', ')}`
|
|
46
|
+
: 'DO NOTHING';
|
|
47
|
+
return `INSERT INTO ${table} (${columns.join(', ')}) VALUES (${placeholders.join(', ')}) ON CONFLICT (${conflictColumns.join(', ')}) ${action}`;
|
|
17
48
|
}
|
|
18
49
|
jsonExtract(column, jsonPath) {
|
|
19
50
|
return `json_extract(${column}, '${jsonPath}')`;
|
|
20
51
|
}
|
|
52
|
+
jsonExtractAs(column, jsonPath, type) {
|
|
53
|
+
checkChoice('jsonExtractAs type', type, ['text', 'integer', 'real', 'json']);
|
|
54
|
+
const path = `$${parseJsonPath(jsonPath)
|
|
55
|
+
.map((step) => (typeof step === 'number' ? `[${step}]` : `.${step}`))
|
|
56
|
+
.join('')}`;
|
|
57
|
+
const value = `json_extract(${column}, '${path}')`;
|
|
58
|
+
if (type === 'json')
|
|
59
|
+
return value;
|
|
60
|
+
return `CAST(${value} AS ${type === 'text' ? 'TEXT' : type === 'integer' ? 'INTEGER' : 'REAL'})`;
|
|
61
|
+
}
|
|
62
|
+
jsonArrayContains(jsonArray, valueExpr) {
|
|
63
|
+
return `EXISTS (SELECT 1 FROM json_each(${jsonArray}) WHERE CAST(json_each.value AS TEXT) = CAST(${valueExpr} AS TEXT))`;
|
|
64
|
+
}
|
|
21
65
|
ifnull(expr, fallback) {
|
|
22
66
|
return `ifnull(${expr}, ${fallback})`;
|
|
23
67
|
}
|
|
24
68
|
autoIncrementPrimaryKey() {
|
|
25
69
|
return 'INTEGER PRIMARY KEY AUTOINCREMENT';
|
|
26
70
|
}
|
|
71
|
+
columnType(kind) {
|
|
72
|
+
checkChoice('columnType kind', kind, Object.keys(COLUMN_TYPES));
|
|
73
|
+
return COLUMN_TYPES[kind];
|
|
74
|
+
}
|
|
27
75
|
pragma(key, value) {
|
|
28
76
|
return `PRAGMA ${key} = ${value}`;
|
|
29
77
|
}
|
|
30
78
|
placeholder(_index) {
|
|
31
79
|
return '?';
|
|
32
80
|
}
|
|
81
|
+
now() {
|
|
82
|
+
return `strftime('${ISO_FORMAT}', 'now')`;
|
|
83
|
+
}
|
|
84
|
+
cast(expr, type) {
|
|
85
|
+
checkChoice('cast type', type, ['text', 'integer', 'real', 'timestamp']);
|
|
86
|
+
if (type === 'timestamp')
|
|
87
|
+
return `strftime('${ISO_FORMAT}', ${expr})`;
|
|
88
|
+
return `CAST(${expr} AS ${type === 'text' ? 'TEXT' : type === 'integer' ? 'INTEGER' : 'REAL'})`;
|
|
89
|
+
}
|
|
90
|
+
addInterval(expr, amount, unit) {
|
|
91
|
+
const seconds = intervalSeconds(amount, unit);
|
|
92
|
+
return `strftime('${ISO_FORMAT}', ${expr}, '${seconds >= 0 ? '+' : ''}${seconds} seconds')`;
|
|
93
|
+
}
|
|
94
|
+
dateBucket(unit, expr) {
|
|
95
|
+
return `strftime('${BUCKET_FORMATS[checkDateBucketUnit(unit)]}', ${expr})`;
|
|
96
|
+
}
|
|
97
|
+
ilike(expr, pattern) {
|
|
98
|
+
return `${expr} LIKE ${pattern}`;
|
|
99
|
+
}
|
|
100
|
+
inList(expr, items) {
|
|
101
|
+
return items.length ? `${expr} IN (${items.join(', ')})` : '(1 = 0)';
|
|
102
|
+
}
|
|
103
|
+
inArray(expr, arrayParam) {
|
|
104
|
+
return `${expr} IN (SELECT value FROM json_each(${arrayParam}))`;
|
|
105
|
+
}
|
|
106
|
+
rowLock(mode, wait = 'wait') {
|
|
107
|
+
checkChoice('rowLock mode', mode, ['update', 'share']);
|
|
108
|
+
checkChoice('rowLock wait', wait, ['wait', 'skipLocked', 'noWait']);
|
|
109
|
+
return '';
|
|
110
|
+
}
|
|
111
|
+
advisoryTransactionLock(_keyExpr) {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
greatest(...exprs) {
|
|
115
|
+
return nullSkippingExtreme('max', exprs);
|
|
116
|
+
}
|
|
117
|
+
least(...exprs) {
|
|
118
|
+
return nullSkippingExtreme('min', exprs);
|
|
119
|
+
}
|
|
120
|
+
uuid() {
|
|
121
|
+
return ("lower(hex(randomblob(4)) || '-' || hex(randomblob(2)) || '-4' || substr(hex(randomblob(2)), 2) || '-' || " +
|
|
122
|
+
"substr('89ab', 1 + (random() & 3), 1) || substr(hex(randomblob(2)), 2) || '-' || hex(randomblob(6)))");
|
|
123
|
+
}
|
|
33
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* SQLite's multi-argument max() and min() return NULL when any argument is
|
|
127
|
+
* NULL; PostgreSQL's GREATEST and LEAST skip NULLs. Coalescing each argument
|
|
128
|
+
* with the others first gives the PostgreSQL result: NULL only when all are.
|
|
129
|
+
*/
|
|
130
|
+
const nullSkippingExtreme = (fn, exprs) => {
|
|
131
|
+
if (exprs.length === 0)
|
|
132
|
+
throw new Error(`${fn === 'max' ? 'greatest' : 'least'} needs at least one expression.`);
|
|
133
|
+
if (exprs.length === 1)
|
|
134
|
+
return `(${exprs[0]})`;
|
|
135
|
+
const coalesced = exprs.map((expr, index) => `coalesce(${[expr, ...exprs.filter((_, other) => other !== index)].join(', ')})`);
|
|
136
|
+
return `${fn}(${coalesced.join(', ')})`;
|
|
137
|
+
};
|
|
34
138
|
//# sourceMappingURL=SqliteDialect.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqliteDialect.js","sourceRoot":"","sources":["../../src/dialects/SqliteDialect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SqliteDialect.js","sourceRoot":"","sources":["../../src/dialects/SqliteDialect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { DateBucketUnit, IntervalUnit } from '../core/contracts/dialect.js';
|
|
2
|
+
/** `amount` units as a number of seconds, after checking both. */
|
|
3
|
+
export declare const intervalSeconds: (amount: number, unit: IntervalUnit) => number;
|
|
4
|
+
/** Checks a dateBucket unit. */
|
|
5
|
+
export declare const checkDateBucketUnit: (unit: DateBucketUnit) => DateBucketUnit;
|
|
6
|
+
/** One step of a JSON path: an object key or an array index. */
|
|
7
|
+
export type JsonPathStep = string | number;
|
|
8
|
+
/**
|
|
9
|
+
* Splits a JSON path of the form `$.key`, `$.key.key` or `$.key[0]` into its
|
|
10
|
+
* steps. Anything else is refused, so a path never carries SQL.
|
|
11
|
+
*/
|
|
12
|
+
export declare const parseJsonPath: (jsonPath: string) => JsonPathStep[];
|
|
13
|
+
/** Checks one of a fixed set of option values. */
|
|
14
|
+
export declare const checkChoice: <T extends string>(what: string, value: T, allowed: readonly T[]) => T;
|
|
15
|
+
/** The columns an upsert updates: those given, or every column outside the conflict target. */
|
|
16
|
+
export declare const upsertUpdateColumns: (columns: string[], conflictColumns: string[], updateColumns?: string[]) => string[];
|
|
17
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/dialects/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAUjF,kEAAkE;AAClE,eAAO,MAAM,eAAe,WAAY,MAAM,QAAQ,YAAY,KAAG,MASpE,CAAC;AAIF,gCAAgC;AAChC,eAAO,MAAM,mBAAmB,SAAU,cAAc,KAAG,cAK1D,CAAC;AAEF,gEAAgE;AAChE,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC;AAI3C;;;GAGG;AACH,eAAO,MAAM,aAAa,aAAc,MAAM,KAAG,YAAY,EAgB5D,CAAC;AAEF,kDAAkD;AAClD,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,MAAM,QAAQ,MAAM,SAAS,CAAC,WAAW,SAAS,CAAC,EAAE,KAAG,CAK7F,CAAC;AAEF,+FAA+F;AAC/F,eAAO,MAAM,mBAAmB,YAAa,MAAM,EAAE,mBAAmB,MAAM,EAAE,kBAAkB,MAAM,EAAE,KAAG,MAAM,EAKlH,CAAC"}
|