litedbmodel 2.0.1 → 2.1.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.
Files changed (97) hide show
  1. package/dist/decorators.d.ts.map +1 -1
  2. package/dist/decorators.js +44 -24
  3. package/dist/decorators.js.map +1 -1
  4. package/dist/drivers/mysql.d.ts.map +1 -1
  5. package/dist/drivers/mysql.js +6 -0
  6. package/dist/drivers/mysql.js.map +1 -1
  7. package/dist/drivers/postgres.d.ts.map +1 -1
  8. package/dist/drivers/postgres.js +7 -0
  9. package/dist/drivers/postgres.js.map +1 -1
  10. package/dist/drivers/sqlite.d.ts +2 -0
  11. package/dist/drivers/sqlite.d.ts.map +1 -1
  12. package/dist/drivers/sqlite.js +37 -2
  13. package/dist/drivers/sqlite.js.map +1 -1
  14. package/dist/scp/authoring.d.ts +66 -3
  15. package/dist/scp/authoring.d.ts.map +1 -1
  16. package/dist/scp/authoring.js +194 -5
  17. package/dist/scp/authoring.js.map +1 -1
  18. package/dist/scp/catalog.d.ts +6 -2
  19. package/dist/scp/catalog.d.ts.map +1 -1
  20. package/dist/scp/catalog.js +17 -2
  21. package/dist/scp/catalog.js.map +1 -1
  22. package/dist/scp/codegen.d.ts +132 -26
  23. package/dist/scp/codegen.d.ts.map +1 -1
  24. package/dist/scp/codegen.js +546 -35
  25. package/dist/scp/codegen.js.map +1 -1
  26. package/dist/scp/coltype.d.ts +124 -0
  27. package/dist/scp/coltype.d.ts.map +1 -0
  28. package/dist/scp/coltype.js +408 -0
  29. package/dist/scp/coltype.js.map +1 -0
  30. package/dist/scp/dialect.d.ts +12 -3
  31. package/dist/scp/dialect.d.ts.map +1 -1
  32. package/dist/scp/dialect.js +12 -3
  33. package/dist/scp/dialect.js.map +1 -1
  34. package/dist/scp/fragment/assemble.d.ts.map +1 -1
  35. package/dist/scp/fragment/assemble.js +10 -2
  36. package/dist/scp/fragment/assemble.js.map +1 -1
  37. package/dist/scp/fragment/compile-pg.js +4 -4
  38. package/dist/scp/guard.d.ts +1 -1
  39. package/dist/scp/guard.d.ts.map +1 -1
  40. package/dist/scp/guard.js +6 -0
  41. package/dist/scp/guard.js.map +1 -1
  42. package/dist/scp/index.cjs +10003 -4917
  43. package/dist/scp/index.d.ts +8 -5
  44. package/dist/scp/index.d.ts.map +1 -1
  45. package/dist/scp/index.js +35 -9
  46. package/dist/scp/index.js.map +1 -1
  47. package/dist/scp/index.mjs +1343 -213
  48. package/dist/scp/makesql/authoring-compile.d.ts.map +1 -1
  49. package/dist/scp/makesql/authoring-compile.js +11 -0
  50. package/dist/scp/makesql/authoring-compile.js.map +1 -1
  51. package/dist/scp/makesql/compile-select.d.ts +8 -1
  52. package/dist/scp/makesql/compile-select.d.ts.map +1 -1
  53. package/dist/scp/makesql/compile-select.js +1 -1
  54. package/dist/scp/makesql/compile-select.js.map +1 -1
  55. package/dist/scp/makesql/index.d.ts +2 -3
  56. package/dist/scp/makesql/index.d.ts.map +1 -1
  57. package/dist/scp/makesql/index.js +6 -6
  58. package/dist/scp/makesql/index.js.map +1 -1
  59. package/dist/scp/makesql/json-batch.d.ts.map +1 -1
  60. package/dist/scp/makesql/json-batch.js +6 -1
  61. package/dist/scp/makesql/json-batch.js.map +1 -1
  62. package/dist/scp/makesql/outtype.d.ts +99 -0
  63. package/dist/scp/makesql/outtype.d.ts.map +1 -0
  64. package/dist/scp/makesql/outtype.js +328 -0
  65. package/dist/scp/makesql/outtype.js.map +1 -0
  66. package/dist/scp/makesql/pool-executor.d.ts +70 -0
  67. package/dist/scp/makesql/pool-executor.d.ts.map +1 -1
  68. package/dist/scp/makesql/pool-executor.js +73 -5
  69. package/dist/scp/makesql/pool-executor.js.map +1 -1
  70. package/dist/scp/makesql/static-bundle.d.ts +41 -30
  71. package/dist/scp/makesql/static-bundle.d.ts.map +1 -1
  72. package/dist/scp/makesql/static-bundle.js +351 -131
  73. package/dist/scp/makesql/static-bundle.js.map +1 -1
  74. package/dist/scp/makesql/tx.d.ts +1 -1
  75. package/dist/scp/makesql/tx.d.ts.map +1 -1
  76. package/dist/scp/makesql/tx.js +48 -3
  77. package/dist/scp/makesql/tx.js.map +1 -1
  78. package/dist/scp/makesql/writeouttype.d.ts +65 -0
  79. package/dist/scp/makesql/writeouttype.d.ts.map +1 -0
  80. package/dist/scp/makesql/writeouttype.js +194 -0
  81. package/dist/scp/makesql/writeouttype.js.map +1 -0
  82. package/dist/scp/relation.d.ts +15 -1
  83. package/dist/scp/relation.d.ts.map +1 -1
  84. package/dist/scp/relation.js +61 -2
  85. package/dist/scp/relation.js.map +1 -1
  86. package/dist/scp/runtime.d.ts +17 -5
  87. package/dist/scp/runtime.d.ts.map +1 -1
  88. package/dist/scp/runtime.js +55 -14
  89. package/dist/scp/runtime.js.map +1 -1
  90. package/docs/BENCHMARK.md +58 -56
  91. package/docs/benchmark-chart.svg +166 -166
  92. package/docs/proposal/litedbmodel-v2-scp-architecture.md +51 -0
  93. package/package.json +8 -2
  94. package/dist/scp/makesql/ir.d.ts +0 -42
  95. package/dist/scp/makesql/ir.d.ts.map +0 -1
  96. package/dist/scp/makesql/ir.js +0 -66
  97. package/dist/scp/makesql/ir.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"codegen.js","sourceRoot":"","sources":["../../src/scp/codegen.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;;;AAyDH,gDAGC;AAkBD,0DAaC;AAOD,0DAUC;AAOD,kEAEC;AAnHD,2DAAyH;AAEzH,uCAA0C;AAC1C,qCAAkD;AAMlD;;;;GAIG;AACU,QAAA,iBAAiB,GAAG,CAAC,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAU,CAAC;AAoCxF;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,MAAiB;IAClD,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;IAC/D,OAAO,IAAA,uBAAkB,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,sFAAsF;AACtF,SAAS,WAAW,CAAC,MAAiB;IACpC,MAAM,IAAI,GAAwB;QAChC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3E,CAAC;IACF,OAAO,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;AAChG,CAAC;AAED;;;GAGG;AACH,SAAgB,uBAAuB,CAAC,QAAgB,EAAE,UAA6B;IACrF,IAAI,CAAE,yBAAuC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,KAAK,CACb,kCAAkC,QAAQ,2CAA2C,yBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACrH,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACb,gFAAgF,QAAQ,IAAI;YAC1F,mBAAmB,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,wEAAwE;YAC5H,oEAAoE,CACvE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,uBAAuB,CACrC,MAAiB,EACjB,QAAgB,EAChB,mBAAsC,EACtC,aAAsB;IAEtB,uBAAuB,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IACvD,MAAM,EAAE,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,IAAA,mCAAc,EAAC,EAAE,EAAE,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;IAC5G,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;AAC1E,CAAC;AAED;;;;GAIG;AACH,SAAgB,2BAA2B,CAAC,QAAyB,EAAE,KAAY,EAAE,EAAY;IAC/F,OAAO,IAAA,uBAAa,EAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AACvD,CAAC"}
