@adminiumjs/adapter-sqlite 0.1.0-rc.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/LICENSE +661 -0
- package/dist/errors.d.ts +13 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +71 -0
- package/dist/errors.js.map +1 -0
- package/dist/file.d.ts +21 -0
- package/dist/file.d.ts.map +1 -0
- package/dist/file.js +48 -0
- package/dist/file.js.map +1 -0
- package/dist/index.d.ts +58 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +278 -0
- package/dist/index.js.map +1 -0
- package/dist/introspect.d.ts +74 -0
- package/dist/introspect.d.ts.map +1 -0
- package/dist/introspect.js +641 -0
- package/dist/introspect.js.map +1 -0
- package/dist/query-engine.d.ts +32 -0
- package/dist/query-engine.d.ts.map +1 -0
- package/dist/query-engine.js +82 -0
- package/dist/query-engine.js.map +1 -0
- package/dist/serialization.d.ts +35 -0
- package/dist/serialization.d.ts.map +1 -0
- package/dist/serialization.js +56 -0
- package/dist/serialization.js.map +1 -0
- package/dist/stats.d.ts +19 -0
- package/dist/stats.d.ts.map +1 -0
- package/dist/stats.js +124 -0
- package/dist/stats.js.map +1 -0
- package/dist/type-map.d.ts +47 -0
- package/dist/type-map.d.ts.map +1 -0
- package/dist/type-map.js +141 -0
- package/dist/type-map.js.map +1 -0
- package/package.json +30 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"introspect.js","sourceRoot":"","sources":["../src/introspect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `createQueryEngine()` — the Kysely dialect factory for the SQLite data
|
|
3
|
+
* connection (05-introspection-engine.md §3 `QueryEngine`, 08-server-api.md
|
|
4
|
+
* §3.7 "query port").
|
|
5
|
+
*
|
|
6
|
+
* `@adminium/engine` does not depend on `kysely`, so `QueryEngine.dialect`
|
|
7
|
+
* is typed opaquely there; `@adminium/server` casts it to `kysely.Dialect`
|
|
8
|
+
* at the composition boundary. This package owns the concrete dependency.
|
|
9
|
+
*
|
|
10
|
+
* Supports better-sqlite3 INSTANCE INJECTION (05-T14): callers that already
|
|
11
|
+
* hold an open handle (the Electron main process, tests) pass it via
|
|
12
|
+
* `options.database` — the engine then never opens its own and `destroy()`
|
|
13
|
+
* leaves the injected handle to its owner.
|
|
14
|
+
*/
|
|
15
|
+
import Database from 'better-sqlite3';
|
|
16
|
+
import { type DataConnectionConfig, type QueryEngine } from '@adminium/engine/adapter';
|
|
17
|
+
/** The subset of a better-sqlite3 Database kysely needs (structural). */
|
|
18
|
+
export type InjectableDatabase = Database.Database;
|
|
19
|
+
export interface SqliteQueryEngineOptions {
|
|
20
|
+
/** Inject an already-open handle instead of opening `config.file`. */
|
|
21
|
+
database?: InjectableDatabase;
|
|
22
|
+
}
|
|
23
|
+
/** Data-role session pragmas — 05 §4.3. */
|
|
24
|
+
export declare function applyDataPragmas(db: InjectableDatabase, file: string): void;
|
|
25
|
+
/**
|
|
26
|
+
* Build the CRUD query port for a data-role connection. Accepts a file path /
|
|
27
|
+
* DSN string or the role-branded config. The database opens lazily on first
|
|
28
|
+
* query (unless injected), and `destroy()` tears it down idempotently —
|
|
29
|
+
* closing only handles this engine opened itself.
|
|
30
|
+
*/
|
|
31
|
+
export declare function createQueryEngine(config: DataConnectionConfig | string, options?: SqliteQueryEngineOptions): QueryEngine;
|
|
32
|
+
//# sourceMappingURL=query-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-engine.d.ts","sourceRoot":"","sources":["../src/query-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,WAAW,EACjB,MAAM,0BAA0B,CAAC;AAUlC,yEAAyE;AACzE,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC,QAAQ,CAAC;AAEnD,MAAM,WAAW,wBAAwB;IACvC,sEAAsE;IACtE,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B;AAED,2CAA2C;AAC3C,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAI3E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,oBAAoB,GAAG,MAAM,EACrC,OAAO,GAAE,wBAA6B,GACrC,WAAW,CA+Cb"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `createQueryEngine()` — the Kysely dialect factory for the SQLite data
|
|
3
|
+
* connection (05-introspection-engine.md §3 `QueryEngine`, 08-server-api.md
|
|
4
|
+
* §3.7 "query port").
|
|
5
|
+
*
|
|
6
|
+
* `@adminium/engine` does not depend on `kysely`, so `QueryEngine.dialect`
|
|
7
|
+
* is typed opaquely there; `@adminium/server` casts it to `kysely.Dialect`
|
|
8
|
+
* at the composition boundary. This package owns the concrete dependency.
|
|
9
|
+
*
|
|
10
|
+
* Supports better-sqlite3 INSTANCE INJECTION (05-T14): callers that already
|
|
11
|
+
* hold an open handle (the Electron main process, tests) pass it via
|
|
12
|
+
* `options.database` — the engine then never opens its own and `destroy()`
|
|
13
|
+
* leaves the injected handle to its owner.
|
|
14
|
+
*/
|
|
15
|
+
import Database from 'better-sqlite3';
|
|
16
|
+
import { SqliteDialect } from 'kysely';
|
|
17
|
+
import { AdapterError, } from '@adminium/engine/adapter';
|
|
18
|
+
import { toAdapterError } from './errors.js';
|
|
19
|
+
import { normalizeSqliteFile } from './file.js';
|
|
20
|
+
import { SQLITE_MAX_IDENTIFIER_LENGTH, quoteIdentifier, sqliteSerializers, } from './serialization.js';
|
|
21
|
+
/** Data-role session pragmas — 05 §4.3. */
|
|
22
|
+
export function applyDataPragmas(db, file) {
|
|
23
|
+
if (file !== ':memory:')
|
|
24
|
+
db.pragma('journal_mode = WAL');
|
|
25
|
+
db.pragma('foreign_keys = ON');
|
|
26
|
+
db.pragma('busy_timeout = 5000');
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Build the CRUD query port for a data-role connection. Accepts a file path /
|
|
30
|
+
* DSN string or the role-branded config. The database opens lazily on first
|
|
31
|
+
* query (unless injected), and `destroy()` tears it down idempotently —
|
|
32
|
+
* closing only handles this engine opened itself.
|
|
33
|
+
*/
|
|
34
|
+
export function createQueryEngine(config, options = {}) {
|
|
35
|
+
const injected = options.database ?? null;
|
|
36
|
+
const file = injected !== null
|
|
37
|
+
? null
|
|
38
|
+
: typeof config === 'string'
|
|
39
|
+
? normalizeSqliteFile({ file: config })
|
|
40
|
+
: normalizeSqliteFile(config);
|
|
41
|
+
let owned = null;
|
|
42
|
+
const open = () => {
|
|
43
|
+
if (injected !== null)
|
|
44
|
+
return injected;
|
|
45
|
+
if (owned !== null)
|
|
46
|
+
return owned;
|
|
47
|
+
if (file === null || file.length === 0) {
|
|
48
|
+
throw new AdapterError('UNKNOWN', 'sqlite query engine requires a file path', {
|
|
49
|
+
hint: "pass { file: '/abs/path.db' } (or ':memory:'), a sqlite:// DSN, or inject a database handle",
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
owned = new Database(file, { fileMustExist: file !== ':memory:' });
|
|
54
|
+
applyDataPragmas(owned, file);
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
throw toAdapterError(error, 'sqlite open failed');
|
|
58
|
+
}
|
|
59
|
+
return owned;
|
|
60
|
+
};
|
|
61
|
+
// Kysely's SqliteDialect accepts a thunk — resolved once on first query.
|
|
62
|
+
const dialectConfig = {
|
|
63
|
+
database: () => Promise.resolve(open()),
|
|
64
|
+
};
|
|
65
|
+
let destroyed = false;
|
|
66
|
+
return {
|
|
67
|
+
dialect: new SqliteDialect(dialectConfig),
|
|
68
|
+
identifiers: { quote: quoteIdentifier, maxLength: SQLITE_MAX_IDENTIFIER_LENGTH },
|
|
69
|
+
serializers: sqliteSerializers,
|
|
70
|
+
async destroy() {
|
|
71
|
+
if (destroyed)
|
|
72
|
+
return;
|
|
73
|
+
destroyed = true;
|
|
74
|
+
// Injected handles belong to their owner (Electron main, tests).
|
|
75
|
+
if (owned !== null) {
|
|
76
|
+
owned.close();
|
|
77
|
+
owned = null;
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=query-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-engine.js","sourceRoot":"","sources":["../src/query-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,aAAa,EAA4B,MAAM,QAAQ,CAAC;AAEjE,OAAO,EACL,YAAY,GAGb,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EACL,4BAA4B,EAC5B,eAAe,EACf,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAU5B,2CAA2C;AAC3C,MAAM,UAAU,gBAAgB,CAAC,EAAsB,EAAE,IAAY;IACnE,IAAI,IAAI,KAAK,UAAU;QAAE,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACzD,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAC/B,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;AACnC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAqC,EACrC,UAAoC,EAAE;IAEtC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC;IAC1C,MAAM,IAAI,GACR,QAAQ,KAAK,IAAI;QACf,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,OAAO,MAAM,KAAK,QAAQ;YAC1B,CAAC,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YACvC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAEpC,IAAI,KAAK,GAA8B,IAAI,CAAC;IAC5C,MAAM,IAAI,GAAG,GAAuB,EAAE;QACpC,IAAI,QAAQ,KAAK,IAAI;YAAE,OAAO,QAAQ,CAAC;QACvC,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QACjC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,YAAY,CAAC,SAAS,EAAE,0CAA0C,EAAE;gBAC5E,IAAI,EAAE,6FAA6F;aACpG,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC,CAAC;YACnE,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,cAAc,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,yEAAyE;IACzE,MAAM,aAAa,GAAwB;QACzC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KACxC,CAAC;IAEF,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,OAAO;QACL,OAAO,EAAE,IAAI,aAAa,CAAC,aAAa,CAAC;QACzC,WAAW,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,4BAA4B,EAAE;QAChF,WAAW,EAAE,iBAAiB;QAC9B,KAAK,CAAC,OAAO;YACX,IAAI,SAAS;gBAAE,OAAO;YACtB,SAAS,GAAG,IAAI,CAAC;YACjB,iEAAiE;YACjE,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,KAAK,CAAC,KAAK,EAAE,CAAC;gBACd,KAAK,GAAG,IAAI,CAAC;YACf,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Identifier quoting + per-LogicalType value serialization for the SQLite
|
|
3
|
+
* data connection — 05-introspection-engine.md §3 (`QueryEngine`) and
|
|
4
|
+
* 08-server-api.md §3.7. Pure module (no `better-sqlite3`/`kysely` import)
|
|
5
|
+
* so the policy is unit-testable offline. Mirrors the postgres reference
|
|
6
|
+
* adapter.
|
|
7
|
+
*
|
|
8
|
+
* Serialization policy (05 §3 `TypeSerializer` contract):
|
|
9
|
+
* - `bigint` and `decimal` travel as STRINGS end to end — better-sqlite3
|
|
10
|
+
* returns JS numbers (or bigints in safe-integer mode) and JS numbers
|
|
11
|
+
* would silently lose precision past 2^53.
|
|
12
|
+
* - `boolean` maps SQLite's 0/1 storage to real booleans.
|
|
13
|
+
* - timestamps pass through untouched: SQLite stores them as TEXT or
|
|
14
|
+
* INTEGER epoch and the storage format is detected by the runtime data
|
|
15
|
+
* layer, not the adapter (05 §2.2).
|
|
16
|
+
* - `json` is TEXT on disk: `toDb` stringifies, `fromDb` parses when the
|
|
17
|
+
* stored text is valid JSON (raw text passes through otherwise).
|
|
18
|
+
* - BLOB POLICY: `binary` columns are EXCLUDED from CRUD v1 — no serializer
|
|
19
|
+
* is registered for `'binary'` (same as postgres bytea).
|
|
20
|
+
*/
|
|
21
|
+
import type { LogicalType, TypeSerializer } from '@adminium/engine/adapter';
|
|
22
|
+
/**
|
|
23
|
+
* SQLite has no hard identifier limit — the engine convention is 128
|
|
24
|
+
* (05 §2.1 "unlimited-ish sqlite (use 128)").
|
|
25
|
+
*/
|
|
26
|
+
export declare const SQLITE_MAX_IDENTIFIER_LENGTH = 128;
|
|
27
|
+
/**
|
|
28
|
+
* Double-quote an identifier, escaping embedded quotes. Identifiers are
|
|
29
|
+
* snapshot-validated before they ever reach this point (no raw SQL escape
|
|
30
|
+
* hatch — 05 §3); quoting is defense in depth, not sanitization.
|
|
31
|
+
*/
|
|
32
|
+
export declare function quoteIdentifier(identifier: string): string;
|
|
33
|
+
/** Per-LogicalType converters handed to the CRUD layer via `QueryEngine`. */
|
|
34
|
+
export declare const sqliteSerializers: Partial<Record<LogicalType, TypeSerializer>>;
|
|
35
|
+
//# sourceMappingURL=serialization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE5E;;;GAGG;AACH,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAEhD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE1D;AAeD,6EAA6E;AAC7E,eAAO,MAAM,iBAAiB,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,CAwB1E,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite has no hard identifier limit — the engine convention is 128
|
|
3
|
+
* (05 §2.1 "unlimited-ish sqlite (use 128)").
|
|
4
|
+
*/
|
|
5
|
+
export const SQLITE_MAX_IDENTIFIER_LENGTH = 128;
|
|
6
|
+
/**
|
|
7
|
+
* Double-quote an identifier, escaping embedded quotes. Identifiers are
|
|
8
|
+
* snapshot-validated before they ever reach this point (no raw SQL escape
|
|
9
|
+
* hatch — 05 §3); quoting is defense in depth, not sanitization.
|
|
10
|
+
*/
|
|
11
|
+
export function quoteIdentifier(identifier) {
|
|
12
|
+
return `"${identifier.replaceAll('"', '""')}"`;
|
|
13
|
+
}
|
|
14
|
+
function numericToDb(value) {
|
|
15
|
+
if (typeof value === 'bigint' || typeof value === 'number')
|
|
16
|
+
return value.toString();
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
const lossless = {
|
|
20
|
+
toDb: numericToDb,
|
|
21
|
+
fromDb: (value) => {
|
|
22
|
+
if (typeof value === 'number' || typeof value === 'bigint')
|
|
23
|
+
return value.toString();
|
|
24
|
+
return value;
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
/** Per-LogicalType converters handed to the CRUD layer via `QueryEngine`. */
|
|
28
|
+
export const sqliteSerializers = {
|
|
29
|
+
bigint: lossless,
|
|
30
|
+
decimal: lossless,
|
|
31
|
+
boolean: {
|
|
32
|
+
toDb: (value) => (typeof value === 'boolean' ? (value ? 1 : 0) : value),
|
|
33
|
+
fromDb: (value) => {
|
|
34
|
+
if (value === 1 || value === 0)
|
|
35
|
+
return value === 1;
|
|
36
|
+
return value;
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
json: {
|
|
40
|
+
toDb: (value) => (typeof value === 'string' ? value : JSON.stringify(value)),
|
|
41
|
+
fromDb: (value) => {
|
|
42
|
+
if (typeof value !== 'string')
|
|
43
|
+
return value;
|
|
44
|
+
try {
|
|
45
|
+
return JSON.parse(value);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return value;
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
// NOTE: timestamps intentionally absent — storage format (TEXT vs INTEGER
|
|
53
|
+
// epoch) is a runtime-detected format hint, not an adapter policy.
|
|
54
|
+
// NOTE: no 'binary' entry on purpose — blobs are excluded from CRUD v1.
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=serialization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialization.js","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":"AAsBA;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,CAAC;AAEhD;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,OAAO,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;AACjD,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;IACpF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,QAAQ,GAAmB;IAC/B,IAAI,EAAE,WAAW;IACjB,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;QAChB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpF,OAAO,KAAK,CAAC;IACf,CAAC;CACF,CAAC;AAEF,6EAA6E;AAC7E,MAAM,CAAC,MAAM,iBAAiB,GAAiD;IAC7E,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE;QACP,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACvE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAChB,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC;gBAAE,OAAO,KAAK,KAAK,CAAC,CAAC;YACnD,OAAO,KAAK,CAAC;QACf,CAAC;KACF;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC5E,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAChB,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,OAAO,KAAK,CAAC;YAC5C,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAY,CAAC;YACtC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;KACF;IACD,0EAA0E;IAC1E,mEAAmE;IACnE,wEAAwE;CACzE,CAAC"}
|
package/dist/stats.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite table-statistics collector — 06-llm-assist.md §4.2.
|
|
3
|
+
*
|
|
4
|
+
* SQLite is a local file with no server round trip, so an exact `COUNT(*)` is
|
|
5
|
+
* cheap enough to be the row-count of record (`rowCountExact: true`).
|
|
6
|
+
* Per-column null-fraction and distinct-count come from a single bounded
|
|
7
|
+
* full-scan of aggregates (`SUM(col IS NULL)`, `COUNT(DISTINCT col)`) —
|
|
8
|
+
* aggregates only, never a cell value — with tables above `maxScanRows`
|
|
9
|
+
* degrading to `null` rather than a wrong number. Concrete values appear ONLY
|
|
10
|
+
* under the sampling opt-in, and NEVER for PII-suspected or secret columns.
|
|
11
|
+
*
|
|
12
|
+
* Executor-agnostic (like introspect.ts): takes a `sql → rows` runner so the
|
|
13
|
+
* logic is unit-testable without the better-sqlite3 binding.
|
|
14
|
+
*/
|
|
15
|
+
import type { CollectStatsOptions, StatsResult, TableRef } from '@adminium/engine/adapter';
|
|
16
|
+
/** Any `sql → rows` runner (the better-sqlite3 handle in production). */
|
|
17
|
+
export type StatsExecutor = (sql: string) => Promise<Record<string, unknown>[]>;
|
|
18
|
+
export declare function collectSqliteStats(exec: StatsExecutor, table: TableRef, opts?: CollectStatsOptions): Promise<StatsResult>;
|
|
19
|
+
//# sourceMappingURL=stats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../src/stats.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EACV,mBAAmB,EAGnB,WAAW,EAEX,QAAQ,EACT,MAAM,0BAA0B,CAAC;AASlC,yEAAyE;AACzE,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;AAgDhF,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,QAAQ,EACf,IAAI,GAAE,mBAAwB,GAC7B,OAAO,CAAC,WAAW,CAAC,CAsFtB"}
|
package/dist/stats.js
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { STATS_DEFAULT_SAMPLE_VALUES, STATS_MAX_SCAN_ROWS, STATS_SAMPLE_VALUE_MAX_CHARS, } from '@adminium/engine/adapter';
|
|
2
|
+
import { quoteIdentifier } from './serialization.js';
|
|
3
|
+
/** Ordered logical types eligible for min/max under sampling opt-in. */
|
|
4
|
+
const ORDERED_TYPES = new Set([
|
|
5
|
+
'integer',
|
|
6
|
+
'bigint',
|
|
7
|
+
'decimal',
|
|
8
|
+
'float',
|
|
9
|
+
'date',
|
|
10
|
+
'time',
|
|
11
|
+
'timestamp',
|
|
12
|
+
'timestamptz',
|
|
13
|
+
]);
|
|
14
|
+
function num(value) {
|
|
15
|
+
if (value === null || value === undefined)
|
|
16
|
+
return null;
|
|
17
|
+
const n = Number(value);
|
|
18
|
+
return Number.isFinite(n) ? n : null;
|
|
19
|
+
}
|
|
20
|
+
function toScalar(value) {
|
|
21
|
+
if (value === null || value === undefined)
|
|
22
|
+
return null;
|
|
23
|
+
if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
|
|
24
|
+
return value;
|
|
25
|
+
}
|
|
26
|
+
if (typeof value === 'bigint')
|
|
27
|
+
return value.toString();
|
|
28
|
+
if (value instanceof Date)
|
|
29
|
+
return value.toISOString();
|
|
30
|
+
if (value instanceof Uint8Array)
|
|
31
|
+
return '[binary]';
|
|
32
|
+
return String(value);
|
|
33
|
+
}
|
|
34
|
+
function truncate(value) {
|
|
35
|
+
if (typeof value === 'string' && value.length > STATS_SAMPLE_VALUE_MAX_CHARS) {
|
|
36
|
+
return value.slice(0, STATS_SAMPLE_VALUE_MAX_CHARS);
|
|
37
|
+
}
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
40
|
+
/** One batched full-scan: `COUNT(*)` + per-column null count + distinct count. */
|
|
41
|
+
function buildNullDistinctScan(qualified, columns) {
|
|
42
|
+
const parts = columns.map((name, k) => {
|
|
43
|
+
const q = quoteIdentifier(name);
|
|
44
|
+
return `sum(CASE WHEN ${q} IS NULL THEN 1 ELSE 0 END) AS nf_${k}, count(DISTINCT ${q}) AS dc_${k}`;
|
|
45
|
+
});
|
|
46
|
+
const cols = parts.length > 0 ? `, ${parts.join(', ')}` : '';
|
|
47
|
+
return `SELECT count(*) AS row_total${cols} FROM ${qualified}`;
|
|
48
|
+
}
|
|
49
|
+
export async function collectSqliteStats(exec, table, opts = {}) {
|
|
50
|
+
const name = table.name;
|
|
51
|
+
// SQLite has no schema layer in v1 (main database); qualify only if given.
|
|
52
|
+
const qualified = table.schema !== null && table.schema !== 'main' && table.schema !== 'public'
|
|
53
|
+
? `${quoteIdentifier(table.schema)}.${quoteIdentifier(name)}`
|
|
54
|
+
: quoteIdentifier(name);
|
|
55
|
+
const columns = opts.columns ?? [];
|
|
56
|
+
const sampling = opts.sampling ?? null;
|
|
57
|
+
const maxScanRows = opts.maxScanRows ?? STATS_MAX_SCAN_ROWS;
|
|
58
|
+
const warnings = [];
|
|
59
|
+
// 1. Exact row count — cheap on a local file (05 §4.3, 06 §4.2).
|
|
60
|
+
const countRows = await exec(`SELECT count(*) AS n FROM ${qualified}`);
|
|
61
|
+
const rowCountEstimate = num(countRows[0]?.['n']);
|
|
62
|
+
const rowCountExact = rowCountEstimate !== null;
|
|
63
|
+
// 2. Per-column null-fraction + distinct-count via one bounded full-scan.
|
|
64
|
+
const colStats = columns.map((c) => ({
|
|
65
|
+
column: c.name,
|
|
66
|
+
nullFraction: null,
|
|
67
|
+
distinctCount: null,
|
|
68
|
+
}));
|
|
69
|
+
if (columns.length > 0) {
|
|
70
|
+
const scannable = rowCountEstimate !== null && rowCountEstimate <= maxScanRows;
|
|
71
|
+
if (scannable) {
|
|
72
|
+
const scanRows = await exec(buildNullDistinctScan(qualified, columns.map((c) => c.name)));
|
|
73
|
+
const row = scanRows[0] ?? {};
|
|
74
|
+
const total = num(row['row_total']);
|
|
75
|
+
columns.forEach((_c, k) => {
|
|
76
|
+
const nulls = num(row[`nf_${k}`]);
|
|
77
|
+
colStats[k].nullFraction =
|
|
78
|
+
total === null || total === 0 ? (total === 0 ? 0 : null) : nulls === null ? null : nulls / total;
|
|
79
|
+
colStats[k].distinctCount = num(row[`dc_${k}`]);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
warnings.push(`null-fraction/distinct-count skipped for ${columns.length} column(s): table exceeds maxScanRows`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// 3. Sampling opt-in — most-common values + ordered min/max; never PII/secret.
|
|
87
|
+
let sampled = false;
|
|
88
|
+
if (sampling !== null) {
|
|
89
|
+
const maxValues = sampling.maxValuesPerColumn > 0
|
|
90
|
+
? Math.floor(sampling.maxValuesPerColumn)
|
|
91
|
+
: STATS_DEFAULT_SAMPLE_VALUES;
|
|
92
|
+
for (let i = 0; i < columns.length; i += 1) {
|
|
93
|
+
const c = columns[i];
|
|
94
|
+
if (c.piiSuspected === true || c.secret === true)
|
|
95
|
+
continue; // NEVER sample PII/secret.
|
|
96
|
+
const q = quoteIdentifier(c.name);
|
|
97
|
+
if (ORDERED_TYPES.has(c.logicalType)) {
|
|
98
|
+
const mm = await exec(`SELECT min(${q}) AS lo, max(${q}) AS hi FROM ${qualified}`);
|
|
99
|
+
colStats[i].min = toScalar(mm[0]?.['lo']);
|
|
100
|
+
colStats[i].max = toScalar(mm[0]?.['hi']);
|
|
101
|
+
sampled = true;
|
|
102
|
+
}
|
|
103
|
+
const mcv = await exec(`SELECT ${q} AS v, count(*) AS c
|
|
104
|
+
FROM ${qualified}
|
|
105
|
+
WHERE ${q} IS NOT NULL
|
|
106
|
+
GROUP BY ${q}
|
|
107
|
+
ORDER BY count(*) DESC, ${q}
|
|
108
|
+
LIMIT ${maxValues}`);
|
|
109
|
+
colStats[i].sampleValues = mcv.map((r) => truncate(toScalar(r['v'])));
|
|
110
|
+
sampled = true;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
const result = {
|
|
114
|
+
table: { schema: table.schema, name },
|
|
115
|
+
rowCountEstimate,
|
|
116
|
+
rowCountExact,
|
|
117
|
+
columns: colStats,
|
|
118
|
+
sampled,
|
|
119
|
+
};
|
|
120
|
+
if (warnings.length > 0)
|
|
121
|
+
result.warnings = warnings;
|
|
122
|
+
return result;
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../src/stats.ts"],"names":[],"mappings":"AAsBA,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EACnB,4BAA4B,GAC7B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAKrD,wEAAwE;AACxE,MAAM,aAAa,GAA6B,IAAI,GAAG,CAAc;IACnE,SAAS;IACT,QAAQ;IACR,SAAS;IACT,OAAO;IACP,MAAM;IACN,MAAM;IACN,WAAW;IACX,aAAa;CACd,CAAC,CAAC;AAEH,SAAS,GAAG,CAAC,KAAc;IACzB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACvD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACxB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QACzF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;IACvD,IAAI,KAAK,YAAY,IAAI;QAAE,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;IACtD,IAAI,KAAK,YAAY,UAAU;QAAE,OAAO,UAAU,CAAC;IACnD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAkB;IAClC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,4BAA4B,EAAE,CAAC;QAC7E,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,4BAA4B,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,kFAAkF;AAClF,SAAS,qBAAqB,CAAC,SAAiB,EAAE,OAA0B;IAC1E,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO,iBAAiB,CAAC,qCAAqC,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE,CAAC;IACrG,CAAC,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,OAAO,+BAA+B,IAAI,SAAS,SAAS,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAmB,EACnB,KAAe,EACf,OAA4B,EAAE;IAE9B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,2EAA2E;IAC3E,MAAM,SAAS,GACb,KAAK,CAAC,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;QAC3E,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE;QAC7D,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;IACvC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,mBAAmB,CAAC;IAC5D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,iEAAiE;IACjE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,6BAA6B,SAAS,EAAE,CAAC,CAAC;IACvE,MAAM,gBAAgB,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,gBAAgB,KAAK,IAAI,CAAC;IAEhD,0EAA0E;IAC1E,MAAM,QAAQ,GAAkB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAClD,MAAM,EAAE,CAAC,CAAC,IAAI;QACd,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,IAAI;KACpB,CAAC,CAAC,CAAC;IACJ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,gBAAgB,KAAK,IAAI,IAAI,gBAAgB,IAAI,WAAW,CAAC;QAC/E,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,QAAQ,GAAG,MAAM,IAAI,CACzB,qBAAqB,CACnB,SAAS,EACT,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAC3B,CACF,CAAC;YACF,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;YACpC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;gBACxB,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBAClC,QAAQ,CAAC,CAAC,CAAE,CAAC,YAAY;oBACvB,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;gBACnG,QAAQ,CAAC,CAAC,CAAE,CAAC,aAAa,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CACX,4CAA4C,OAAO,CAAC,MAAM,uCAAuC,CAClG,CAAC;QACJ,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,MAAM,SAAS,GACb,QAAQ,CAAC,kBAAkB,GAAG,CAAC;YAC7B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YACzC,CAAC,CAAC,2BAA2B,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;YACtB,IAAI,CAAC,CAAC,YAAY,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI;gBAAE,SAAS,CAAC,2BAA2B;YACvF,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC;gBACrC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,gBAAgB,SAAS,EAAE,CAAC,CAAC;gBACnF,QAAQ,CAAC,CAAC,CAAE,CAAC,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC3C,QAAQ,CAAC,CAAC,CAAE,CAAC,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC3C,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,IAAI,CACpB,UAAU,CAAC;gBACH,SAAS;iBACR,CAAC;oBACE,CAAC;mCACc,CAAC;iBACnB,SAAS,EAAE,CACrB,CAAC;YACF,QAAQ,CAAC,CAAC,CAAE,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACvE,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAgB;QAC1B,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE;QACrC,gBAAgB;QAChB,aAAa;QACb,OAAO,EAAE,QAAQ;QACjB,OAAO;KACR,CAAC;IACF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACpD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite declared type → affinity → portable LogicalType mapping —
|
|
3
|
+
* 05-introspection-engine.md §2.2 ("SQLite (declared → affinity)") and §4.3.
|
|
4
|
+
*
|
|
5
|
+
* SQLite declared types are free text: apply SQLite's five-rule affinity
|
|
6
|
+
* algorithm first, then override with declared-name hints (`BOOLEAN`,
|
|
7
|
+
* `DATETIME`, `UUID`, `JSON`, …). `STRICT` tables skip the hint layer (their
|
|
8
|
+
* type vocabulary is closed: INT/INTEGER/REAL/TEXT/BLOB/ANY). Columns with
|
|
9
|
+
* NO declared type get BLOB affinity → `logicalType: 'unknown'` with a
|
|
10
|
+
* Studio hint to add a type (the assembler emits the warning).
|
|
11
|
+
*
|
|
12
|
+
* Timestamps may be stored as TEXT or INTEGER epoch — storage format is NOT
|
|
13
|
+
* probed at setup (schema-only); the runtime data layer detects it on first
|
|
14
|
+
* read (05 §2.2).
|
|
15
|
+
*/
|
|
16
|
+
import type { ColumnDefault, LogicalType } from '@adminium/engine/adapter';
|
|
17
|
+
export type SqliteAffinity = 'INTEGER' | 'TEXT' | 'BLOB' | 'REAL' | 'NUMERIC';
|
|
18
|
+
/**
|
|
19
|
+
* SQLite's five-rule column affinity algorithm (sqlite.org/datatype3.html
|
|
20
|
+
* §3.1), verbatim: INT → INTEGER; CHAR/CLOB/TEXT → TEXT; BLOB or empty →
|
|
21
|
+
* BLOB; REAL/FLOA/DOUB → REAL; everything else → NUMERIC.
|
|
22
|
+
*/
|
|
23
|
+
export declare function sqliteAffinity(declaredType: string): SqliteAffinity;
|
|
24
|
+
export interface MappedType {
|
|
25
|
+
logicalType: LogicalType;
|
|
26
|
+
maxLength: number | null;
|
|
27
|
+
numericPrecision: number | null;
|
|
28
|
+
numericScale: number | null;
|
|
29
|
+
affinity: SqliteAffinity;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Map a verbatim SQLite declared type to its portable shape. `strict: true`
|
|
33
|
+
* (from `pragma_table_list.strict`) skips the hint layer; `ANY` and
|
|
34
|
+
* unrecognized non-strict names become `'unknown'` with the verbatim
|
|
35
|
+
* `dbType` preserved by the caller (rendered read-only as text — 05 §2.2).
|
|
36
|
+
*/
|
|
37
|
+
export declare function mapSqliteType(declaredType: string, opts?: {
|
|
38
|
+
strict?: boolean;
|
|
39
|
+
}): MappedType;
|
|
40
|
+
/**
|
|
41
|
+
* Classify a column default — `pragma_table_xinfo.dflt_value` is the raw
|
|
42
|
+
* default expression text. Autoincrement is decided by the assembler
|
|
43
|
+
* (INTEGER PRIMARY KEY rowid alias / AUTOINCREMENT keyword — 05 §4.3),
|
|
44
|
+
* not here.
|
|
45
|
+
*/
|
|
46
|
+
export declare function classifyDefault(defaultText: string | null): ColumnDefault;
|
|
47
|
+
//# sourceMappingURL=type-map.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-map.d.ts","sourceRoot":"","sources":["../src/type-map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE3E,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAE9E;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,cAAc,CAQnE;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAkCD;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,MAAM,EACpB,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAC9B,UAAU,CAuDZ;AAKD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,aAAa,CAOzE"}
|
package/dist/type-map.js
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite's five-rule column affinity algorithm (sqlite.org/datatype3.html
|
|
3
|
+
* §3.1), verbatim: INT → INTEGER; CHAR/CLOB/TEXT → TEXT; BLOB or empty →
|
|
4
|
+
* BLOB; REAL/FLOA/DOUB → REAL; everything else → NUMERIC.
|
|
5
|
+
*/
|
|
6
|
+
export function sqliteAffinity(declaredType) {
|
|
7
|
+
const t = declaredType.toUpperCase();
|
|
8
|
+
if (t.trim() === '')
|
|
9
|
+
return 'BLOB';
|
|
10
|
+
if (t.includes('INT'))
|
|
11
|
+
return 'INTEGER';
|
|
12
|
+
if (t.includes('CHAR') || t.includes('CLOB') || t.includes('TEXT'))
|
|
13
|
+
return 'TEXT';
|
|
14
|
+
if (t.includes('BLOB'))
|
|
15
|
+
return 'BLOB';
|
|
16
|
+
if (t.includes('REAL') || t.includes('FLOA') || t.includes('DOUB'))
|
|
17
|
+
return 'REAL';
|
|
18
|
+
return 'NUMERIC';
|
|
19
|
+
}
|
|
20
|
+
/** Strip `(…)` modifiers and collapse whitespace. */
|
|
21
|
+
function baseTypeName(declaredType) {
|
|
22
|
+
return declaredType
|
|
23
|
+
.trim()
|
|
24
|
+
.toUpperCase()
|
|
25
|
+
.replace(/\([^)]*\)/, '')
|
|
26
|
+
.replace(/\s+/g, ' ')
|
|
27
|
+
.trim();
|
|
28
|
+
}
|
|
29
|
+
/** Extract `(n)` / `(p,s)` modifier numbers, when present. */
|
|
30
|
+
function modifiers(declaredType) {
|
|
31
|
+
const match = /\(([\d\s,]+)\)/.exec(declaredType);
|
|
32
|
+
if (match?.[1] === undefined)
|
|
33
|
+
return [];
|
|
34
|
+
return match[1]
|
|
35
|
+
.split(',')
|
|
36
|
+
.map((part) => Number.parseInt(part.trim(), 10))
|
|
37
|
+
.filter((n) => Number.isFinite(n));
|
|
38
|
+
}
|
|
39
|
+
/** Declared-name hints layered over affinity — 05 §2.2 (skipped on STRICT). */
|
|
40
|
+
function hintFor(base) {
|
|
41
|
+
if (base.includes('BOOL'))
|
|
42
|
+
return 'boolean';
|
|
43
|
+
if (base.includes('DATETIME') || base.includes('TIMESTAMP'))
|
|
44
|
+
return 'timestamp';
|
|
45
|
+
if (base === 'DATE')
|
|
46
|
+
return 'date';
|
|
47
|
+
if (base === 'TIME')
|
|
48
|
+
return 'time';
|
|
49
|
+
if (base.includes('UUID') || base.includes('GUID'))
|
|
50
|
+
return 'uuid';
|
|
51
|
+
if (base.includes('JSON'))
|
|
52
|
+
return 'json';
|
|
53
|
+
if (base.includes('DECIMAL') || base.includes('NUMERIC') || base === 'NUM')
|
|
54
|
+
return 'decimal';
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Map a verbatim SQLite declared type to its portable shape. `strict: true`
|
|
59
|
+
* (from `pragma_table_list.strict`) skips the hint layer; `ANY` and
|
|
60
|
+
* unrecognized non-strict names become `'unknown'` with the verbatim
|
|
61
|
+
* `dbType` preserved by the caller (rendered read-only as text — 05 §2.2).
|
|
62
|
+
*/
|
|
63
|
+
export function mapSqliteType(declaredType, opts = {}) {
|
|
64
|
+
const affinity = sqliteAffinity(declaredType);
|
|
65
|
+
const base = baseTypeName(declaredType);
|
|
66
|
+
const mods = modifiers(declaredType);
|
|
67
|
+
const strict = opts.strict ?? false;
|
|
68
|
+
let maxLength = null;
|
|
69
|
+
let numericPrecision = null;
|
|
70
|
+
let numericScale = null;
|
|
71
|
+
let logicalType;
|
|
72
|
+
if (base === '') {
|
|
73
|
+
// No declared type: BLOB affinity, but unmappable → unknown (05 §4.3).
|
|
74
|
+
logicalType = 'unknown';
|
|
75
|
+
}
|
|
76
|
+
else if (base === 'ANY') {
|
|
77
|
+
logicalType = 'unknown'; // STRICT tables' escape-hatch column type
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
switch (affinity) {
|
|
81
|
+
case 'INTEGER':
|
|
82
|
+
logicalType = base.includes('BIGINT') ? 'bigint' : 'integer';
|
|
83
|
+
break;
|
|
84
|
+
case 'TEXT':
|
|
85
|
+
logicalType = mods[0] !== undefined && /(VAR)?CHAR/.test(base) ? 'varchar' : 'text';
|
|
86
|
+
maxLength = /(VAR)?CHAR|TEXT|CLOB/.test(base) ? (mods[0] ?? null) : null;
|
|
87
|
+
break;
|
|
88
|
+
case 'REAL':
|
|
89
|
+
logicalType = 'float';
|
|
90
|
+
break;
|
|
91
|
+
case 'BLOB':
|
|
92
|
+
logicalType = 'binary';
|
|
93
|
+
break;
|
|
94
|
+
case 'NUMERIC': {
|
|
95
|
+
const hint = hintFor(base);
|
|
96
|
+
if (hint === 'decimal') {
|
|
97
|
+
logicalType = 'decimal';
|
|
98
|
+
numericPrecision = mods[0] ?? null;
|
|
99
|
+
numericScale = mods[1] ?? null;
|
|
100
|
+
}
|
|
101
|
+
else if (!strict && hint !== null) {
|
|
102
|
+
logicalType = hint;
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
// NUMERIC catch-all with an unrecognized name — unknown (05 §2.2).
|
|
106
|
+
logicalType = 'unknown';
|
|
107
|
+
}
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Hints can also override TEXT/INTEGER affinities (e.g. declared DATETIME
|
|
112
|
+
// stored as TEXT, declared UUID, declared JSON) — never on STRICT tables.
|
|
113
|
+
if (!strict && affinity !== 'NUMERIC') {
|
|
114
|
+
const hint = hintFor(base);
|
|
115
|
+
if (hint !== null && hint !== 'decimal')
|
|
116
|
+
logicalType = hint;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return { logicalType, maxLength, numericPrecision, numericScale, affinity };
|
|
120
|
+
}
|
|
121
|
+
const NOW_DEFAULT = /^(current_timestamp|current_date|current_time|datetime\(\s*'now'[^)]*\)|strftime\(\s*'%s'[^)]*\)|unixepoch\(\s*\))$/i;
|
|
122
|
+
const LITERAL_DEFAULT = /^('(?:[^']|'')*'|-?\d+(\.\d+)?|true|false|null|x'[0-9a-f]*')$/i;
|
|
123
|
+
/**
|
|
124
|
+
* Classify a column default — `pragma_table_xinfo.dflt_value` is the raw
|
|
125
|
+
* default expression text. Autoincrement is decided by the assembler
|
|
126
|
+
* (INTEGER PRIMARY KEY rowid alias / AUTOINCREMENT keyword — 05 §4.3),
|
|
127
|
+
* not here.
|
|
128
|
+
*/
|
|
129
|
+
export function classifyDefault(defaultText) {
|
|
130
|
+
if (defaultText === null || defaultText === '')
|
|
131
|
+
return null;
|
|
132
|
+
const text = defaultText.trim();
|
|
133
|
+
if (/^null$/i.test(text))
|
|
134
|
+
return null;
|
|
135
|
+
if (NOW_DEFAULT.test(text))
|
|
136
|
+
return { kind: 'now' };
|
|
137
|
+
if (LITERAL_DEFAULT.test(text))
|
|
138
|
+
return { kind: 'literal', text };
|
|
139
|
+
return { kind: 'expression', text };
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=type-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-map.js","sourceRoot":"","sources":["../src/type-map.ts"],"names":[],"mappings":"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"}
|