@quereus/quereus 2.3.0 → 2.4.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 +1 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/planner/stats/basic-estimates.d.ts.map +1 -1
- package/dist/src/planner/stats/basic-estimates.js +4 -2
- package/dist/src/planner/stats/basic-estimates.js.map +1 -1
- package/dist/src/schema/catalog.d.ts.map +1 -1
- package/dist/src/schema/catalog.js +6 -93
- package/dist/src/schema/catalog.js.map +1 -1
- package/dist/src/schema/ddl-generator.d.ts +25 -0
- package/dist/src/schema/ddl-generator.d.ts.map +1 -0
- package/dist/src/schema/ddl-generator.js +225 -0
- package/dist/src/schema/ddl-generator.js.map +1 -0
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -284,6 +284,7 @@ Quereus exports all critical utilities needed for plugin and module development:
|
|
|
284
284
|
* **Collation Support**: `registerCollation`, `getCollation`, built-in collations (`BINARY_COLLATION`, `NOCASE_COLLATION`, `RTRIM_COLLATION`)
|
|
285
285
|
* **Type System**: Full access to logical types, validation, and parsing utilities
|
|
286
286
|
* **Event Hooks**: `VTableEventEmitter` interface for mutation and schema change events — Enable reactive patterns, caching, and replication
|
|
287
|
+
* **DDL Generation**: `generateTableDDL(tableSchema, db?)`, `generateIndexDDL(indexSchema, tableSchema, db?)` — Canonical `CREATE TABLE` / `CREATE INDEX` output from runtime schema objects. With a `Database`, matches session defaults (schema qualification, `default_column_nullability`, `default_vtab_module`/`default_vtab_args`) for readable output; without one, emits fully-qualified, explicitly-annotated DDL safe for cross-session persistence. See [Schema Management — DDL Generation](../../docs/schema.md#ddl-generation).
|
|
287
288
|
|
|
288
289
|
See the [Plugin System documentation](../../docs/plugins.md#comparison-and-coercion-utilities) for complete API reference and examples.
|
|
289
290
|
|
package/dist/src/index.d.ts
CHANGED
|
@@ -44,6 +44,7 @@ export { SchemaManager } from './schema/manager.js';
|
|
|
44
44
|
export { buildColumnIndexMap, columnDefToSchema } from './schema/table.js';
|
|
45
45
|
export type { TableSchema, IndexSchema as TableIndexSchema } from './schema/table.js';
|
|
46
46
|
export type { ColumnSchema } from './schema/column.js';
|
|
47
|
+
export { generateTableDDL, generateIndexDDL } from './schema/ddl-generator.js';
|
|
47
48
|
export { isAsyncIterable, getAsyncIterator, asyncIterableToArray } from './runtime/utils.js';
|
|
48
49
|
export { CollectingInstructionTracer } from './runtime/types.js';
|
|
49
50
|
export type { InstructionTracer, InstructionTraceEvent } from './runtime/types.js';
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.js
CHANGED
|
@@ -44,6 +44,7 @@ export { quoteIdentifier } from './emit/ast-stringify.js';
|
|
|
44
44
|
// Schema management
|
|
45
45
|
export { SchemaManager } from './schema/manager.js';
|
|
46
46
|
export { buildColumnIndexMap, columnDefToSchema } from './schema/table.js';
|
|
47
|
+
export { generateTableDDL, generateIndexDDL } from './schema/ddl-generator.js';
|
|
47
48
|
// Runtime utilities
|
|
48
49
|
export { isAsyncIterable, getAsyncIterator, asyncIterableToArray } from './runtime/utils.js';
|
|
49
50
|
export { CollectingInstructionTracer } from './runtime/types.js';
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,8BAA8B;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,kCAAkC;AAClC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACzG,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGhI,oBAAoB;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAYtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAS7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAWjE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAInF,OAAO;AACN,oCAAoC;AACpC,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,gBAAgB;AAChB,kEAAkE;AAClE,gBAAgB,EAChB,oBAAoB,EACpB,WAAW,EACX,kBAAkB,EAClB,qBAAqB;AACrB,gCAAgC;AAChC,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,2BAA2B,EAC3B,aAAa,EACb,aAAa;AACb,wBAAwB;AACxB,QAAQ;AACR,qBAAqB;AACrB,kBAAkB,EAClB,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EACN,SAAS,EACT,YAAY,EACZ,SAAS,EACT,SAAS,EACT,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACN,SAAS,EACT,SAAS,EACT,aAAa,EACb,aAAa,EACb,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EACN,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,gBAAgB,EAChB,SAAS,EACT,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,QAAQ,EACR,MAAM,uBAAuB,CAAC;AAE/B,0BAA0B;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,oBAAoB;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basic-estimates.d.ts","sourceRoot":"","sources":["../../../../src/planner/stats/basic-estimates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D;;GAEG;AACH,qBAAa,iBAAiB;IACjB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,eAAe;IAEpD;;;OAGG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAI1C;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"basic-estimates.d.ts","sourceRoot":"","sources":["../../../../src/planner/stats/basic-estimates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D;;GAEG;AACH,qBAAa,iBAAiB;IACjB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,eAAe;IAEpD;;;OAGG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAI1C;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IA+B3E;;OAEG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM;IASnE;;OAEG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAK5C;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,MAAU,GAAG,MAAM;IAI5E;;OAEG;IACH,kBAAkB,IAAI,MAAM;CAG5B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,eAAe,GAAG,MAAM,CAExF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAWlF"}
|
|
@@ -35,8 +35,10 @@ export class BasicRowEstimator {
|
|
|
35
35
|
return Math.max(rightRows, Math.floor(leftRows * rightRows * 0.1));
|
|
36
36
|
case 'full':
|
|
37
37
|
case 'full outer':
|
|
38
|
-
// Full outer join:
|
|
39
|
-
|
|
38
|
+
// Full outer join: at least max(left, right); heuristic subtracts a small
|
|
39
|
+
// overlap from the sum, but never below the larger side (matches the
|
|
40
|
+
// invariant that a full outer join returns every row from both inputs).
|
|
41
|
+
return Math.max(leftRows, rightRows, leftRows + rightRows - Math.floor(leftRows * rightRows * 0.1));
|
|
40
42
|
case 'cross':
|
|
41
43
|
// Cross join: cartesian product
|
|
42
44
|
return leftRows * rightRows;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basic-estimates.js","sourceRoot":"","sources":["../../../../src/planner/stats/basic-estimates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;GAEG;AACH,MAAM,OAAO,iBAAiB;IACA;IAA7B,YAA6B,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;IAAG,CAAC;IAExD;;;OAGG;IACH,cAAc,CAAC,UAAkB;QAChC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,QAAgB,EAAE,SAAiB,EAAE,QAAgB;QACjE,QAAQ,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;YAChC,KAAK,OAAO;gBACX,0CAA0C;gBAC1C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC;YAC5D,KAAK,MAAM,CAAC;YACZ,KAAK,YAAY;gBAChB,2CAA2C;gBAC3C,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC;YACnE,KAAK,OAAO,CAAC;YACb,KAAK,aAAa;gBACjB,6CAA6C;gBAC7C,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC;YACpE,KAAK,MAAM,CAAC;YACZ,KAAK,YAAY;gBAChB,
|
|
1
|
+
{"version":3,"file":"basic-estimates.js","sourceRoot":"","sources":["../../../../src/planner/stats/basic-estimates.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../../src/schema/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAKpD,OAAO,KAAK,KAAK,GAAG,MAAM,kBAAkB,CAAC;AAG7C;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,UAAU,EAAE,gBAAgB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACtF,UAAU,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACZ;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,GAAE,MAAe,GAAG,aAAa,CAoD7F;
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../../src/schema/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAKpD,OAAO,KAAK,KAAK,GAAG,MAAM,kBAAkB,CAAC;AAG7C;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,UAAU,EAAE,gBAAgB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACtF,UAAU,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACZ;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,GAAE,MAAe,GAAG,aAAa,CAoD7F;AAwCD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,GAAG,CAAC,iBAAiB,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CA4D1G"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { createTableToString, createViewToString, createIndexToString
|
|
1
|
+
import { createTableToString, createViewToString, createIndexToString } from '../emit/ast-stringify.js';
|
|
2
|
+
import { generateTableDDL, generateIndexDDL } from './ddl-generator.js';
|
|
2
3
|
/**
|
|
3
4
|
* Collects current schema state from the database into a catalog representation
|
|
4
5
|
*/
|
|
@@ -20,14 +21,14 @@ export function collectSchemaCatalog(db, schemaName = 'main') {
|
|
|
20
21
|
// Collect tables
|
|
21
22
|
for (const tableSchema of schema.getAllTables()) {
|
|
22
23
|
if (!tableSchema.isView) {
|
|
23
|
-
tables.push(tableSchemaToCatalog(tableSchema));
|
|
24
|
+
tables.push(tableSchemaToCatalog(tableSchema, db));
|
|
24
25
|
// Collect indexes for this table
|
|
25
26
|
if (tableSchema.indexes && tableSchema.indexes.length > 0) {
|
|
26
27
|
for (const indexSchema of tableSchema.indexes) {
|
|
27
28
|
indexes.push({
|
|
28
29
|
name: indexSchema.name,
|
|
29
30
|
tableName: tableSchema.name,
|
|
30
|
-
ddl: generateIndexDDL(indexSchema, tableSchema)
|
|
31
|
+
ddl: generateIndexDDL(indexSchema, tableSchema, db)
|
|
31
32
|
});
|
|
32
33
|
}
|
|
33
34
|
}
|
|
@@ -49,9 +50,9 @@ export function collectSchemaCatalog(db, schemaName = 'main') {
|
|
|
49
50
|
assertions
|
|
50
51
|
};
|
|
51
52
|
}
|
|
52
|
-
function tableSchemaToCatalog(tableSchema) {
|
|
53
|
+
function tableSchemaToCatalog(tableSchema, db) {
|
|
53
54
|
// Generate canonical DDL from TableSchema
|
|
54
|
-
const ddl = generateTableDDL(tableSchema);
|
|
55
|
+
const ddl = generateTableDDL(tableSchema, db);
|
|
55
56
|
const columns = tableSchema.columns.map(col => ({
|
|
56
57
|
name: col.name,
|
|
57
58
|
type: col.logicalType.name,
|
|
@@ -81,94 +82,6 @@ function assertionSchemaToCatalog(assertionSchema) {
|
|
|
81
82
|
ddl: `CREATE ASSERTION ${assertionSchema.name} CHECK (${assertionSchema.violationSql})`
|
|
82
83
|
};
|
|
83
84
|
}
|
|
84
|
-
/**
|
|
85
|
-
* Generates canonical DDL for an index from its schema
|
|
86
|
-
*/
|
|
87
|
-
function generateIndexDDL(indexSchema, tableSchema) {
|
|
88
|
-
// Convert IndexSchema back to AST CreateIndexStmt for stringification
|
|
89
|
-
const indexStmt = {
|
|
90
|
-
type: 'createIndex',
|
|
91
|
-
index: { type: 'identifier', name: indexSchema.name },
|
|
92
|
-
table: { type: 'identifier', name: tableSchema.name },
|
|
93
|
-
ifNotExists: false,
|
|
94
|
-
isUnique: false,
|
|
95
|
-
columns: indexSchema.columns.map(col => ({
|
|
96
|
-
name: tableSchema.columns[col.index].name,
|
|
97
|
-
expr: undefined,
|
|
98
|
-
collation: col.collation,
|
|
99
|
-
direction: col.desc ? 'desc' : 'asc'
|
|
100
|
-
}))
|
|
101
|
-
};
|
|
102
|
-
return createIndexToString(indexStmt);
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Generates canonical DDL for a table from its schema
|
|
106
|
-
*/
|
|
107
|
-
function generateTableDDL(tableSchema) {
|
|
108
|
-
const parts = ['CREATE'];
|
|
109
|
-
if (tableSchema.isTemporary) {
|
|
110
|
-
parts.push('TEMP');
|
|
111
|
-
}
|
|
112
|
-
parts.push('TABLE');
|
|
113
|
-
parts.push(`"${tableSchema.name}"`);
|
|
114
|
-
// Generate column definitions
|
|
115
|
-
const columnDefs = [];
|
|
116
|
-
for (const col of tableSchema.columns) {
|
|
117
|
-
let colDef = `"${col.name}"`;
|
|
118
|
-
if (col.logicalType) {
|
|
119
|
-
colDef += ` ${col.logicalType.name}`;
|
|
120
|
-
}
|
|
121
|
-
if (col.notNull) {
|
|
122
|
-
colDef += ' NOT NULL';
|
|
123
|
-
}
|
|
124
|
-
if (col.primaryKey && tableSchema.primaryKeyDefinition.length === 1) {
|
|
125
|
-
colDef += ' PRIMARY KEY';
|
|
126
|
-
}
|
|
127
|
-
columnDefs.push(colDef);
|
|
128
|
-
}
|
|
129
|
-
// Add table-level PRIMARY KEY if composite
|
|
130
|
-
if (tableSchema.primaryKeyDefinition.length > 1) {
|
|
131
|
-
const pkCols = tableSchema.primaryKeyDefinition
|
|
132
|
-
.map(pk => `"${tableSchema.columns[pk.index].name}"`)
|
|
133
|
-
.join(', ');
|
|
134
|
-
columnDefs.push(`PRIMARY KEY (${pkCols})`);
|
|
135
|
-
}
|
|
136
|
-
parts.push(`(${columnDefs.join(', ')})`);
|
|
137
|
-
// Add USING clause
|
|
138
|
-
if (tableSchema.vtabModuleName) {
|
|
139
|
-
parts.push(`USING ${tableSchema.vtabModuleName}`);
|
|
140
|
-
if (tableSchema.vtabArgs && Object.keys(tableSchema.vtabArgs).length > 0) {
|
|
141
|
-
const args = Object.entries(tableSchema.vtabArgs)
|
|
142
|
-
.map(([key, value]) => `${key} = ${JSON.stringify(value)}`)
|
|
143
|
-
.join(', ');
|
|
144
|
-
parts.push(`(${args})`);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
// Add WITH TAGS clause if present
|
|
148
|
-
if (tableSchema.tags && Object.keys(tableSchema.tags).length > 0) {
|
|
149
|
-
parts.push(formatTagsClause(tableSchema.tags));
|
|
150
|
-
}
|
|
151
|
-
return parts.join(' ');
|
|
152
|
-
}
|
|
153
|
-
/** Formats a tag value as a SQL literal */
|
|
154
|
-
function formatTagValue(value) {
|
|
155
|
-
if (value === null)
|
|
156
|
-
return 'NULL';
|
|
157
|
-
if (typeof value === 'boolean')
|
|
158
|
-
return value ? 'TRUE' : 'FALSE';
|
|
159
|
-
if (typeof value === 'number')
|
|
160
|
-
return String(value);
|
|
161
|
-
if (typeof value === 'string')
|
|
162
|
-
return `'${value.replace(/'/g, "''")}'`;
|
|
163
|
-
return String(value);
|
|
164
|
-
}
|
|
165
|
-
/** Formats a tags record as a WITH TAGS (...) clause */
|
|
166
|
-
function formatTagsClause(tags) {
|
|
167
|
-
const entries = Object.entries(tags)
|
|
168
|
-
.map(([key, value]) => `${quoteIdentifier(key)} = ${formatTagValue(value)}`)
|
|
169
|
-
.join(', ');
|
|
170
|
-
return `WITH TAGS (${entries})`;
|
|
171
|
-
}
|
|
172
85
|
/**
|
|
173
86
|
* Generates canonical DDL from a declared schema AST
|
|
174
87
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/schema/catalog.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/schema/catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical DDL generation from TableSchema / IndexSchema.
|
|
3
|
+
*
|
|
4
|
+
* Exports:
|
|
5
|
+
* - generateTableDDL(tableSchema, db?) => CREATE TABLE ...
|
|
6
|
+
* - generateIndexDDL(indexSchema, tableSchema, db?) => CREATE INDEX ...
|
|
7
|
+
*
|
|
8
|
+
* When `db` is omitted, the generator emits fully-qualified DDL with
|
|
9
|
+
* unconditional annotations (schema name qualified, USING emitted,
|
|
10
|
+
* nullability annotated on every column). This makes the output safe to
|
|
11
|
+
* persist and re-parse in any session.
|
|
12
|
+
*
|
|
13
|
+
* When `db` is provided, clauses that match the current session defaults
|
|
14
|
+
* are elided for readability:
|
|
15
|
+
* - schema name qualification (db.schemaManager current schema)
|
|
16
|
+
* - USING module / args (db.options.default_vtab_module / default_vtab_args)
|
|
17
|
+
* - per-column NULL / NOT NULL annotation (db.options.default_column_nullability)
|
|
18
|
+
*/
|
|
19
|
+
import type { Database } from '../core/database.js';
|
|
20
|
+
import type { TableSchema, IndexSchema } from './table.js';
|
|
21
|
+
/** Generate canonical DDL for a table from its schema. */
|
|
22
|
+
export declare function generateTableDDL(tableSchema: TableSchema, db?: Database): string;
|
|
23
|
+
/** Generate canonical DDL for an index from its schema. */
|
|
24
|
+
export declare function generateIndexDDL(indexSchema: IndexSchema, tableSchema: TableSchema, db?: Database): string;
|
|
25
|
+
//# sourceMappingURL=ddl-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ddl-generator.d.ts","sourceRoot":"","sources":["../../../src/schema/ddl-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAe3D,0DAA0D;AAC1D,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,WAAW,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,MAAM,CAoChF;AAED,2DAA2D;AAC3D,wBAAgB,gBAAgB,CAC/B,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,EAAE,CAAC,EAAE,QAAQ,GACX,MAAM,CAoBR"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical DDL generation from TableSchema / IndexSchema.
|
|
3
|
+
*
|
|
4
|
+
* Exports:
|
|
5
|
+
* - generateTableDDL(tableSchema, db?) => CREATE TABLE ...
|
|
6
|
+
* - generateIndexDDL(indexSchema, tableSchema, db?) => CREATE INDEX ...
|
|
7
|
+
*
|
|
8
|
+
* When `db` is omitted, the generator emits fully-qualified DDL with
|
|
9
|
+
* unconditional annotations (schema name qualified, USING emitted,
|
|
10
|
+
* nullability annotated on every column). This makes the output safe to
|
|
11
|
+
* persist and re-parse in any session.
|
|
12
|
+
*
|
|
13
|
+
* When `db` is provided, clauses that match the current session defaults
|
|
14
|
+
* are elided for readability:
|
|
15
|
+
* - schema name qualification (db.schemaManager current schema)
|
|
16
|
+
* - USING module / args (db.options.default_vtab_module / default_vtab_args)
|
|
17
|
+
* - per-column NULL / NOT NULL annotation (db.options.default_column_nullability)
|
|
18
|
+
*/
|
|
19
|
+
import { quoteIdentifier, expressionToString } from '../emit/ast-stringify.js';
|
|
20
|
+
/**
|
|
21
|
+
* Unconditionally double-quote an identifier, escaping internal quotes.
|
|
22
|
+
* Used for table/column names in DDL where consistent quoting is safer than
|
|
23
|
+
* the context-sensitive behavior of `quoteIdentifier` (which is for AST stringification).
|
|
24
|
+
*/
|
|
25
|
+
function quoteName(name) {
|
|
26
|
+
return `"${name.replace(/"/g, '""')}"`;
|
|
27
|
+
}
|
|
28
|
+
/** Generate canonical DDL for a table from its schema. */
|
|
29
|
+
export function generateTableDDL(tableSchema, db) {
|
|
30
|
+
const ctx = resolveEmitContext(db);
|
|
31
|
+
const parts = ['CREATE'];
|
|
32
|
+
if (tableSchema.isTemporary)
|
|
33
|
+
parts.push('TEMP');
|
|
34
|
+
parts.push('TABLE', qualifiedName(tableSchema.schemaName, tableSchema.name, ctx.currentSchemaName));
|
|
35
|
+
const columnDefs = [];
|
|
36
|
+
for (const col of tableSchema.columns) {
|
|
37
|
+
columnDefs.push(formatColumnDef(col, tableSchema, ctx.defaultNotNull));
|
|
38
|
+
}
|
|
39
|
+
// Table-level PRIMARY KEY: empty () for singleton, (a, b, ...) for composite.
|
|
40
|
+
// Single-column PK is emitted inline on the column above.
|
|
41
|
+
if (tableSchema.primaryKeyDefinition.length === 0) {
|
|
42
|
+
columnDefs.push('PRIMARY KEY ()');
|
|
43
|
+
}
|
|
44
|
+
else if (tableSchema.primaryKeyDefinition.length > 1) {
|
|
45
|
+
const pkCols = tableSchema.primaryKeyDefinition
|
|
46
|
+
.map(pk => quoteName(tableSchema.columns[pk.index].name))
|
|
47
|
+
.join(', ');
|
|
48
|
+
columnDefs.push(`PRIMARY KEY (${pkCols})`);
|
|
49
|
+
}
|
|
50
|
+
parts.push(`(${columnDefs.join(', ')})`);
|
|
51
|
+
// USING clause: emit when vtabModuleName differs from the session default,
|
|
52
|
+
// or always when no db context is provided.
|
|
53
|
+
const usingClause = formatUsingClause(tableSchema, ctx);
|
|
54
|
+
if (usingClause)
|
|
55
|
+
parts.push(usingClause);
|
|
56
|
+
// Table-level WITH TAGS
|
|
57
|
+
if (hasTags(tableSchema.tags)) {
|
|
58
|
+
parts.push(formatTagsClause(tableSchema.tags));
|
|
59
|
+
}
|
|
60
|
+
return parts.join(' ');
|
|
61
|
+
}
|
|
62
|
+
/** Generate canonical DDL for an index from its schema. */
|
|
63
|
+
export function generateIndexDDL(indexSchema, tableSchema, db) {
|
|
64
|
+
const ctx = resolveEmitContext(db);
|
|
65
|
+
const parts = ['CREATE INDEX'];
|
|
66
|
+
parts.push(quoteName(indexSchema.name));
|
|
67
|
+
parts.push('ON');
|
|
68
|
+
parts.push(qualifiedName(tableSchema.schemaName, tableSchema.name, ctx.currentSchemaName));
|
|
69
|
+
const cols = indexSchema.columns.map(col => {
|
|
70
|
+
let colStr = quoteName(tableSchema.columns[col.index].name);
|
|
71
|
+
if (col.collation)
|
|
72
|
+
colStr += ` COLLATE ${col.collation}`;
|
|
73
|
+
if (col.desc)
|
|
74
|
+
colStr += ' DESC';
|
|
75
|
+
return colStr;
|
|
76
|
+
});
|
|
77
|
+
parts.push(`(${cols.join(', ')})`);
|
|
78
|
+
if (hasTags(indexSchema.tags)) {
|
|
79
|
+
parts.push(formatTagsClause(indexSchema.tags));
|
|
80
|
+
}
|
|
81
|
+
return parts.join(' ');
|
|
82
|
+
}
|
|
83
|
+
function resolveEmitContext(db) {
|
|
84
|
+
if (!db) {
|
|
85
|
+
return {
|
|
86
|
+
currentSchemaName: undefined,
|
|
87
|
+
defaultNotNull: undefined,
|
|
88
|
+
defaultVtabModule: undefined,
|
|
89
|
+
defaultVtabArgs: undefined,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
const nullability = db.options.getStringOption('default_column_nullability');
|
|
93
|
+
return {
|
|
94
|
+
currentSchemaName: db.schemaManager.getCurrentSchemaName(),
|
|
95
|
+
defaultNotNull: nullability === 'not_null',
|
|
96
|
+
defaultVtabModule: db.options.getStringOption('default_vtab_module'),
|
|
97
|
+
defaultVtabArgs: db.options.getObjectOption('default_vtab_args'),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
function qualifiedName(schemaName, name, currentSchemaName) {
|
|
101
|
+
const quotedName = quoteName(name);
|
|
102
|
+
if (!schemaName)
|
|
103
|
+
return quotedName;
|
|
104
|
+
// Elide qualification when schema matches the session's current schema.
|
|
105
|
+
if (currentSchemaName !== undefined && schemaName.toLowerCase() === currentSchemaName.toLowerCase()) {
|
|
106
|
+
return quotedName;
|
|
107
|
+
}
|
|
108
|
+
return `${quoteName(schemaName)}.${quotedName}`;
|
|
109
|
+
}
|
|
110
|
+
function formatColumnDef(col, tableSchema, defaultNotNull) {
|
|
111
|
+
let colDef = quoteName(col.name);
|
|
112
|
+
if (col.logicalType)
|
|
113
|
+
colDef += ` ${col.logicalType.name}`;
|
|
114
|
+
const nullAnnotation = nullabilityAnnotation(col.notNull, defaultNotNull);
|
|
115
|
+
if (nullAnnotation)
|
|
116
|
+
colDef += ` ${nullAnnotation}`;
|
|
117
|
+
if (col.primaryKey && tableSchema.primaryKeyDefinition.length === 1) {
|
|
118
|
+
colDef += ' PRIMARY KEY';
|
|
119
|
+
}
|
|
120
|
+
if (col.defaultValue !== null && col.defaultValue !== undefined) {
|
|
121
|
+
colDef += ` DEFAULT ${formatDefaultExpression(col.defaultValue)}`;
|
|
122
|
+
}
|
|
123
|
+
if (hasTags(col.tags)) {
|
|
124
|
+
colDef += ' ' + formatTagsClause(col.tags);
|
|
125
|
+
}
|
|
126
|
+
return colDef;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Decides what nullability annotation (if any) to emit.
|
|
130
|
+
*
|
|
131
|
+
* - With a known session default: emit only the annotation that differs from the default.
|
|
132
|
+
* - Without a session default: always emit explicitly (safe for persistence under any reader).
|
|
133
|
+
*/
|
|
134
|
+
function nullabilityAnnotation(notNull, defaultNotNull) {
|
|
135
|
+
if (defaultNotNull === undefined) {
|
|
136
|
+
return notNull ? 'NOT NULL' : 'NULL';
|
|
137
|
+
}
|
|
138
|
+
if (defaultNotNull && !notNull)
|
|
139
|
+
return 'NULL';
|
|
140
|
+
if (!defaultNotNull && notNull)
|
|
141
|
+
return 'NOT NULL';
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
function formatUsingClause(tableSchema, ctx) {
|
|
145
|
+
const moduleName = tableSchema.vtabModuleName;
|
|
146
|
+
if (!moduleName)
|
|
147
|
+
return null;
|
|
148
|
+
const args = tableSchema.vtabArgs ?? {};
|
|
149
|
+
const hasArgs = Object.keys(args).length > 0;
|
|
150
|
+
// If no db context, always emit both module and args.
|
|
151
|
+
if (ctx.defaultVtabModule === undefined) {
|
|
152
|
+
let clause = `USING ${moduleName}`;
|
|
153
|
+
if (hasArgs)
|
|
154
|
+
clause += ` (${formatVtabArgs(args)})`;
|
|
155
|
+
return clause;
|
|
156
|
+
}
|
|
157
|
+
const moduleMatches = moduleName === ctx.defaultVtabModule;
|
|
158
|
+
const defaultArgs = ctx.defaultVtabArgs ?? {};
|
|
159
|
+
const argsMatch = recordsShallowEqual(args, defaultArgs);
|
|
160
|
+
if (moduleMatches && argsMatch)
|
|
161
|
+
return null;
|
|
162
|
+
let clause = `USING ${moduleName}`;
|
|
163
|
+
if (hasArgs)
|
|
164
|
+
clause += ` (${formatVtabArgs(args)})`;
|
|
165
|
+
return clause;
|
|
166
|
+
}
|
|
167
|
+
function formatVtabArgs(args) {
|
|
168
|
+
return Object.entries(args)
|
|
169
|
+
.map(([key, value]) => `${key} = ${formatSqlLiteral(value)}`)
|
|
170
|
+
.join(', ');
|
|
171
|
+
}
|
|
172
|
+
function formatDefaultExpression(expr) {
|
|
173
|
+
// Prefer AST stringifier, which preserves lexeme for literals where possible.
|
|
174
|
+
return expressionToString(expr);
|
|
175
|
+
}
|
|
176
|
+
/** Format a SqlValue as a SQL literal (suitable for DEFAULT / USING args). */
|
|
177
|
+
function formatSqlLiteral(value) {
|
|
178
|
+
if (value === null)
|
|
179
|
+
return 'NULL';
|
|
180
|
+
if (typeof value === 'string')
|
|
181
|
+
return `'${value.replace(/'/g, "''")}'`;
|
|
182
|
+
if (typeof value === 'number' || typeof value === 'bigint')
|
|
183
|
+
return String(value);
|
|
184
|
+
if (typeof value === 'boolean')
|
|
185
|
+
return value ? '1' : '0';
|
|
186
|
+
// Fallback for complex values — stringify as JSON string literal.
|
|
187
|
+
return `'${JSON.stringify(value).replace(/'/g, "''")}'`;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Format a tag value. Differs from formatSqlLiteral: booleans emit TRUE/FALSE.
|
|
191
|
+
*/
|
|
192
|
+
function formatTagValue(value) {
|
|
193
|
+
if (value === null)
|
|
194
|
+
return 'NULL';
|
|
195
|
+
if (typeof value === 'boolean')
|
|
196
|
+
return value ? 'TRUE' : 'FALSE';
|
|
197
|
+
if (typeof value === 'number' || typeof value === 'bigint')
|
|
198
|
+
return String(value);
|
|
199
|
+
if (typeof value === 'string')
|
|
200
|
+
return `'${value.replace(/'/g, "''")}'`;
|
|
201
|
+
return String(value);
|
|
202
|
+
}
|
|
203
|
+
function formatTagsClause(tags) {
|
|
204
|
+
const entries = Object.entries(tags)
|
|
205
|
+
.map(([key, value]) => `${quoteIdentifier(key)} = ${formatTagValue(value)}`)
|
|
206
|
+
.join(', ');
|
|
207
|
+
return `WITH TAGS (${entries})`;
|
|
208
|
+
}
|
|
209
|
+
function hasTags(tags) {
|
|
210
|
+
return !!tags && Object.keys(tags).length > 0;
|
|
211
|
+
}
|
|
212
|
+
function recordsShallowEqual(a, b) {
|
|
213
|
+
const aKeys = Object.keys(a);
|
|
214
|
+
const bKeys = Object.keys(b);
|
|
215
|
+
if (aKeys.length !== bKeys.length)
|
|
216
|
+
return false;
|
|
217
|
+
for (const k of aKeys) {
|
|
218
|
+
if (!Object.hasOwn(b, k))
|
|
219
|
+
return false;
|
|
220
|
+
if (a[k] !== b[k])
|
|
221
|
+
return false;
|
|
222
|
+
}
|
|
223
|
+
return true;
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=ddl-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ddl-generator.js","sourceRoot":"","sources":["../../../src/schema/ddl-generator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quereus/quereus",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Pure TypeScript SQL engine — no WASM, no native bindings. Runs in browsers, Node.js, React Native, edge workers, and anywhere JS runs.",
|
|
6
6
|
"keywords": [
|
|
@@ -66,9 +66,9 @@
|
|
|
66
66
|
"mutation:subsystem": "node mutation-subsystem.mjs"
|
|
67
67
|
},
|
|
68
68
|
"devDependencies": {
|
|
69
|
-
"@quereus/plugin-leveldb": "^2.
|
|
69
|
+
"@quereus/plugin-leveldb": "^2.4.0",
|
|
70
70
|
"@quereus/plugin-loader": "*",
|
|
71
|
-
"@quereus/store": "^2.
|
|
71
|
+
"@quereus/store": "^2.4.0",
|
|
72
72
|
"@stryker-mutator/core": "^9.6.1",
|
|
73
73
|
"@stryker-mutator/mocha-runner": "^9.6.1",
|
|
74
74
|
"@stryker-mutator/typescript-checker": "^9.6.1",
|