1
+ {"version":3,"file":"codegen.js","sourceRoot":"","sources":["../../src/scp/codegen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * litedbmodel v2 型システム(SCP アーキ spec §4.1): SQL 型 → bc outType スカラの正規変換。
3
+ *
4
+ * litedbmodel は SQL バックエンド consumer なので **SQL 型を型の SoT** とする(TS の `number` は
5
+ * INTEGER/REAL を区別できないため型の権威にしない)。typed codegen(bc typed-raw 脱box)の `outType`
6
+ * 注記はこの変換で決まる。**曖昧/未知は error(no-assume・no-fallback)** — 既定値へ潰さない。
7
+ *
8
+ * 返すのは bc の scalar 型名(`typed.ts` の scalar union `"string"|"int"|"float"|"bool"|"null"`)。
9
+ * 行/リレーションの構造型(`obj`/`arr`/`opt`)は列型ではなくクエリ由来なので本変換の対象外。
10
+ */
11
+ /** bc typed outType のスカラ型(bc 0.3.0 の portable notation と一致;date 型は無い)。 */
12
+ export type BcScalar = 'string' | 'int' | 'float' | 'bool' | 'null';
13
+ /**
14
+ * SQL 型(DDL のトークン。`DECIMAL(10,2)` 等の括弧やサイズは無視)→ bc outType スカラ。
15
+ * spec §4.1 の正規表に一致。未知/曖昧は throw(fail-closed)。
16
+ */
17
+ export declare function sqlTypeToBcScalar(sqlType: string): BcScalar;
18
+ /**
19
+ * The TS read-path MATERIALIZATION class for a SQL column (issue #59, owner-approved
20
+ * type-honoring de-box). The bc `outType` scalar (`int`/`float`/`string`/`bool`) is the PORTABLE
21
+ * type the native codegen materializes; but on the TS/driver read path we additionally split the
22
+ * `int` scalar by SQL WIDTH and coerce `date`/`bool` to their exact JS form, because a JS `number`
23
+ * cannot hold an i64 and the drivers otherwise return a JS `Date` / `0|1` that violate the
24
+ * declared `string`/`bool` outType. A materialization class is:
25
+ *
26
+ * - `'int32'` — 32-bit int family (INT/INTEGER/SMALLINT/TINYINT/MEDIUMINT/INT2/INT4). Its full
27
+ * range fits in a JS `number` exactly, so it materializes to `number` (fast,
28
+ * arith/JSON-friendly). This is the UNCHANGED, already-correct behavior.
29
+ * - `'int64'` — 64-bit int (BIGINT/INT8). Exceeds `Number.MAX_SAFE_INTEGER`, so a JS `number`
30
+ * would round it. Materializes to a value-preserving decimal STRING (e.g.
31
+ * `"9223372036854775807"`) — EXACT and JSON-safe (a JS `bigint` throws in
32
+ * `JSON.stringify`, so string is the JSON-friendly exact form, mirroring the
33
+ * decimal→string / date→string mappings). This is the ONLY int class whose JS
34
+ * type changes (#59 fix).
35
+ * - `'date'` — DATE/TIMESTAMP/TIMESTAMPTZ/DATETIME/TIME. The bc outType is `string`; drivers
36
+ * return a JS `Date` (TZ-shifted). Materializes to a TZ-attached STRING (the
37
+ * driver's textual form), honoring the `string` outType (#59 fix; overrides the
38
+ * old v2 "date→JS Date on TS" mapping).
39
+ * - `'bool'` — BOOLEAN/BOOL. Drivers may return `0`/`1`; materializes to a JS `boolean`.
40
+ * - `'passthrough'` — every other class (float, text, decimal-as-string, json, uuid): the driver
41
+ * value already matches the outType, so no coercion.
42
+ */
43
+ export type MaterializeClass = 'int32' | 'int64' | 'date' | 'bool' | 'passthrough';
44
+ /**
45
+ * Derive the TS read-path {@link MaterializeClass} for a SQL type (spec §4.1 owner de-box). Uses
46
+ * the SAME normalization + closed-set discipline as {@link sqlTypeToBcScalar} (unknown ⇒ throw),
47
+ * so a column that types for the bc scalar also types for materialization (and vice-versa). The
48
+ * `int` scalar splits int32/int64 by width; `date`/`bool` get their own class; everything else is
49
+ * `passthrough`.
50
+ */
51
+ export declare function sqlTypeToMaterializeClass(sqlType: string): MaterializeClass;
52
+ /**
53
+ * Coerce ONE raw driver cell to the JS form its {@link MaterializeClass} declares (issue #59 TS
54
+ * read-path de-box). NULL passes through (nullable columns). This is driver-agnostic: it accepts
55
+ * whatever form each driver returned for the class and normalizes it —
56
+ * - `int64`: a string (pg int8 / mysql2 bigNumberStrings), a bigint (better-sqlite3 safeIntegers),
57
+ * or a safe JS number → an EXACT decimal STRING (JSON-safe, value-preserving). An
58
+ * already-rounded unsafe JS number is a hard error (precision was lost upstream).
59
+ * - `int32`: a bigint (a driver in safe-integer mode) or string → `number`; a number stays.
60
+ * - `date` : a JS Date → its textual form; a string stays (already the textual form).
61
+ * - `bool` : `0`/`1`/`0n`/`1n` → boolean; a boolean stays.
62
+ * - `passthrough`: unchanged.
63
+ */
64
+ export declare function materializeCell(value: unknown, klass: MaterializeClass): unknown;
65
+ /**
66
+ * A column-type resolver: `(table, column) → SQL type token`. It is the SoT (spec §4.1: the
67
+ * `schema.sql` DDL) a codegen `outType` derivation consults to type each SELECT projection column.
68
+ * MUST throw (never return a default) when a `table.column` is unknown — an unmappable column is a
69
+ * hard error (no-assume, no-fallback), never a silent boxed fallback.
70
+ */
71
+ export type ColumnTypeResolver = (table: string, column: string) => string;
72
+ /**
73
+ * A resolver that yields the TS read-path {@link MaterializeClass} of a `(table, column)`, or
74
+ * `undefined` when the column's type is unknown/untypeable. Unlike {@link ColumnTypeResolver} this
75
+ * is TOLERANT (never throws for an unknown column) — it drives the ALWAYS-ON production read-path
76
+ * materialization (issue #59), which must degrade to leaving an untyped column as the raw driver
77
+ * value rather than failing a real read. It is derived automatically from the DB's own schema (the
78
+ * live column-type SoT), so it fires for EVERY production read with no caller-supplied resolver.
79
+ */
80
+ export type MaterializeResolver = (table: string, column: string) => MaterializeClass | undefined;
81
+ /**
82
+ * A `table → (column → SQL type)` map → a TOLERANT {@link MaterializeResolver}: an unknown
83
+ * `(table, column)` or an un-mappable SQL type resolves to `undefined` (the raw driver value is
84
+ * kept). Retained for callers that WANT tolerance (e.g. optional/introspection contexts). The
85
+ * ALWAYS-ON registration path uses the FAIL-CLOSED variant below instead.
86
+ */
87
+ export declare function materializeResolverFromColumnMap(columnTypes: ReadonlyMap<string, ReadonlyMap<string, string>>): MaterializeResolver;
88
+ /**
89
+ * A `table → (column → SQL type)` map → a FAIL-CLOSED {@link MaterializeResolver} (issue #59 audit):
90
+ * an undeclared `(table, column)` THROWS (naming the model/table/column) — reconciled with the
91
+ * codegen resolver so the TS read path can NEVER silently skip de-box for an undeclared projected
92
+ * column (which would leak a rounded i64). A DECLARED column returns its materialize class (incl.
93
+ * `passthrough` for float/text/decimal/json — a no-op coercion, but it WAS type-checked). This is the
94
+ * resolver the registration precomputes ONCE from the model's INLINE `columns` declaration and
95
+ * carries on the contract — pure in-memory lookups, ZERO per-read DB introspection.
96
+ */
97
+ export declare function failClosedMaterializeResolverFromColumnMap(columnTypes: ReadonlyMap<string, ReadonlyMap<string, string>>): MaterializeResolver;
98
+ /**
99
+ * A `table → (column → SQL type)` map → a fail-closed {@link ColumnTypeResolver} (the codegen
100
+ * `outType` SoT). THROWS for an unknown `table`/`column` (no-assume, no-fallback — a typed-native
101
+ * read must not silently box an untyped column). Built from the model's INLINE `columns` declaration
102
+ * at registration, it replaces the external `schemaColumnTypeResolver(ddl)` as the codegen type
103
+ * source, so `deriveReadOutTypes` reads the declared types.
104
+ */
105
+ export declare function columnTypeResolverFromColumnMap(columnTypes: ReadonlyMap<string, ReadonlyMap<string, string>>): ColumnTypeResolver;
106
+ /** {@link sqlTypeToMaterializeClass} but TOLERANT: returns `undefined` for an unknown SQL type. */
107
+ export declare function materializeClassOrUndefined(sqlType: string): MaterializeClass | undefined;
108
+ /**
109
+ * Parse a list of `CREATE TABLE` DDL statements into a `table → (column → SQL type)` map. This is
110
+ * the spec §4.1 SoT: the physical SQL type of each column, from which `sqlTypeToBcScalar` derives
111
+ * the bc `outType` scalar for typed codegen. Only the base column definitions are read; table-level
112
+ * constraints (`PRIMARY KEY (…)`, `FOREIGN KEY …`, `UNIQUE (…)`, `CHECK …`) are skipped. A column's
113
+ * type is its first token after the name (e.g. `id INTEGER PRIMARY KEY` → `INTEGER`). Column names
114
+ * quoted with `"`/`` ` ``/`[]` are unquoted. Non-`CREATE TABLE` statements (INSERT seed rows, etc.)
115
+ * are ignored, so a mixed schema+seed list is accepted as-is.
116
+ */
117
+ export declare function parseSchemaColumnTypes(ddl: readonly string[]): Map<string, Map<string, string>>;
118
+ /**
119
+ * Build a {@link ColumnTypeResolver} from CREATE TABLE DDL (spec §4.1 SoT). The resolver throws
120
+ * (no default) for any `table.column` the DDL does not declare — an unknown column is a hard error
121
+ * (no-assume, no-fallback), so a codegen `outType` derivation can never silently box an untyped row.
122
+ */
123
+ export declare function schemaColumnTypeResolver(ddl: readonly string[]): ColumnTypeResolver;
124
+ //# sourceMappingURL=coltype.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coltype.d.ts","sourceRoot":"","sources":["../../src/scp/coltype.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,0EAA0E;AAC1E,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEpE;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CA+D3D;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC;AAEnF;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,CAyD3E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAsDhF;AAaD;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;AAE3E;;;;;;;GAOG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,gBAAgB,GAAG,SAAS,CAAC;AAElG;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAC9C,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAC5D,mBAAmB,CAKrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,0CAA0C,CACxD,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAC5D,mBAAmB,CAQrB;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAC7C,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAC5D,kBAAkB,CAmBpB;AAED,mGAAmG;AACnG,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAMzF;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAwB/F;AAyCD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,kBAAkB,CAqBnF"}
@@ -0,0 +1,408 @@
1
+ "use strict";
2
+ /**
3
+ * litedbmodel v2 型システム(SCP アーキ spec §4.1): SQL 型 → bc outType スカラの正規変換。
4
+ *
5
+ * litedbmodel は SQL バックエンド consumer なので **SQL 型を型の SoT** とする(TS の `number` は
6
+ * INTEGER/REAL を区別できないため型の権威にしない)。typed codegen(bc typed-raw 脱box)の `outType`
7
+ * 注記はこの変換で決まる。**曖昧/未知は error(no-assume・no-fallback)** — 既定値へ潰さない。
8
+ *
9
+ * 返すのは bc の scalar 型名(`typed.ts` の scalar union `"string"|"int"|"float"|"bool"|"null"`)。
10
+ * 行/リレーションの構造型(`obj`/`arr`/`opt`)は列型ではなくクエリ由来なので本変換の対象外。
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.sqlTypeToBcScalar = sqlTypeToBcScalar;
14
+ exports.sqlTypeToMaterializeClass = sqlTypeToMaterializeClass;
15
+ exports.materializeCell = materializeCell;
16
+ exports.materializeResolverFromColumnMap = materializeResolverFromColumnMap;
17
+ exports.failClosedMaterializeResolverFromColumnMap = failClosedMaterializeResolverFromColumnMap;
18
+ exports.columnTypeResolverFromColumnMap = columnTypeResolverFromColumnMap;
19
+ exports.materializeClassOrUndefined = materializeClassOrUndefined;
20
+ exports.parseSchemaColumnTypes = parseSchemaColumnTypes;
21
+ exports.schemaColumnTypeResolver = schemaColumnTypeResolver;
22
+ /**
23
+ * SQL 型(DDL のトークン。`DECIMAL(10,2)` 等の括弧やサイズは無視)→ bc outType スカラ。
24
+ * spec §4.1 の正規表に一致。未知/曖昧は throw(fail-closed)。
25
+ */
26
+ function sqlTypeToBcScalar(sqlType) {
27
+ // 括弧のサイズ/精度・`UNSIGNED` 等の修飾を落として基底型名で判定。
28
+ const t = sqlType
29
+ .trim()
30
+ .toUpperCase()
31
+ .replace(/\(.*\)/, '')
32
+ .replace(/\b(UNSIGNED|ZEROFILL|PRECISION)\b/g, '')
33
+ .replace(/\s+/g, ' ')
34
+ .trim();
35
+ switch (t) {
36
+ // int は既定 64bit(i64)。INTEGER も BIGINT も int(bigint を別型にしない — サイズ制限は列制約で表現)。
37
+ case 'INTEGER':
38
+ case 'INT':
39
+ case 'BIGINT':
40
+ case 'SMALLINT':
41
+ case 'TINYINT':
42
+ case 'MEDIUMINT':
43
+ case 'INT2':
44
+ case 'INT4':
45
+ case 'INT8':
46
+ return 'int';
47
+ // int と real は明確に分離。
48
+ case 'REAL':
49
+ case 'FLOAT':
50
+ case 'DOUBLE':
51
+ case 'FLOAT4':
52
+ case 'FLOAT8':
53
+ return 'float';
54
+ // decimal は精度保持のため文字列表現。
55
+ case 'DECIMAL':
56
+ case 'NUMERIC':
57
+ case 'MONEY':
58
+ return 'string';
59
+ case 'TEXT':
60
+ case 'VARCHAR':
61
+ case 'CHAR':
62
+ case 'CHARACTER':
63
+ case 'CHARACTER VARYING':
64
+ case 'CLOB':
65
+ case 'UUID':
66
+ return 'string';
67
+ case 'BOOLEAN':
68
+ case 'BOOL':
69
+ return 'bool';
70
+ // date/timestamp は一旦 string(spec §4.1 owner 決定)。bc に date scalar が無く(behavior-contracts#84
71
+ // は defer)、DB は行ごとに別 TZ を保存しないので、文字列表現で往復させる。将来 bc date 型導入時に最適化。
72
+ case 'DATE':
73
+ case 'TIMESTAMP':
74
+ case 'TIMESTAMPTZ':
75
+ case 'DATETIME':
76
+ case 'TIME':
77
+ return 'string';
78
+ // JSON 列の表現は JSON テキスト=文字列(TS のみ利便で object へ de/serialize。列を typed obj 化しない)。
79
+ case 'JSON':
80
+ case 'JSONB':
81
+ return 'string';
82
+ default:
83
+ throw new Error(`litedbmodel type system (spec §4.1): no bc outType mapping for SQL type '${sqlType}' ` +
84
+ `(normalized '${t}'). Add it to the §4.1 table or fix the column — ambiguous/unknown types ` +
85
+ `are a hard error (no-assume, no-fallback), never defaulted.`);
86
+ }
87
+ }
88
+ /**
89
+ * Derive the TS read-path {@link MaterializeClass} for a SQL type (spec §4.1 owner de-box). Uses
90
+ * the SAME normalization + closed-set discipline as {@link sqlTypeToBcScalar} (unknown ⇒ throw),
91
+ * so a column that types for the bc scalar also types for materialization (and vice-versa). The
92
+ * `int` scalar splits int32/int64 by width; `date`/`bool` get their own class; everything else is
93
+ * `passthrough`.
94
+ */
95
+ function sqlTypeToMaterializeClass(sqlType) {
96
+ const t = sqlType
97
+ .trim()
98
+ .toUpperCase()
99
+ .replace(/\(.*\)/, '')
100
+ .replace(/\b(UNSIGNED|ZEROFILL|PRECISION)\b/g, '')
101
+ .replace(/\s+/g, ' ')
102
+ .trim();
103
+ switch (t) {
104
+ // 32-bit int family: JS number holds the full range exactly.
105
+ case 'INTEGER':
106
+ case 'INT':
107
+ case 'SMALLINT':
108
+ case 'TINYINT':
109
+ case 'MEDIUMINT':
110
+ case 'INT2':
111
+ case 'INT4':
112
+ return 'int32';
113
+ // 64-bit int: needs JS bigint for exactness.
114
+ case 'BIGINT':
115
+ case 'INT8':
116
+ return 'int64';
117
+ case 'BOOLEAN':
118
+ case 'BOOL':
119
+ return 'bool';
120
+ case 'DATE':
121
+ case 'TIMESTAMP':
122
+ case 'TIMESTAMPTZ':
123
+ case 'DATETIME':
124
+ case 'TIME':
125
+ return 'date';
126
+ // float / decimal(→string) / text / json / uuid — driver value already matches the outType.
127
+ case 'REAL':
128
+ case 'FLOAT':
129
+ case 'DOUBLE':
130
+ case 'FLOAT4':
131
+ case 'FLOAT8':
132
+ case 'DECIMAL':
133
+ case 'NUMERIC':
134
+ case 'MONEY':
135
+ case 'TEXT':
136
+ case 'VARCHAR':
137
+ case 'CHAR':
138
+ case 'CHARACTER':
139
+ case 'CHARACTER VARYING':
140
+ case 'CLOB':
141
+ case 'UUID':
142
+ case 'JSON':
143
+ case 'JSONB':
144
+ return 'passthrough';
145
+ default:
146
+ throw new Error(`litedbmodel type system (spec §4.1): no materialization class for SQL type '${sqlType}' ` +
147
+ `(normalized '${t}'). Add it to the §4.1 table or fix the column — ambiguous/unknown types ` +
148
+ `are a hard error (no-assume, no-fallback), never defaulted.`);
149
+ }
150
+ }
151
+ /**
152
+ * Coerce ONE raw driver cell to the JS form its {@link MaterializeClass} declares (issue #59 TS
153
+ * read-path de-box). NULL passes through (nullable columns). This is driver-agnostic: it accepts
154
+ * whatever form each driver returned for the class and normalizes it —
155
+ * - `int64`: a string (pg int8 / mysql2 bigNumberStrings), a bigint (better-sqlite3 safeIntegers),
156
+ * or a safe JS number → an EXACT decimal STRING (JSON-safe, value-preserving). An
157
+ * already-rounded unsafe JS number is a hard error (precision was lost upstream).
158
+ * - `int32`: a bigint (a driver in safe-integer mode) or string → `number`; a number stays.
159
+ * - `date` : a JS Date → its textual form; a string stays (already the textual form).
160
+ * - `bool` : `0`/`1`/`0n`/`1n` → boolean; a boolean stays.
161
+ * - `passthrough`: unchanged.
162
+ */
163
+ function materializeCell(value, klass) {
164
+ if (value === null || value === undefined)
165
+ return value;
166
+ switch (klass) {
167
+ case 'int64': {
168
+ // BIGINT → a value-preserving decimal STRING (exact + JSON-safe; a JS bigint throws in
169
+ // JSON.stringify, a JS number rounds past 2^53). Accept each driver's exact form.
170
+ if (typeof value === 'bigint')
171
+ return value.toString();
172
+ if (typeof value === 'string') {
173
+ if (!/^-?\d+$/.test(value))
174
+ throw new Error(`materialize int64: driver returned a non-integer string '${value}'`);
175
+ return value; // already the exact decimal string (pg int8 / mysql2 bigNumberStrings)
176
+ }
177
+ if (typeof value === 'number') {
178
+ if (!Number.isInteger(value))
179
+ throw new Error(`materialize int64: driver returned a non-integer number ${value} for a 64-bit int column`);
180
+ // A JS number past 2^53 already lost precision at the driver boundary; that is exactly the
181
+ // hole this de-box closes, so a number here means the driver was NOT put in exact mode.
182
+ if (!Number.isSafeInteger(value)) {
183
+ throw new Error(`materialize int64: driver returned an UNSAFE JS number ${value} for a 64-bit int column — ` +
184
+ `precision was already lost before materialization (the driver must return int8 as string/bigint, ` +
185
+ `not a rounded double). Configure the driver (better-sqlite3 safeIntegers / mysql2 supportBigNumbers+bigNumberStrings / pg int8-as-string).`);
186
+ }
187
+ return value.toString(); // a small BIGINT value that fit safely — stringify for a uniform exact string
188
+ }
189
+ throw new Error(`materialize int64: unexpected driver JS type ${typeof value}`);
190
+ }
191
+ case 'int32': {
192
+ if (typeof value === 'number')
193
+ return value;
194
+ if (typeof value === 'bigint')
195
+ return Number(value);
196
+ if (typeof value === 'string' && /^-?\d+$/.test(value))
197
+ return Number(value);
198
+ throw new Error(`materialize int32: unexpected driver JS type ${typeof value} (${String(value)})`);
199
+ }
200
+ case 'date': {
201
+ if (typeof value === 'string')
202
+ return value;
203
+ if (value instanceof Date)
204
+ return dateToTzString(value);
205
+ throw new Error(`materialize date: unexpected driver JS type ${typeof value}`);
206
+ }
207
+ case 'bool': {
208
+ if (typeof value === 'boolean')
209
+ return value;
210
+ if (typeof value === 'number')
211
+ return value !== 0;
212
+ if (typeof value === 'bigint')
213
+ return value !== 0n;
214
+ // A driver in TEXT mode (or the legacy v1 DBModel read path, issue #9) may hand a BOOLEAN over as
215
+ // its textual form: pg's `t`/`f`, or `true`/`false`/`1`/`0`. Normalize those to a JS boolean too,
216
+ // so a single coercion path serves both the v2 native-driver read and the v1 text-mode read.
217
+ if (typeof value === 'string') {
218
+ const s = value.trim().toLowerCase();
219
+ if (s === 't' || s === 'true' || s === '1')
220
+ return true;
221
+ if (s === 'f' || s === 'false' || s === '0')
222
+ return false;
223
+ }
224
+ throw new Error(`materialize bool: unexpected driver JS type ${typeof value} (${String(value)})`);
225
+ }
226
+ case 'passthrough':
227
+ return value;
228
+ }
229
+ }
230
+ /**
231
+ * Render a JS `Date` (a driver that was NOT configured for date-as-string) to a TZ-attached
232
+ * string. A `Date` has no calendar-vs-timestamp distinction, so we emit the full ISO-8601 instant
233
+ * (UTC, `Z`-suffixed) — a lossless, TZ-carrying textual form. The PREFERRED path is to configure
234
+ * the driver to return the native textual form directly (pg `setTypeParser`, mysql2 `dateStrings`);
235
+ * this fallback guarantees a STRING is returned even if a driver slips a Date through.
236
+ */
237
+ function dateToTzString(d) {
238
+ return d.toISOString();
239
+ }
240
+ /**
241
+ * A `table → (column → SQL type)` map → a TOLERANT {@link MaterializeResolver}: an unknown
242
+ * `(table, column)` or an un-mappable SQL type resolves to `undefined` (the raw driver value is
243
+ * kept). Retained for callers that WANT tolerance (e.g. optional/introspection contexts). The
244
+ * ALWAYS-ON registration path uses the FAIL-CLOSED variant below instead.
245
+ */
246
+ function materializeResolverFromColumnMap(columnTypes) {
247
+ return (table, column) => {
248
+ const sqlType = columnTypes.get(table)?.get(column);
249
+ return sqlType === undefined ? undefined : materializeClassOrUndefined(sqlType);
250
+ };
251
+ }
252
+ /**
253
+ * A `table → (column → SQL type)` map → a FAIL-CLOSED {@link MaterializeResolver} (issue #59 audit):
254
+ * an undeclared `(table, column)` THROWS (naming the model/table/column) — reconciled with the
255
+ * codegen resolver so the TS read path can NEVER silently skip de-box for an undeclared projected
256
+ * column (which would leak a rounded i64). A DECLARED column returns its materialize class (incl.
257
+ * `passthrough` for float/text/decimal/json — a no-op coercion, but it WAS type-checked). This is the
258
+ * resolver the registration precomputes ONCE from the model's INLINE `columns` declaration and
259
+ * carries on the contract — pure in-memory lookups, ZERO per-read DB introspection.
260
+ */
261
+ function failClosedMaterializeResolverFromColumnMap(columnTypes) {
262
+ const resolveSqlType = columnTypeResolverFromColumnMap(columnTypes); // throws on undeclared
263
+ return (table, column) => {
264
+ const sqlType = resolveSqlType(table, column); // fail-closed: throws for an undeclared column
265
+ // A declared column's SQL type must map to a known materialize class (the §4.1 closed set); an
266
+ // unknown token on a DECLARED column is a hard error too (never a silent skip).
267
+ return sqlTypeToMaterializeClass(sqlType);
268
+ };
269
+ }
270
+ /**
271
+ * A `table → (column → SQL type)` map → a fail-closed {@link ColumnTypeResolver} (the codegen
272
+ * `outType` SoT). THROWS for an unknown `table`/`column` (no-assume, no-fallback — a typed-native
273
+ * read must not silently box an untyped column). Built from the model's INLINE `columns` declaration
274
+ * at registration, it replaces the external `schemaColumnTypeResolver(ddl)` as the codegen type
275
+ * source, so `deriveReadOutTypes` reads the declared types.
276
+ */
277
+ function columnTypeResolverFromColumnMap(columnTypes) {
278
+ return (table, column) => {
279
+ const cols = columnTypes.get(table);
280
+ if (cols === undefined) {
281
+ throw new Error(`litedbmodel type system (spec §4.1): table '${table}' has no inline column-type declaration ` +
282
+ `(the model's \`columns\` map). Declare it (\`static columns = { ${table}: { … } }\`) so its ` +
283
+ `SELECT projection can be typed. Known tables: ${[...columnTypes.keys()].join(', ') || '<none>'}. No-assume, no-fallback.`);
284
+ }
285
+ const sqlType = cols.get(column);
286
+ if (sqlType === undefined) {
287
+ throw new Error(`litedbmodel type system (spec §4.1): column '${column}' not declared on table '${table}' ` +
288
+ `(declared: ${[...cols.keys()].join(', ')}). Add it to the model's inline \`columns\`. No-assume, no-fallback.`);
289
+ }
290
+ return sqlType;
291
+ };
292
+ }
293
+ /** {@link sqlTypeToMaterializeClass} but TOLERANT: returns `undefined` for an unknown SQL type. */
294
+ function materializeClassOrUndefined(sqlType) {
295
+ try {
296
+ return sqlTypeToMaterializeClass(sqlType);
297
+ }
298
+ catch {
299
+ return undefined;
300
+ }
301
+ }
302
+ /**
303
+ * Parse a list of `CREATE TABLE` DDL statements into a `table → (column → SQL type)` map. This is
304
+ * the spec §4.1 SoT: the physical SQL type of each column, from which `sqlTypeToBcScalar` derives
305
+ * the bc `outType` scalar for typed codegen. Only the base column definitions are read; table-level
306
+ * constraints (`PRIMARY KEY (…)`, `FOREIGN KEY …`, `UNIQUE (…)`, `CHECK …`) are skipped. A column's
307
+ * type is its first token after the name (e.g. `id INTEGER PRIMARY KEY` → `INTEGER`). Column names
308
+ * quoted with `"`/`` ` ``/`[]` are unquoted. Non-`CREATE TABLE` statements (INSERT seed rows, etc.)
309
+ * are ignored, so a mixed schema+seed list is accepted as-is.
310
+ */
311
+ function parseSchemaColumnTypes(ddl) {
312
+ const tables = new Map();
313
+ const CREATE = /^\s*CREATE\s+TABLE\s+(?:IF\s+NOT\s+EXISTS\s+)?([A-Za-z0-9_."`[\]]+)\s*\(([\s\S]*)\)\s*;?\s*$/i;
314
+ const unquote = (s) => s.replace(/^["`[]|["`\]]$/g, '');
315
+ // Column/constraint list keywords that start a TABLE-LEVEL constraint (not a column definition).
316
+ const TABLE_CONSTRAINT = /^(PRIMARY|FOREIGN|UNIQUE|CHECK|CONSTRAINT|KEY|INDEX)\b/i;
317
+ for (const stmt of ddl) {
318
+ const m = CREATE.exec(stmt);
319
+ if (m === null)
320
+ continue; // not a CREATE TABLE (seed INSERT / pragma / etc.) — skip
321
+ const table = unquote(m[1].trim());
322
+ const cols = new Map();
323
+ for (const entry of splitTopLevel(m[2])) {
324
+ const line = entry.trim();
325
+ if (line.length === 0)
326
+ continue;
327
+ if (TABLE_CONSTRAINT.test(line))
328
+ continue; // table-level constraint, not a column
329
+ // `<name> <TYPE...> [constraints]` — the type is the token(s) up to the first constraint
330
+ // keyword or the end. `parseColumnDef` returns `{ name, sqlType }` or undefined (unparseable).
331
+ const parsed = parseColumnDef(line);
332
+ if (parsed === undefined)
333
+ continue;
334
+ cols.set(parsed.name, parsed.sqlType);
335
+ }
336
+ tables.set(table, cols);
337
+ }
338
+ return tables;
339
+ }
340
+ /** Split a CREATE TABLE column list on TOP-LEVEL commas (commas inside `(…)`, e.g. `DECIMAL(10,2)`, stay). */
341
+ function splitTopLevel(body) {
342
+ const parts = [];
343
+ let depth = 0;
344
+ let cur = '';
345
+ for (const ch of body) {
346
+ if (ch === '(')
347
+ depth++;
348
+ else if (ch === ')')
349
+ depth--;
350
+ if (ch === ',' && depth === 0) {
351
+ parts.push(cur);
352
+ cur = '';
353
+ }
354
+ else
355
+ cur += ch;
356
+ }
357
+ if (cur.trim().length > 0)
358
+ parts.push(cur);
359
+ return parts;
360
+ }
361
+ /** The SQL-type keywords that may form a multi-word type (so `CHARACTER VARYING`, `DOUBLE PRECISION` stay whole). */
362
+ const TYPE_CONTINUATION = /^(VARYING|PRECISION)$/i;
363
+ /** Parse one `<name> <TYPE...>` column definition into `{ name, sqlType }`. Undefined when unparseable. */
364
+ function parseColumnDef(line) {
365
+ const unquote = (s) => s.replace(/^["`[]|["`\]]$/g, '');
366
+ const nameMatch = /^([A-Za-z0-9_."`[\]]+)\s+(.*)$/.exec(line);
367
+ if (nameMatch === null)
368
+ return undefined;
369
+ const name = unquote(nameMatch[1]);
370
+ const rest = nameMatch[2].trim();
371
+ // The type is the leading token plus any `(...)` size/precision, plus a continuation word
372
+ // (`CHARACTER VARYING`, `DOUBLE PRECISION`). Everything after is column constraints.
373
+ const typeMatch = /^([A-Za-z0-9_]+(?:\s*\([^)]*\))?)\s*(.*)$/.exec(rest);
374
+ if (typeMatch === null)
375
+ return undefined;
376
+ let sqlType = typeMatch[1].trim();
377
+ const after = typeMatch[2].trim();
378
+ const nextWord = /^([A-Za-z]+)/.exec(after);
379
+ if (nextWord !== null && TYPE_CONTINUATION.test(nextWord[1]))
380
+ sqlType = `${sqlType} ${nextWord[1]}`;
381
+ if (sqlType.length === 0)
382
+ return undefined;
383
+ return { name, sqlType };
384
+ }
385
+ /**
386
+ * Build a {@link ColumnTypeResolver} from CREATE TABLE DDL (spec §4.1 SoT). The resolver throws
387
+ * (no default) for any `table.column` the DDL does not declare — an unknown column is a hard error
388
+ * (no-assume, no-fallback), so a codegen `outType` derivation can never silently box an untyped row.
389
+ */
390
+ function schemaColumnTypeResolver(ddl) {
391
+ const tables = parseSchemaColumnTypes(ddl);
392
+ return (table, column) => {
393
+ const cols = tables.get(table);
394
+ if (cols === undefined) {
395
+ throw new Error(`litedbmodel type system (spec §4.1): no schema for table '${table}' — cannot type its ` +
396
+ `SELECT projection for typed codegen. The DDL (schema.sql SoT) must declare the table ` +
397
+ `(known: ${[...tables.keys()].join(', ') || '<none>'}). No-assume, no-fallback.`);
398
+ }
399
+ const sqlType = cols.get(column);
400
+ if (sqlType === undefined) {
401
+ throw new Error(`litedbmodel type system (spec §4.1): column '${column}' not declared on table '${table}' ` +
402
+ `(known columns: ${[...cols.keys()].join(', ')}). A projected column with no schema type ` +
403
+ `cannot be typed for de-boxed codegen. No-assume, no-fallback.`);
404
+ }
405
+ return sqlType;
406
+ };
407
+ }
408
+ //# sourceMappingURL=coltype.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coltype.js","sourceRoot":"","sources":["../../src/scp/coltype.ts"],"names":[],"mappings":"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"}
@@ -25,10 +25,19 @@
25
25
  * final left-to-right one-pass AFTER the SQL text is fully assembled (spec §8 — the
26
26
  * number-reassignment problem is designed out because the pass runs once over the final
27
27
  * flat text). SQLite/MySQL keep `?`.
28
+ * - **Per-column value cast (PG)**: a written column with a declared `sqlCast` type emits
29
+ * `?::<sqlCast>` on Postgres — in an INSERT `VALUES (…)` tuple (`PostgresSqlBuilder`:289-296)
30
+ * AND an UPDATE `SET c = ?::<sqlCast>` (`DBModel._update`:1058-1063) — via the dialect cast
31
+ * formatter (`formatterFor`), skipping `timestamp`/`date`. MySQL/SQLite emit a bare `?` (the
32
+ * cast formatter is identity there). This is resolved at compile (the write path targets a
33
+ * single dialect), applied in `compile-crud.compileUpdateSingle` and `tx.compileWriteNode`.
28
34
  *
29
- * Everything else (SELECT/UPDATE/DELETE skeletons, `col = ?`, `col IN (?, …)` expansion, the
30
- * fragment tree, RETURNING for SQLite/Postgres) is identical text across dialects, so it is
31
- * NOT part of the strategy — only the genuine divergences live here.
35
+ * Everything else (SELECT/UPDATE/DELETE skeletons, a NON-cast `col = ?`, `col IN (?, …)` expansion,
36
+ * the fragment tree, RETURNING for SQLite/Postgres) is identical text across dialects, so it is
37
+ * NOT part of the strategy — only the genuine divergences (including the PG per-column cast above)
38
+ * live here. NB: `col = ?` / `VALUES (?)` is identical across dialects ONLY for a column with no
39
+ * `sqlCast`; a PG cast column is the `?::<sqlCast>` divergence just described (this was previously
40
+ * mis-documented as unconditionally identical).
32
41
  *
33
42
  * ## DB behavior differences beyond SQL text (spec §13) — closeable-by-convention line
34
43
  *
@@ -1 +1 @@
1
- {"version":3,"file":"dialect.d.ts","sourceRoot":"","sources":["../../src/scp/dialect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,uFAAuF;AACvF,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAE1D,0FAA0F;AAC1F,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG;IAAE,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC;AAEtF;;;;GAIG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAE3B;;;;;;;;;OASG;IACH,oBAAoB,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,EAAE,cAAc,GAAG,MAAM,CAAC;IAEzF;;;;;OAKG;IACH,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,SAAS,GAAG,MAAM,CAAC;IAEvD;;;;OAIG;IACH,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAC;IAEzC;;;;;;;;;;;;;;;OAeG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC;IAErF;;;;;OAKG;IACH,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IAE1C;;;;;OAKG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,GAAG,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;CAClF;AAID;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAYxD;AAwCD;;;;GAIG;AACH,eAAO,MAAM,MAAM,EAAE,OAoBnB,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,QAAQ,EAAE,OAkBrB,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,KAAK,EAAE,OA0BlB,CAAC;AASH,6FAA6F;AAC7F,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAMrD"}
1
+ {"version":3,"file":"dialect.d.ts","sourceRoot":"","sources":["../../src/scp/dialect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAEH,uFAAuF;AACvF,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAE1D,0FAA0F;AAC1F,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG;IAAE,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC;AAEtF;;;;GAIG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAE3B;;;;;;;;;OASG;IACH,oBAAoB,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,EAAE,cAAc,GAAG,MAAM,CAAC;IAEzF;;;;;OAKG;IACH,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,SAAS,GAAG,MAAM,CAAC;IAEvD;;;;OAIG;IACH,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAC;IAEzC;;;;;;;;;;;;;;;OAeG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC;IAErF;;;;;OAKG;IACH,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IAE1C;;;;;OAKG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,GAAG,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;CAClF;AAID;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAYxD;AAwCD;;;;GAIG;AACH,eAAO,MAAM,MAAM,EAAE,OAoBnB,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,QAAQ,EAAE,OAkBrB,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,KAAK,EAAE,OA0BlB,CAAC;AASH,6FAA6F;AAC7F,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAMrD"}