@prisma/orm-target-sqlite 8.0.0-rc.14-dev.6 → 8.0.0-rc.14-dev.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapter-BNyoBP5X.d.mts +2 -0
- package/dist/{adapter-Bp_4Bjff-e0IpIZ1b.d.mts → adapter-Bp_4Bjff-O8HHkgK9.d.mts} +6 -6
- package/dist/{adapter-Bp_4Bjff-e0IpIZ1b.d.mts.map → adapter-Bp_4Bjff-O8HHkgK9.d.mts.map} +1 -1
- package/dist/{adapter-DBvizrEP-SHMMlDkU.mjs → adapter-DOg9HerQ-BP_BKOlH.mjs} +41 -22
- package/dist/adapter-DOg9HerQ-BP_BKOlH.mjs.map +1 -0
- package/dist/adapter.d.mts +10 -10
- package/dist/adapter.mjs +3 -3
- package/dist/adapter__adapter.d.mts +3 -3
- package/dist/adapter__adapter.mjs +1 -1
- package/dist/adapter__codec-types.d.mts +3 -3
- package/dist/adapter__control.d.mts +2 -2
- package/dist/adapter__control.mjs +5 -5
- package/dist/adapter__control.mjs.map +1 -1
- package/dist/adapter__runtime.d.mts +1 -1
- package/dist/adapter__runtime.mjs +3 -3
- package/dist/adapter__runtime.mjs.map +1 -1
- package/dist/adapter__sql-renderer.d.mts +2 -2
- package/dist/adapter__sql-renderer.mjs +1 -1
- package/dist/adapter__types.d.mts +3 -3
- package/dist/codec-descriptor-3-wupJWh.d.mts +2 -0
- package/dist/codec-descriptor-C6M9ScCy-BqG7e8Oz.d.mts +1 -0
- package/dist/{codec-descriptor-BNC9tDro-BPWBITSr.d.mts → codec-descriptor-CDLhtrcE-CloMgVh6.d.mts} +13 -7
- package/dist/codec-descriptor-CDLhtrcE-CloMgVh6.d.mts.map +1 -0
- package/dist/{codec-descriptor-DAmZuKvV-B2UsMrgX.mjs → codec-descriptor-CWJAw6Ck-BksOSxiO.mjs} +3 -3
- package/dist/codec-descriptor-CWJAw6Ck-BksOSxiO.mjs.map +1 -0
- package/dist/codec-types-BBWeZKHk.d.mts +1 -0
- package/dist/codec-types-CXtfACRK.d.mts +2 -0
- package/dist/{codec-types-Dm8kn3W4-BAWXUJJ8.d.mts → codec-types-DU8BIZeM-DPqt7bmT.d.mts} +5 -5
- package/dist/{codec-types-Dm8kn3W4-BAWXUJJ8.d.mts.map → codec-types-DU8BIZeM-DPqt7bmT.d.mts.map} +1 -1
- package/dist/{codecs-BzSfaf5F-gXK7Etj3.d.mts → codecs-BURC1flo-UiOzcif2.d.mts} +3 -3
- package/dist/{codecs-BzSfaf5F-gXK7Etj3.d.mts.map → codecs-BURC1flo-UiOzcif2.d.mts.map} +1 -1
- package/dist/{codecs-Bsf9bHq3.mjs → codecs-BXELYOY1.mjs} +3 -3
- package/dist/{codecs-Bsf9bHq3.mjs.map → codecs-BXELYOY1.mjs.map} +1 -1
- package/dist/codecs-CKWQYtFS.d.mts +1 -0
- package/dist/{codecs-CK___nqu-ByljcwNa.mjs → codecs-yYxIwGIT-BHW7sSHn.mjs} +60 -56
- package/dist/codecs-yYxIwGIT-BHW7sSHn.mjs.map +1 -0
- package/dist/{control-B16T9OoX.mjs → control-1rQ6mko7.mjs} +3 -3
- package/dist/control-1rQ6mko7.mjs.map +1 -0
- package/dist/{control-DG-hF-sF.d.mts → control-CfS8mDnj.d.mts} +6 -5
- package/dist/control-CfS8mDnj.d.mts.map +1 -0
- package/dist/{control--wMueaTg.d.mts → control-DAys3o_s.d.mts} +2 -2
- package/dist/{control--wMueaTg.d.mts.map → control-DAys3o_s.d.mts.map} +1 -1
- package/dist/{data-types-B6gWpyYW-CVM4AAZK.mjs → data-types-B6gYWauJ-DPJUc7_Z.mjs} +7 -4
- package/dist/data-types-B6gYWauJ-DPJUc7_Z.mjs.map +1 -0
- package/dist/{data-types-BxmHClMK.mjs → data-types-D9CwP8vB.mjs} +4 -5
- package/dist/data-types-D9CwP8vB.mjs.map +1 -0
- package/dist/{default-normalizer-D_kHnqz7-SRi-lBH0.mjs → default-normalizer-Bbo6WzxJ-MgaICRCQ.mjs} +7 -4
- package/dist/default-normalizer-Bbo6WzxJ-MgaICRCQ.mjs.map +1 -0
- package/dist/{descriptor-meta-CqCH7n4c-Btl4cIXf.mjs → descriptor-meta-CqCH7n4c-Bx_S6IIu.mjs} +3 -3
- package/dist/{descriptor-meta-CqCH7n4c-Btl4cIXf.mjs.map → descriptor-meta-CqCH7n4c-Bx_S6IIu.mjs.map} +1 -1
- package/dist/{descriptor-meta-vjJkUDsn-Hz3rnAnk.mjs → descriptor-meta-cwy5CXTT-DSRaq_b-.mjs} +17 -3
- package/dist/descriptor-meta-cwy5CXTT-DSRaq_b-.mjs.map +1 -0
- package/dist/driver.mjs +1 -1
- package/dist/driver__control.mjs +1 -1
- package/dist/driver__runtime.mjs +4 -7
- package/dist/driver__runtime.mjs.map +1 -1
- package/dist/{migration-BNB89lIv.mjs → migration-Y6M_R3GK.mjs} +2 -2
- package/dist/{migration-BNB89lIv.mjs.map → migration-Y6M_R3GK.mjs.map} +1 -1
- package/dist/{migration-DSmUh0wk.d.mts → migration-dc58fySD.d.mts} +3 -3
- package/dist/{migration-DSmUh0wk.d.mts.map → migration-dc58fySD.d.mts.map} +1 -1
- package/dist/{op-factory-call-C8jSguMU.d.mts → op-factory-call-4FJxPMyx.d.mts} +5 -11
- package/dist/op-factory-call-4FJxPMyx.d.mts.map +1 -0
- package/dist/{op-factory-call-C8CNBvCb-DyXVtd7o.mjs → op-factory-call-Dv_ma_mw-BtLqNmZI.mjs} +99 -65
- package/dist/op-factory-call-Dv_ma_mw-BtLqNmZI.mjs.map +1 -0
- package/dist/{pack-B488MxTx.d.mts → pack-YBiEVfBB.d.mts} +2 -2
- package/dist/{pack-B488MxTx.d.mts.map → pack-YBiEVfBB.d.mts.map} +1 -1
- package/dist/{planner-B4FWi-jn.d.mts → planner-Bsjn1MTX.d.mts} +2 -2
- package/dist/{planner-B4FWi-jn.d.mts.map → planner-Bsjn1MTX.d.mts.map} +1 -1
- package/dist/{planner-BTKa_OaV-Bl9T8ftA.mjs → planner-CWfPzOwZ-DVj6Tm5a.mjs} +14 -25
- package/dist/planner-CWfPzOwZ-DVj6Tm5a.mjs.map +1 -0
- package/dist/{planner-produced-sqlite-migration-C0pHN3qf-D1QDsx7l.d.mts → planner-produced-sqlite-migration-BQ8vBitH-DlquRDZ4.d.mts} +4 -4
- package/dist/planner-produced-sqlite-migration-BQ8vBitH-DlquRDZ4.d.mts.map +1 -0
- package/dist/planner-produced-sqlite-migration-BfFAqrKj.d.mts +1 -0
- package/dist/{planner-produced-sqlite-migration-CAvJnzes-wf8WQ39U.mjs → planner-produced-sqlite-migration-D1iuFT1l-BSFCXgJD.mjs} +3 -3
- package/dist/{planner-produced-sqlite-migration-CAvJnzes-wf8WQ39U.mjs.map → planner-produced-sqlite-migration-D1iuFT1l-BSFCXgJD.mjs.map} +1 -1
- package/dist/{runtime-7ugF7qno.d.mts → runtime-KPhmnsVg.d.mts} +2 -2
- package/dist/{runtime-7ugF7qno.d.mts.map → runtime-KPhmnsVg.d.mts.map} +1 -1
- package/dist/sql-renderer-2I1xGT7D.d.mts +1 -0
- package/dist/{sqlite-migration-0qCGfq-S-wwKN7Zb3.d.mts → sqlite-migration-Du67NG7r-CqcA5XBz.d.mts} +5 -8
- package/dist/{sqlite-migration-0qCGfq-S-wwKN7Zb3.d.mts.map → sqlite-migration-Du67NG7r-CqcA5XBz.d.mts.map} +1 -1
- package/dist/{sqlite-migration-BKSuDis9-UHqFOBqU.mjs → sqlite-migration-DuQG9WLW-BqHx4fMJ.mjs} +3 -3
- package/dist/{sqlite-migration-BKSuDis9-UHqFOBqU.mjs.map → sqlite-migration-DuQG9WLW-BqHx4fMJ.mjs.map} +1 -1
- package/dist/{shared-AQqQ1hrb-3EPsz46S.d.mts → tables-CvLOKCiJ-Ca1eFkWN.d.mts} +27 -8
- package/dist/tables-CvLOKCiJ-Ca1eFkWN.d.mts.map +1 -0
- package/dist/target.d.mts +14 -14
- package/dist/target.mjs +11 -11
- package/dist/target__codec-descriptor.d.mts +2 -2
- package/dist/target__codec-descriptor.mjs +1 -1
- package/dist/target__codec-types.d.mts +3 -3
- package/dist/target__codecs.d.mts +2 -2
- package/dist/target__codecs.mjs +2 -2
- package/dist/target__control.d.mts +1 -1
- package/dist/target__control.mjs +3 -3
- package/dist/target__control.mjs.map +1 -1
- package/dist/target__data-types.mjs +2 -2
- package/dist/target__default-normalizer.mjs +1 -1
- package/dist/target__migration.d.mts +2 -2
- package/dist/target__migration.mjs +2 -2
- package/dist/target__op-factory-call.d.mts +1 -1
- package/dist/target__op-factory-call.mjs +1 -1
- package/dist/target__pack.d.mts +1 -1
- package/dist/target__planner-produced-sqlite-migration.d.mts +2 -2
- package/dist/target__planner-produced-sqlite-migration.mjs +1 -1
- package/dist/target__planner.d.mts +1 -1
- package/dist/target__planner.mjs +1 -1
- package/dist/types-BXuhSSiR.d.mts +2 -0
- package/dist/{types-RJMd2PlL-DFJRCUUw.d.mts → types-RJMd2PlL-Dqp0xeHo.d.mts} +3 -3
- package/dist/{types-RJMd2PlL-DFJRCUUw.d.mts.map → types-RJMd2PlL-Dqp0xeHo.d.mts.map} +1 -1
- package/package.json +9 -9
- package/dist/adapter-DBvizrEP-SHMMlDkU.mjs.map +0 -1
- package/dist/adapter-_aaOdX79.d.mts +0 -2
- package/dist/codec-descriptor-4BIWMlhf-CjIjnr76.d.mts +0 -1
- package/dist/codec-descriptor-BNC9tDro-BPWBITSr.d.mts.map +0 -1
- package/dist/codec-descriptor-DAmZuKvV-B2UsMrgX.mjs.map +0 -1
- package/dist/codec-descriptor-ae4jEMJI.d.mts +0 -2
- package/dist/codec-types-2BtIaiN_.d.mts +0 -2
- package/dist/codec-types-Bo18WDYR.d.mts +0 -1
- package/dist/codecs-CK___nqu-ByljcwNa.mjs.map +0 -1
- package/dist/codecs-cfQqBb8r.d.mts +0 -1
- package/dist/control-B16T9OoX.mjs.map +0 -1
- package/dist/control-DG-hF-sF.d.mts.map +0 -1
- package/dist/data-types-B6gWpyYW-CVM4AAZK.mjs.map +0 -1
- package/dist/data-types-BxmHClMK.mjs.map +0 -1
- package/dist/default-normalizer-D_kHnqz7-SRi-lBH0.mjs.map +0 -1
- package/dist/descriptor-meta-vjJkUDsn-Hz3rnAnk.mjs.map +0 -1
- package/dist/op-factory-call-C8CNBvCb-DyXVtd7o.mjs.map +0 -1
- package/dist/op-factory-call-C8jSguMU.d.mts.map +0 -1
- package/dist/planner-BTKa_OaV-Bl9T8ftA.mjs.map +0 -1
- package/dist/planner-produced-sqlite-migration-C0pHN3qf-D1QDsx7l.d.mts.map +0 -1
- package/dist/planner-produced-sqlite-migration-aw2sx-H-.d.mts +0 -1
- package/dist/shared-AQqQ1hrb-3EPsz46S.d.mts.map +0 -1
- package/dist/sql-renderer-CSKXHcaY.d.mts +0 -1
- package/dist/types-DIgSNaLb.d.mts +0 -2
package/dist/{op-factory-call-C8CNBvCb-DyXVtd7o.mjs → op-factory-call-Dv_ma_mw-BtLqNmZI.mjs}
RENAMED
|
@@ -1,34 +1,23 @@
|
|
|
1
1
|
import { n as sqliteError } from "./errors-DnR-sMHS-KkMLIP2U.mjs";
|
|
2
|
-
import { n as decodeSqliteDatetime, r as encodeSqliteDatetime } from "./codecs-
|
|
2
|
+
import { n as decodeSqliteDatetime, r as encodeSqliteDatetime } from "./codecs-yYxIwGIT-BHW7sSHn.mjs";
|
|
3
3
|
import { i as tableExistsAst, n as createTable, r as indexExistsAst, t as columnExistsAst } from "./ddl-CXduXyOT-nlDP6DGx.mjs";
|
|
4
|
-
import { r as stripOuterParens } from "./default-normalizer-
|
|
4
|
+
import { r as stripOuterParens } from "./default-normalizer-Bbo6WzxJ-MgaICRCQ.mjs";
|
|
5
5
|
import { n as quoteIdentifier, t as escapeLiteral } from "./sql-utils-C2O4zVkP-Dz3Hb85I.mjs";
|
|
6
6
|
import { t as buildTargetDetails } from "./planner-target-details-CIQ789Gc-C5U4yVY9.mjs";
|
|
7
|
+
import { DdlColumn, FunctionColumnDefault, LiteralColumnDefault } from "@prisma/orm-family-sql/relational-core/ast";
|
|
7
8
|
import { ifDefined } from "@prisma/orm-framework/utils/defined";
|
|
8
9
|
import { blindCast } from "@prisma/orm-framework/utils/casts";
|
|
9
10
|
import { issueOutcome } from "@prisma/orm-framework/components/control";
|
|
10
|
-
import { checkSqlDefaultBody } from "@prisma/orm-family-sql/family/control";
|
|
11
11
|
import { RelationalSchemaNodeKind } from "@prisma/orm-family-sql/schema-ir/types";
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
12
|
+
import { assertNever } from "@prisma/orm-framework/utils/internal-error";
|
|
13
|
+
import { errorMigrationOperationOptionRemoved, errorUnfilledPlaceholder } from "@prisma/orm-framework/errors/migration";
|
|
14
14
|
import { REFERENTIAL_ACTION_SQL } from "@prisma/orm-family-sql/contract/referential-action-sql";
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
* Low-level DDL fragment builders for SQLite migrations.
|
|
18
|
-
*
|
|
19
|
-
* These helpers consume `StorageColumn` (the contract shape, possibly with
|
|
20
|
-
* `typeRef`) and produce string fragments. They are called once per column
|
|
21
|
-
* at the call-construction boundary in `issue-planner.ts` / strategies to
|
|
22
|
-
* build flat `SqliteColumnSpec`s; the operation factories themselves never
|
|
23
|
-
* see `StorageColumn` or `storageTypes`.
|
|
24
|
-
*/
|
|
15
|
+
import { TsExpression, jsonToTsSource } from "@prisma/orm-framework/ts-render";
|
|
16
|
+
//#region ../../../3-targets/3-targets/sqlite/dist/op-factory-call-Dv_ma_mw.mjs
|
|
25
17
|
const SAFE_NATIVE_TYPE_PATTERN = /^[a-zA-Z][a-zA-Z0-9_ ]*$/;
|
|
26
18
|
function assertSafeNativeType(nativeType) {
|
|
27
19
|
if (!SAFE_NATIVE_TYPE_PATTERN.test(nativeType)) throw sqliteError("CONTRACT.NATIVE_TYPE_INVALID", `Unsafe native type name in contract: "${nativeType}". Native type names must match /^[a-zA-Z][a-zA-Z0-9_ ]*\$/`, { meta: { nativeType } });
|
|
28
20
|
}
|
|
29
|
-
function assertSafeDefaultExpression(expression) {
|
|
30
|
-
if (checkSqlDefaultBody(expression) !== void 0) throw sqliteError("CONTRACT.DEFAULT_INVALID", `Unsafe default expression in contract: "${expression}". Default expressions must not contain semicolons, SQL comment tokens, dollar-quoting, or subqueries.`, { meta: { expression } });
|
|
31
|
-
}
|
|
32
21
|
/**
|
|
33
22
|
* Renders the column's DDL type token (e.g. `"INTEGER"`, `"TEXT"`).
|
|
34
23
|
* Resolves `typeRef` against `storageTypes` and validates the resulting
|
|
@@ -40,23 +29,6 @@ function buildColumnTypeSql(column, storageTypes = {}) {
|
|
|
40
29
|
return resolved.nativeType.toUpperCase();
|
|
41
30
|
}
|
|
42
31
|
/**
|
|
43
|
-
* Renders the column's `DEFAULT …` clause. Returns the empty string when
|
|
44
|
-
* there is no default, and also when the default is `autoincrement()` —
|
|
45
|
-
* SQLite encodes that as `INTEGER PRIMARY KEY AUTOINCREMENT` inline on the
|
|
46
|
-
* column definition, not as a separate DEFAULT.
|
|
47
|
-
*/
|
|
48
|
-
function buildColumnDefaultSql(columnDefault, codecId) {
|
|
49
|
-
if (!columnDefault) return "";
|
|
50
|
-
switch (columnDefault.kind) {
|
|
51
|
-
case "literal": return `DEFAULT ${renderDefaultLiteral(columnDefault.value, codecId)}`;
|
|
52
|
-
case "function":
|
|
53
|
-
if (columnDefault.expression === "autoincrement()") return "";
|
|
54
|
-
if (columnDefault.expression === "now()") return "DEFAULT (datetime('now'))";
|
|
55
|
-
assertSafeDefaultExpression(columnDefault.expression);
|
|
56
|
-
return `DEFAULT (${columnDefault.expression})`;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
32
|
* A datetime default is the stored value itself in SQLite, which compares text byte by byte, so it
|
|
61
33
|
* is written as the text the column's codec writes for every row, not as its canonical form.
|
|
62
34
|
*/
|
|
@@ -92,17 +64,55 @@ function step(description, sql, params) {
|
|
|
92
64
|
...ifDefined("params", params)
|
|
93
65
|
};
|
|
94
66
|
}
|
|
67
|
+
/** The DDL default of a contract default: `autoincrement()` is written as part of the column's type instead. */
|
|
68
|
+
function sqliteDefaultToDdlColumnDefault(columnDefault) {
|
|
69
|
+
if (!columnDefault) return void 0;
|
|
70
|
+
switch (columnDefault.kind) {
|
|
71
|
+
case "literal": return new LiteralColumnDefault(columnDefault.value);
|
|
72
|
+
case "function":
|
|
73
|
+
if (columnDefault.expression === "autoincrement()") return void 0;
|
|
74
|
+
return new FunctionColumnDefault(columnDefault.expression);
|
|
75
|
+
default: {
|
|
76
|
+
const exhaustive = columnDefault;
|
|
77
|
+
return assertNever(exhaustive, `sqliteDefaultToDdlColumnDefault: unhandled kind "${blindCast(exhaustive).kind}"`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* A column spec an earlier version wrote carries its default as SQL text in `defaultSql`, empty when it has none.
|
|
83
|
+
*/
|
|
84
|
+
function refuseEarlierColumnSpecs(operation, tableName, columns) {
|
|
85
|
+
const earlier = columns.find((column) => Object.hasOwn(column, "defaultSql"));
|
|
86
|
+
if (earlier === void 0) return;
|
|
87
|
+
throw errorMigrationOperationOptionRemoved({
|
|
88
|
+
operation,
|
|
89
|
+
option: "defaultSql",
|
|
90
|
+
subject: `column ${JSON.stringify(earlier.name)} of table ${JSON.stringify(tableName)}`,
|
|
91
|
+
rewrite: "Write the column's default as `default: { kind: 'literal', value }` or `default: { kind: 'function', expression }`, with the column's `codecRef`, in place of `defaultSql`, and delete an empty `defaultSql`.",
|
|
92
|
+
upgradeEntry: "migration-ts-column-defaults"
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
/** The `DEFAULT …` clause the adapter writes for a column spec, `''` when it has none. */
|
|
96
|
+
function renderSpecDefault(column, tableName, lowerer) {
|
|
97
|
+
const ddlDefault = column.inlineAutoincrementPrimaryKey ? void 0 : sqliteDefaultToDdlColumnDefault(column.default);
|
|
98
|
+
return lowerer.renderColumnDefault(new DdlColumn({
|
|
99
|
+
name: column.name,
|
|
100
|
+
type: column.typeSql,
|
|
101
|
+
...ifDefined("default", ddlDefault),
|
|
102
|
+
...ifDefined("codecRef", column.codecRef)
|
|
103
|
+
}), tableName);
|
|
104
|
+
}
|
|
95
105
|
/**
|
|
96
106
|
* Renders a single column's inline DDL fragment within a `CREATE TABLE`
|
|
97
107
|
* statement. Honours the `inlineAutoincrementPrimaryKey` flag — SQLite
|
|
98
108
|
* treats `INTEGER PRIMARY KEY AUTOINCREMENT` as a special form that aliases
|
|
99
109
|
* `rowid`, and the column must not carry a `DEFAULT` or repeat `NOT NULL`.
|
|
100
110
|
*/
|
|
101
|
-
function renderColumnDefinition(column) {
|
|
111
|
+
function renderColumnDefinition(column, defaultClause) {
|
|
102
112
|
const parts = [quoteIdentifier(column.name), column.typeSql];
|
|
103
113
|
if (column.inlineAutoincrementPrimaryKey) parts.push("PRIMARY KEY AUTOINCREMENT");
|
|
104
114
|
else {
|
|
105
|
-
if (
|
|
115
|
+
if (defaultClause) parts.push(defaultClause);
|
|
106
116
|
if (!column.nullable) parts.push("NOT NULL");
|
|
107
117
|
}
|
|
108
118
|
return parts.join(" ");
|
|
@@ -119,17 +129,37 @@ function renderForeignKeyClause(fk) {
|
|
|
119
129
|
if (fk.onUpdate !== void 0) sql += ` ON UPDATE ${REFERENTIAL_ACTION_SQL[fk.onUpdate]}`;
|
|
120
130
|
return sql;
|
|
121
131
|
}
|
|
122
|
-
function addColumnExecuteSql(tableName, column) {
|
|
132
|
+
function addColumnExecuteSql(tableName, column, defaultClause) {
|
|
123
133
|
return [
|
|
124
134
|
`ALTER TABLE ${quoteIdentifier(tableName)}`,
|
|
125
135
|
`ADD COLUMN ${quoteIdentifier(column.name)} ${column.typeSql}`,
|
|
126
|
-
|
|
136
|
+
defaultClause,
|
|
127
137
|
column.nullable ? "" : "NOT NULL"
|
|
128
138
|
].filter(Boolean).join(" ");
|
|
129
139
|
}
|
|
130
140
|
function dropColumnExecuteSql(tableName, columnName) {
|
|
131
141
|
return `ALTER TABLE ${quoteIdentifier(tableName)} DROP COLUMN ${quoteIdentifier(columnName)}`;
|
|
132
142
|
}
|
|
143
|
+
async function addColumn(tableName, column, lowerer) {
|
|
144
|
+
refuseEarlierColumnSpecs("addColumn", tableName, [column]);
|
|
145
|
+
const defaultClause = await renderSpecDefault(column, tableName, lowerer);
|
|
146
|
+
const checks = columnExistsAst(tableName, column.name);
|
|
147
|
+
const absent = await lowerer.lowerToExecuteRequest(checks.columnAbsent());
|
|
148
|
+
const present = await lowerer.lowerToExecuteRequest(checks.columnPresent());
|
|
149
|
+
return {
|
|
150
|
+
id: `column.${tableName}.${column.name}`,
|
|
151
|
+
label: `Add column ${column.name} on ${tableName}`,
|
|
152
|
+
summary: `Adds column ${column.name} on ${tableName}`,
|
|
153
|
+
operationClass: "additive",
|
|
154
|
+
target: {
|
|
155
|
+
id: "sqlite",
|
|
156
|
+
details: buildTargetDetails("column", column.name, tableName)
|
|
157
|
+
},
|
|
158
|
+
precheck: [step(`ensure column "${column.name}" is missing`, absent.sql, absent.params)],
|
|
159
|
+
execute: [step(`add column "${column.name}"`, addColumnExecuteSql(tableName, column, defaultClause))],
|
|
160
|
+
postcheck: [step(`verify column "${column.name}" exists`, present.sql, present.params)]
|
|
161
|
+
};
|
|
162
|
+
}
|
|
133
163
|
async function tableExistsSteps(lowerer, tableName) {
|
|
134
164
|
const checks = tableExistsAst(tableName);
|
|
135
165
|
return {
|
|
@@ -143,8 +173,8 @@ async function tableExistsSteps(lowerer, tableName) {
|
|
|
143
173
|
* inline on the column; the table-level PRIMARY KEY clause is emitted only
|
|
144
174
|
* when no column carries `inlineAutoincrementPrimaryKey`.
|
|
145
175
|
*/
|
|
146
|
-
function renderCreateTableSql(tableName, spec) {
|
|
147
|
-
const columnDefs = spec.columns.map(renderColumnDefinition);
|
|
176
|
+
function renderCreateTableSql(tableName, spec, defaultClauses) {
|
|
177
|
+
const columnDefs = spec.columns.map((column, index) => renderColumnDefinition(column, defaultClauses[index] ?? ""));
|
|
148
178
|
const constraintDefs = [];
|
|
149
179
|
const hasInlinePk = spec.columns.some((c) => c.inlineAutoincrementPrimaryKey);
|
|
150
180
|
if (spec.primaryKey && !hasInlinePk) constraintDefs.push(`PRIMARY KEY (${spec.primaryKey.columns.map(quoteIdentifier).join(", ")})`);
|
|
@@ -161,6 +191,7 @@ function renderCreateTableSql(tableName, spec) {
|
|
|
161
191
|
}
|
|
162
192
|
async function recreateTable(args, lowerer) {
|
|
163
193
|
const { tableName, contractTable, schemaColumnNames, indexes, summary, postchecks, operationClass } = args;
|
|
194
|
+
refuseEarlierColumnSpecs("recreateTable", tableName, contractTable.columns);
|
|
164
195
|
const tempName = `_prisma_new_${tableName}`;
|
|
165
196
|
const liveSet = new Set(schemaColumnNames);
|
|
166
197
|
const sharedColumns = contractTable.columns.filter((c) => liveSet.has(c.name)).map((c) => c.name);
|
|
@@ -170,6 +201,8 @@ async function recreateTable(args, lowerer) {
|
|
|
170
201
|
sql: buildCreateIndexSql(tableName, idx.name, idx.columns)
|
|
171
202
|
}));
|
|
172
203
|
const copyStep = sharedColumns.length > 0 ? [step(`copy data from "${tableName}" to "${tempName}"`, `INSERT INTO ${quoteIdentifier(tempName)} (${columnList}) SELECT ${columnList} FROM ${quoteIdentifier(tableName)}`)] : [];
|
|
204
|
+
const defaultClauses = await renderSpecDefaults(contractTable, tableName, lowerer);
|
|
205
|
+
const clauseByColumn = new Map(contractTable.columns.map((column, index) => [column.name, defaultClauses[index] ?? ""]));
|
|
173
206
|
const tableSteps = await tableExistsSteps(lowerer, tableName);
|
|
174
207
|
const tempSteps = await tableExistsSteps(lowerer, tempName);
|
|
175
208
|
return {
|
|
@@ -183,7 +216,7 @@ async function recreateTable(args, lowerer) {
|
|
|
183
216
|
},
|
|
184
217
|
precheck: [step(`ensure table "${tableName}" exists`, tableSteps.present.sql, tableSteps.present.params), step(`ensure temp table "${tempName}" does not exist`, tempSteps.absent.sql, tempSteps.absent.params)],
|
|
185
218
|
execute: [
|
|
186
|
-
step(`create new table "${tempName}" with desired schema`, renderCreateTableSql(tempName, contractTable)),
|
|
219
|
+
step(`create new table "${tempName}" with desired schema`, renderCreateTableSql(tempName, contractTable, defaultClauses)),
|
|
187
220
|
...copyStep,
|
|
188
221
|
step(`drop old table "${tableName}"`, `DROP TABLE ${quoteIdentifier(tableName)}`),
|
|
189
222
|
step(`rename "${tempName}" to "${tableName}"`, `ALTER TABLE ${quoteIdentifier(tempName)} RENAME TO ${quoteIdentifier(tableName)}`),
|
|
@@ -192,10 +225,27 @@ async function recreateTable(args, lowerer) {
|
|
|
192
225
|
postcheck: [
|
|
193
226
|
step(`verify table "${tableName}" exists`, tableSteps.present.sql, tableSteps.present.params),
|
|
194
227
|
step(`verify temp table "${tempName}" is gone`, tempSteps.absent.sql, tempSteps.absent.params),
|
|
195
|
-
...postchecks
|
|
228
|
+
...postchecks.flatMap((check) => "sql" in check ? [check] : defaultPostcheck(tableName, check, clauseByColumn.get(check.columnDefault)))
|
|
196
229
|
]
|
|
197
230
|
};
|
|
198
231
|
}
|
|
232
|
+
function renderSpecDefaults(spec, tableName, lowerer) {
|
|
233
|
+
return Promise.all(spec.columns.map((column) => renderSpecDefault(column, tableName, lowerer)));
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Checks the column's default is the text of its `DEFAULT …` clause. SQLite's
|
|
237
|
+
* `pragma_table_info.dflt_value` strips the outer parentheses of an expression
|
|
238
|
+
* default, so `(datetime('now'))` is stored as `datetime('now')`; they are
|
|
239
|
+
* stripped here too.
|
|
240
|
+
*/
|
|
241
|
+
function defaultPostcheck(tableName, check, clause) {
|
|
242
|
+
if (clause === void 0 || !clause.startsWith("DEFAULT ")) return [];
|
|
243
|
+
const expectedRaw = stripOuterParens(clause.slice(8));
|
|
244
|
+
return [{
|
|
245
|
+
description: check.description,
|
|
246
|
+
sql: `SELECT COUNT(*) > 0 FROM pragma_table_info('${escapeLiteral(tableName)}') WHERE name = '${escapeLiteral(check.columnDefault)}' AND dflt_value = '${escapeLiteral(expectedRaw)}'`
|
|
247
|
+
}];
|
|
248
|
+
}
|
|
199
249
|
/**
|
|
200
250
|
* Build a one-line summary of a recreate-table operation from the schema-diff
|
|
201
251
|
* issues that triggered it. Lives next to `recreateTable` so the planner
|
|
@@ -298,11 +348,9 @@ function buildRecreatePostchecks(tableName, issues, spec) {
|
|
|
298
348
|
});
|
|
299
349
|
continue;
|
|
300
350
|
}
|
|
301
|
-
|
|
302
|
-
const expectedRaw = colSpec?.defaultSql.startsWith("DEFAULT ") ? stripOuterParens(colSpec.defaultSql.slice(8)) : null;
|
|
303
|
-
if (expectedRaw) checks.push({
|
|
351
|
+
if (byName.get(columnName)?.default !== void 0) checks.push({
|
|
304
352
|
description: `verify "${columnName}" default on "${tableName}"`,
|
|
305
|
-
|
|
353
|
+
columnDefault: columnName
|
|
306
354
|
});
|
|
307
355
|
continue;
|
|
308
356
|
}
|
|
@@ -377,6 +425,7 @@ function renderDdlColumnAsTsCall(column) {
|
|
|
377
425
|
if (column.notNull) opts.push("notNull: true");
|
|
378
426
|
if (column.primaryKey) opts.push("primaryKey: true");
|
|
379
427
|
if (column.default) opts.push(`default: ${renderDdlColumnDefault(column.default)}`);
|
|
428
|
+
if (column.codecRef) opts.push(`codecRef: ${jsonToTsSource(column.codecRef)}`);
|
|
380
429
|
const optsStr = opts.length > 0 ? `, { ${opts.join(", ")} }` : "";
|
|
381
430
|
return `col(${jsonToTsSource(column.name)}, ${jsonToTsSource(column.type)}${optsStr})`;
|
|
382
431
|
}
|
|
@@ -604,22 +653,7 @@ var AddColumnCall = class extends SqliteOpFactoryCallNode {
|
|
|
604
653
|
tableName: this.tableName,
|
|
605
654
|
columnName: this.column.name
|
|
606
655
|
} });
|
|
607
|
-
|
|
608
|
-
const absent = await lowerer.lowerToExecuteRequest(checks.columnAbsent());
|
|
609
|
-
const present = await lowerer.lowerToExecuteRequest(checks.columnPresent());
|
|
610
|
-
return {
|
|
611
|
-
id: `column.${this.tableName}.${this.column.name}`,
|
|
612
|
-
label: `Add column ${this.column.name} on ${this.tableName}`,
|
|
613
|
-
summary: `Adds column ${this.column.name} on ${this.tableName}`,
|
|
614
|
-
operationClass: "additive",
|
|
615
|
-
target: {
|
|
616
|
-
id: "sqlite",
|
|
617
|
-
details: buildTargetDetails("column", this.column.name, this.tableName)
|
|
618
|
-
},
|
|
619
|
-
precheck: [step(`ensure column "${this.column.name}" is missing`, absent.sql, absent.params)],
|
|
620
|
-
execute: [step(`add column "${this.column.name}"`, addColumnExecuteSql(this.tableName, this.column))],
|
|
621
|
-
postcheck: [step(`verify column "${this.column.name}" exists`, present.sql, present.params)]
|
|
622
|
-
};
|
|
656
|
+
return addColumn(this.tableName, this.column, lowerer);
|
|
623
657
|
}
|
|
624
658
|
renderTypeScript() {
|
|
625
659
|
return `this.addColumn({ table: ${jsonToTsSource(this.tableName)}, column: ${jsonToTsSource(this.column)} })`;
|
|
@@ -840,6 +874,6 @@ var RawSqlCall = class extends SqliteOpFactoryCallNode {
|
|
|
840
874
|
}
|
|
841
875
|
};
|
|
842
876
|
//#endregion
|
|
843
|
-
export { DropColumnCall as a, RawSqlCall as c,
|
|
877
|
+
export { DropColumnCall as a, RawSqlCall as c, buildRecreatePostchecks as d, buildRecreateSummary as f, step as h, DataTransformCall as i, RecreateTableCall as l, sqliteDefaultToDdlColumnDefault as m, CreateIndexCall as n, DropIndexCall as o, renderDefaultLiteral as p, CreateTableCall as r, DropTableCall as s, AddColumnCall as t, buildColumnTypeSql as u };
|
|
844
878
|
|
|
845
|
-
//# sourceMappingURL=op-factory-call-
|
|
879
|
+
//# sourceMappingURL=op-factory-call-Dv_ma_mw-BtLqNmZI.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"op-factory-call-Dv_ma_mw-BtLqNmZI.mjs","names":[],"sources":["../../../../3-targets/3-targets/sqlite/dist/op-factory-call-Dv_ma_mw.mjs"],"sourcesContent":["import \"./codec-ids-KMliSCRp.mjs\";\nimport { n as sqliteError } from \"./errors-DnR-sMHS.mjs\";\nimport { n as decodeSqliteDatetime, r as encodeSqliteDatetime } from \"./codecs-yYxIwGIT.mjs\";\nimport { r as stripOuterParens } from \"./default-normalizer-Bbo6WzxJ.mjs\";\nimport { n as quoteIdentifier, t as escapeLiteral } from \"./sql-utils-C2O4zVkP.mjs\";\nimport { i as tableExistsAst, n as columnExistsAst, r as indexExistsAst, t as createTable } from \"./ddl-CXduXyOT.mjs\";\nimport { t as buildTargetDetails } from \"./planner-target-details-CIQ789Gc.mjs\";\nimport { DdlColumn, FunctionColumnDefault, LiteralColumnDefault } from \"@internal/sql-relational-core/ast\";\nimport { ifDefined } from \"@internal/utils/defined\";\nimport { blindCast } from \"@internal/utils/casts\";\nimport { issueOutcome } from \"@internal/framework-components/control\";\nimport { RelationalSchemaNodeKind } from \"@internal/sql-schema-ir/types\";\nimport { assertNever } from \"@internal/utils/internal-error\";\nimport { errorMigrationOperationOptionRemoved, errorUnfilledPlaceholder } from \"@internal/errors/migration\";\nimport { REFERENTIAL_ACTION_SQL } from \"@internal/sql-contract/referential-action-sql\";\nimport { TsExpression, jsonToTsSource } from \"@internal/ts-render\";\n//#region src/core/migrations/planner-ddl-builders.ts\nconst SAFE_NATIVE_TYPE_PATTERN = /^[a-zA-Z][a-zA-Z0-9_ ]*$/;\nfunction assertSafeNativeType(nativeType) {\n\tif (!SAFE_NATIVE_TYPE_PATTERN.test(nativeType)) throw sqliteError(\"CONTRACT.NATIVE_TYPE_INVALID\", `Unsafe native type name in contract: \"${nativeType}\". Native type names must match /^[a-zA-Z][a-zA-Z0-9_ ]*\\$/`, { meta: { nativeType } });\n}\n/**\n* Renders the column's DDL type token (e.g. `\"INTEGER\"`, `\"TEXT\"`).\n* Resolves `typeRef` against `storageTypes` and validates the resulting\n* native type against a safe-identifier pattern.\n*/\nfunction buildColumnTypeSql(column, storageTypes = {}) {\n\tconst resolved = resolveColumnTypeMetadata(column, storageTypes);\n\tassertSafeNativeType(resolved.nativeType);\n\treturn resolved.nativeType.toUpperCase();\n}\n/**\n* A datetime default is the stored value itself in SQLite, which compares text byte by byte, so it\n* is written as the text the column's codec writes for every row, not as its canonical form.\n*/\nfunction renderDefaultLiteral(value, codecId) {\n\tif (value instanceof Date) return `'${escapeLiteral(encodeSqliteDatetime(value))}'`;\n\tif (typeof value === \"string\" && codecId === \"sqlite/datetime@1\") return `'${escapeLiteral(encodeSqliteDatetime(decodeSqliteDatetime(value)))}'`;\n\tif (typeof value === \"string\") return `'${escapeLiteral(value)}'`;\n\tif (typeof value === \"number\" || typeof value === \"bigint\") return String(value);\n\tif (typeof value === \"boolean\") return value ? \"1\" : \"0\";\n\tif (value === null) return \"NULL\";\n\treturn `'${escapeLiteral(JSON.stringify(value))}'`;\n}\nfunction buildCreateIndexSql(tableName, indexName, columns, unique = false) {\n\treturn `CREATE ${unique ? \"UNIQUE \" : \"\"}INDEX ${quoteIdentifier(indexName)} ON ${quoteIdentifier(tableName)} (${columns.map(quoteIdentifier).join(\", \")})`;\n}\nfunction buildDropIndexSql(indexName) {\n\treturn `DROP INDEX IF EXISTS ${quoteIdentifier(indexName)}`;\n}\nfunction resolveColumnTypeMetadata(column, storageTypes) {\n\tif (!column.typeRef) return column;\n\tconst referencedType = storageTypes[column.typeRef];\n\tif (!referencedType) throw sqliteError(\"CONTRACT.TYPE_UNKNOWN\", `Storage type \"${column.typeRef}\" referenced by column is not defined in storage.types.`, { meta: { typeRef: column.typeRef } });\n\treturn {\n\t\tcodecId: referencedType.codecId,\n\t\tnativeType: referencedType.nativeType,\n\t\ttypeParams: referencedType.typeParams\n\t};\n}\n//#endregion\n//#region src/core/migrations/operations/shared.ts\nfunction step(description, sql, params) {\n\treturn {\n\t\tdescription,\n\t\tsql,\n\t\t...ifDefined(\"params\", params)\n\t};\n}\n/** The DDL default of a contract default: `autoincrement()` is written as part of the column's type instead. */\nfunction sqliteDefaultToDdlColumnDefault(columnDefault) {\n\tif (!columnDefault) return void 0;\n\tswitch (columnDefault.kind) {\n\t\tcase \"literal\": return new LiteralColumnDefault(columnDefault.value);\n\t\tcase \"function\":\n\t\t\tif (columnDefault.expression === \"autoincrement()\") return void 0;\n\t\t\treturn new FunctionColumnDefault(columnDefault.expression);\n\t\tdefault: {\n\t\t\tconst exhaustive = columnDefault;\n\t\t\treturn assertNever(exhaustive, `sqliteDefaultToDdlColumnDefault: unhandled kind \"${blindCast(exhaustive).kind}\"`);\n\t\t}\n\t}\n}\n/**\n* A column spec an earlier version wrote carries its default as SQL text in `defaultSql`, empty when it has none.\n*/\nfunction refuseEarlierColumnSpecs(operation, tableName, columns) {\n\tconst earlier = columns.find((column) => Object.hasOwn(column, \"defaultSql\"));\n\tif (earlier === void 0) return;\n\tthrow errorMigrationOperationOptionRemoved({\n\t\toperation,\n\t\toption: \"defaultSql\",\n\t\tsubject: `column ${JSON.stringify(earlier.name)} of table ${JSON.stringify(tableName)}`,\n\t\trewrite: \"Write the column's default as `default: { kind: 'literal', value }` or `default: { kind: 'function', expression }`, with the column's `codecRef`, in place of `defaultSql`, and delete an empty `defaultSql`.\",\n\t\tupgradeEntry: \"migration-ts-column-defaults\"\n\t});\n}\n/** The `DEFAULT …` clause the adapter writes for a column spec, `''` when it has none. */\nfunction renderSpecDefault(column, tableName, lowerer) {\n\tconst ddlDefault = column.inlineAutoincrementPrimaryKey ? void 0 : sqliteDefaultToDdlColumnDefault(column.default);\n\treturn lowerer.renderColumnDefault(new DdlColumn({\n\t\tname: column.name,\n\t\ttype: column.typeSql,\n\t\t...ifDefined(\"default\", ddlDefault),\n\t\t...ifDefined(\"codecRef\", column.codecRef)\n\t}), tableName);\n}\n/**\n* Renders a single column's inline DDL fragment within a `CREATE TABLE`\n* statement. Honours the `inlineAutoincrementPrimaryKey` flag — SQLite\n* treats `INTEGER PRIMARY KEY AUTOINCREMENT` as a special form that aliases\n* `rowid`, and the column must not carry a `DEFAULT` or repeat `NOT NULL`.\n*/\nfunction renderColumnDefinition(column, defaultClause) {\n\tconst parts = [quoteIdentifier(column.name), column.typeSql];\n\tif (column.inlineAutoincrementPrimaryKey) parts.push(\"PRIMARY KEY AUTOINCREMENT\");\n\telse {\n\t\tif (defaultClause) parts.push(defaultClause);\n\t\tif (!column.nullable) parts.push(\"NOT NULL\");\n\t}\n\treturn parts.join(\" \");\n}\n/**\n* Renders an inline FOREIGN KEY constraint clause for a `CREATE TABLE`\n* body. Every `SqliteForeignKeySpec` is constraint-bearing by construction\n* (`tableSpecFromNode` only ever builds specs from schema-IR FK nodes, which\n* are themselves constraint-only — a non-constraint FK contributes no node).\n*/\nfunction renderForeignKeyClause(fk) {\n\tlet sql = `${fk.name ? `CONSTRAINT ${quoteIdentifier(fk.name)} ` : \"\"}FOREIGN KEY (${fk.columns.map(quoteIdentifier).join(\", \")}) REFERENCES ${quoteIdentifier(fk.references.table)} (${fk.references.columns.map(quoteIdentifier).join(\", \")})`;\n\tif (fk.onDelete !== void 0) sql += ` ON DELETE ${REFERENTIAL_ACTION_SQL[fk.onDelete]}`;\n\tif (fk.onUpdate !== void 0) sql += ` ON UPDATE ${REFERENTIAL_ACTION_SQL[fk.onUpdate]}`;\n\treturn sql;\n}\n//#endregion\n//#region src/core/migrations/operations/columns.ts\nfunction addColumnExecuteSql(tableName, column, defaultClause) {\n\treturn [\n\t\t`ALTER TABLE ${quoteIdentifier(tableName)}`,\n\t\t`ADD COLUMN ${quoteIdentifier(column.name)} ${column.typeSql}`,\n\t\tdefaultClause,\n\t\tcolumn.nullable ? \"\" : \"NOT NULL\"\n\t].filter(Boolean).join(\" \");\n}\nfunction dropColumnExecuteSql(tableName, columnName) {\n\treturn `ALTER TABLE ${quoteIdentifier(tableName)} DROP COLUMN ${quoteIdentifier(columnName)}`;\n}\nasync function addColumn(tableName, column, lowerer) {\n\trefuseEarlierColumnSpecs(\"addColumn\", tableName, [column]);\n\tconst defaultClause = await renderSpecDefault(column, tableName, lowerer);\n\tconst checks = columnExistsAst(tableName, column.name);\n\tconst absent = await lowerer.lowerToExecuteRequest(checks.columnAbsent());\n\tconst present = await lowerer.lowerToExecuteRequest(checks.columnPresent());\n\treturn {\n\t\tid: `column.${tableName}.${column.name}`,\n\t\tlabel: `Add column ${column.name} on ${tableName}`,\n\t\tsummary: `Adds column ${column.name} on ${tableName}`,\n\t\toperationClass: \"additive\",\n\t\ttarget: {\n\t\t\tid: \"sqlite\",\n\t\t\tdetails: buildTargetDetails(\"column\", column.name, tableName)\n\t\t},\n\t\tprecheck: [step(`ensure column \"${column.name}\" is missing`, absent.sql, absent.params)],\n\t\texecute: [step(`add column \"${column.name}\"`, addColumnExecuteSql(tableName, column, defaultClause))],\n\t\tpostcheck: [step(`verify column \"${column.name}\" exists`, present.sql, present.params)]\n\t};\n}\n//#endregion\n//#region src/core/migrations/operations/tables.ts\nasync function tableExistsSteps(lowerer, tableName) {\n\tconst checks = tableExistsAst(tableName);\n\treturn {\n\t\tpresent: await lowerer.lowerToExecuteRequest(checks.tablePresent()),\n\t\tabsent: await lowerer.lowerToExecuteRequest(checks.tableAbsent())\n\t};\n}\n/**\n* Renders the body of a `CREATE TABLE <name> ( … )` statement from a flat\n* `SqliteTableSpec`. SQLite's `INTEGER PRIMARY KEY AUTOINCREMENT` form is\n* inline on the column; the table-level PRIMARY KEY clause is emitted only\n* when no column carries `inlineAutoincrementPrimaryKey`.\n*/\nfunction renderCreateTableSql(tableName, spec, defaultClauses) {\n\tconst columnDefs = spec.columns.map((column, index) => renderColumnDefinition(column, defaultClauses[index] ?? \"\"));\n\tconst constraintDefs = [];\n\tconst hasInlinePk = spec.columns.some((c) => c.inlineAutoincrementPrimaryKey);\n\tif (spec.primaryKey && !hasInlinePk) constraintDefs.push(`PRIMARY KEY (${spec.primaryKey.columns.map(quoteIdentifier).join(\", \")})`);\n\tfor (const u of spec.uniques ?? []) {\n\t\tconst name = u.name ? `CONSTRAINT ${quoteIdentifier(u.name)} ` : \"\";\n\t\tconstraintDefs.push(`${name}UNIQUE (${u.columns.map(quoteIdentifier).join(\", \")})`);\n\t}\n\tfor (const fk of spec.foreignKeys ?? []) {\n\t\tconst clause = renderForeignKeyClause(fk);\n\t\tif (clause) constraintDefs.push(clause);\n\t}\n\tconst allDefs = [...columnDefs, ...constraintDefs];\n\treturn `CREATE TABLE ${quoteIdentifier(tableName)} (\\n ${allDefs.join(\",\\n \")}\\n)`;\n}\nasync function recreateTable(args, lowerer) {\n\tconst { tableName, contractTable, schemaColumnNames, indexes, summary, postchecks, operationClass } = args;\n\trefuseEarlierColumnSpecs(\"recreateTable\", tableName, contractTable.columns);\n\tconst tempName = `_prisma_new_${tableName}`;\n\tconst liveSet = new Set(schemaColumnNames);\n\tconst sharedColumns = contractTable.columns.filter((c) => liveSet.has(c.name)).map((c) => c.name);\n\tconst columnList = sharedColumns.map(quoteIdentifier).join(\", \");\n\tconst indexStatements = indexes.map((idx) => ({\n\t\tdescription: `recreate index \"${idx.name}\" on \"${tableName}\"`,\n\t\tsql: buildCreateIndexSql(tableName, idx.name, idx.columns)\n\t}));\n\tconst copyStep = sharedColumns.length > 0 ? [step(`copy data from \"${tableName}\" to \"${tempName}\"`, `INSERT INTO ${quoteIdentifier(tempName)} (${columnList}) SELECT ${columnList} FROM ${quoteIdentifier(tableName)}`)] : [];\n\tconst defaultClauses = await renderSpecDefaults(contractTable, tableName, lowerer);\n\tconst clauseByColumn = new Map(contractTable.columns.map((column, index) => [column.name, defaultClauses[index] ?? \"\"]));\n\tconst tableSteps = await tableExistsSteps(lowerer, tableName);\n\tconst tempSteps = await tableExistsSteps(lowerer, tempName);\n\treturn {\n\t\tid: `recreateTable.${tableName}`,\n\t\tlabel: `Recreate table ${tableName}`,\n\t\tsummary,\n\t\toperationClass,\n\t\ttarget: {\n\t\t\tid: \"sqlite\",\n\t\t\tdetails: buildTargetDetails(\"table\", tableName)\n\t\t},\n\t\tprecheck: [step(`ensure table \"${tableName}\" exists`, tableSteps.present.sql, tableSteps.present.params), step(`ensure temp table \"${tempName}\" does not exist`, tempSteps.absent.sql, tempSteps.absent.params)],\n\t\texecute: [\n\t\t\tstep(`create new table \"${tempName}\" with desired schema`, renderCreateTableSql(tempName, contractTable, defaultClauses)),\n\t\t\t...copyStep,\n\t\t\tstep(`drop old table \"${tableName}\"`, `DROP TABLE ${quoteIdentifier(tableName)}`),\n\t\t\tstep(`rename \"${tempName}\" to \"${tableName}\"`, `ALTER TABLE ${quoteIdentifier(tempName)} RENAME TO ${quoteIdentifier(tableName)}`),\n\t\t\t...indexStatements\n\t\t],\n\t\tpostcheck: [\n\t\t\tstep(`verify table \"${tableName}\" exists`, tableSteps.present.sql, tableSteps.present.params),\n\t\t\tstep(`verify temp table \"${tempName}\" is gone`, tempSteps.absent.sql, tempSteps.absent.params),\n\t\t\t...postchecks.flatMap((check) => \"sql\" in check ? [check] : defaultPostcheck(tableName, check, clauseByColumn.get(check.columnDefault)))\n\t\t]\n\t};\n}\nfunction renderSpecDefaults(spec, tableName, lowerer) {\n\treturn Promise.all(spec.columns.map((column) => renderSpecDefault(column, tableName, lowerer)));\n}\n/**\n* Checks the column's default is the text of its `DEFAULT …` clause. SQLite's\n* `pragma_table_info.dflt_value` strips the outer parentheses of an expression\n* default, so `(datetime('now'))` is stored as `datetime('now')`; they are\n* stripped here too.\n*/\nfunction defaultPostcheck(tableName, check, clause) {\n\tif (clause === void 0 || !clause.startsWith(\"DEFAULT \")) return [];\n\tconst expectedRaw = stripOuterParens(clause.slice(8));\n\treturn [{\n\t\tdescription: check.description,\n\t\tsql: `SELECT COUNT(*) > 0 FROM pragma_table_info('${escapeLiteral(tableName)}') WHERE name = '${escapeLiteral(check.columnDefault)}' AND dflt_value = '${escapeLiteral(expectedRaw)}'`\n\t}];\n}\n/**\n* Build a one-line summary of a recreate-table operation from the schema-diff\n* issues that triggered it. Lives next to `recreateTable` so the planner\n* (which has the issues) can produce the same description the factory\n* used to build inline. Keeping the formatting target-side keeps\n* `RecreateTableCall` issue-free at the IR layer. `SchemaDiffIssue` carries\n* no rendered message, so this renders one from each issue's path.\n*/\nfunction buildRecreateSummary(tableName, issues) {\n\treturn `Recreates table ${tableName} to apply schema changes: ${issues.map((i) => i.path.join(\"/\")).join(\"; \")}`;\n}\nfunction nodeKindOf(issue) {\n\tconst node = issue.expected ?? issue.actual;\n\tif (node === void 0) return void 0;\n\treturn blindCast(node).nodeKind;\n}\n/** Mirrors `SqlColumnIR.isEqualTo`'s type comparison, isolated so a `not-equal` column issue's postcheck can target type drift and nullability drift independently. */\nfunction columnTypeChanged(expected, actual) {\n\tif (expected.resolvedNativeType !== void 0 && actual.resolvedNativeType !== void 0) return expected.resolvedNativeType !== actual.resolvedNativeType;\n\treturn expected.nativeType !== actual.nativeType || Boolean(expected.many) !== Boolean(actual.many);\n}\n/**\n* Returns the columns the contract expects as the table's primary key. Picks\n* up SQLite's inline `INTEGER PRIMARY KEY AUTOINCREMENT` form when no\n* explicit `primaryKey` clause is set on the spec.\n*/\nfunction expectedPrimaryKeyColumns(spec) {\n\tif (spec.primaryKey) return spec.primaryKey.columns;\n\tconst inlinePk = spec.columns.find((c) => c.inlineAutoincrementPrimaryKey);\n\treturn inlinePk ? [inlinePk.name] : [];\n}\nfunction quoteSqlList(values) {\n\treturn values.map((v) => `'${escapeLiteral(v)}'`).join(\", \");\n}\nfunction columnNameFromNode(issue) {\n\tconst node = issue.expected ?? issue.actual;\n\tif (node === void 0) return void 0;\n\treturn blindCast(node).name;\n}\n/**\n* A column-default issue's own node has no back-reference to its owning\n* column — it's a transient child built by `SqlColumnIR.children()`. The\n* column's id (`column:<name>`) is always the diff path's second-to-last\n* segment for a default issue (`[..., tableId, columnId, 'default']`), so\n* the name is recovered from the path rather than the node.\n*/\nfunction columnNameFromDefaultIssuePath(issue) {\n\tconst columnId = issue.path[issue.path.length - 2];\n\tif (columnId === void 0) return void 0;\n\treturn columnId.startsWith(\"column:\") ? columnId.slice(7) : columnId;\n}\n/**\n* Per-issue postchecks verifying the recreated table's shape against the\n* expected spec. Column-level issues (`sql-column` `not-equal`,\n* `sql-column-default` any reason) emit one targeted check each;\n* constraint-level issues (`sql-primary-key`, `sql-unique`, `sql-foreign-key`,\n* any reason) emit one `pragma_*`-driven check per declared constraint in the\n* expected spec, so a recreated table with the right columns but the wrong\n* PK / unique / FK shape fails the postcheck instead of passing silently.\n* Exported so the planner can pre-build the list at construction time and\n* `RecreateTableCall` doesn't have to carry `SchemaDiffIssue` objects through\n* to render time.\n*/\nfunction buildRecreatePostchecks(tableName, issues, spec) {\n\tconst checks = [];\n\tconst t = escapeLiteral(tableName);\n\tconst byName = new Map(spec.columns.map((c) => [c.name, c]));\n\tlet hasPkIssue = false;\n\tlet hasUniqueIssue = false;\n\tlet hasFkIssue = false;\n\tfor (const issue of issues) {\n\t\tconst nodeKind = nodeKindOf(issue);\n\t\tif (nodeKind === RelationalSchemaNodeKind.column && issueOutcome(issue) === \"not-equal\") {\n\t\t\tconst columnName = columnNameFromNode(issue);\n\t\t\tif (columnName === void 0) continue;\n\t\t\tconst c = escapeLiteral(columnName);\n\t\t\tconst expected = blindCast(issue.expected);\n\t\t\tconst actual = blindCast(issue.actual);\n\t\t\tif (expected.nullable !== actual.nullable) checks.push({\n\t\t\t\tdescription: `verify \"${columnName}\" nullability on \"${tableName}\"`,\n\t\t\t\tsql: `SELECT COUNT(*) > 0 FROM pragma_table_info('${t}') WHERE name = '${c}' AND \"notnull\" = ${expected.nullable ? 0 : 1}`\n\t\t\t});\n\t\t\tif (columnTypeChanged(expected, actual)) {\n\t\t\t\tconst colSpec = byName.get(columnName);\n\t\t\t\tif (colSpec) checks.push({\n\t\t\t\t\tdescription: `verify \"${columnName}\" type on \"${tableName}\"`,\n\t\t\t\t\tsql: `SELECT COUNT(*) > 0 FROM pragma_table_info('${t}') WHERE name = '${c}' AND LOWER(type) = '${escapeLiteral(colSpec.typeSql.toLowerCase())}'`\n\t\t\t\t});\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (nodeKind === RelationalSchemaNodeKind.columnDefault) {\n\t\t\tconst columnName = columnNameFromDefaultIssuePath(issue);\n\t\t\tif (columnName === void 0) continue;\n\t\t\tconst c = escapeLiteral(columnName);\n\t\t\tif (issueOutcome(issue) === \"not-expected\") {\n\t\t\t\tchecks.push({\n\t\t\t\t\tdescription: `verify \"${columnName}\" has no default on \"${tableName}\"`,\n\t\t\t\t\tsql: `SELECT COUNT(*) > 0 FROM pragma_table_info('${t}') WHERE name = '${c}' AND dflt_value IS NULL`\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (byName.get(columnName)?.default !== void 0) checks.push({\n\t\t\t\tdescription: `verify \"${columnName}\" default on \"${tableName}\"`,\n\t\t\t\tcolumnDefault: columnName\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (nodeKind === RelationalSchemaNodeKind.primaryKey) hasPkIssue = true;\n\t\tif (nodeKind === RelationalSchemaNodeKind.unique) hasUniqueIssue = true;\n\t\tif (nodeKind === RelationalSchemaNodeKind.foreignKey) hasFkIssue = true;\n\t}\n\tif (hasPkIssue) {\n\t\tconst pkColumns = expectedPrimaryKeyColumns(spec);\n\t\tconst colCount = pkColumns.length;\n\t\tif (colCount === 0) checks.push({\n\t\t\tdescription: `verify \"${tableName}\" has no primary key`,\n\t\t\tsql: `SELECT (SELECT COUNT(*) FROM pragma_table_info('${t}') WHERE pk > 0) = 0`\n\t\t});\n\t\telse checks.push({\n\t\t\tdescription: `verify primary key on \"${tableName}\"`,\n\t\t\tsql: `SELECT (SELECT COUNT(*) FROM pragma_table_info('${t}') WHERE pk > 0) = ${colCount} AND (SELECT COUNT(*) FROM pragma_table_info('${t}') WHERE pk > 0 AND name IN (${quoteSqlList(pkColumns)})) = ${colCount}`\n\t\t});\n\t}\n\tif (hasUniqueIssue) for (const u of spec.uniques ?? []) {\n\t\tconst colCount = u.columns.length;\n\t\tconst description = u.name ? `verify unique constraint \"${u.name}\" on \"${tableName}\"` : `verify unique constraint (${u.columns.join(\", \")}) on \"${tableName}\"`;\n\t\tchecks.push({\n\t\t\tdescription,\n\t\t\tsql: `SELECT EXISTS (SELECT 1 FROM pragma_index_list('${t}') l WHERE l.\"unique\" = 1 AND (SELECT COUNT(*) FROM pragma_index_info(l.name)) = ${colCount} AND (SELECT COUNT(*) FROM pragma_index_info(l.name) WHERE name IN (${quoteSqlList(u.columns)})) = ${colCount})`\n\t\t});\n\t}\n\tif (hasFkIssue) for (const fk of spec.foreignKeys ?? []) {\n\t\tconst refTable = escapeLiteral(fk.references.table);\n\t\tconst colCount = fk.columns.length;\n\t\tconst tuples = fk.columns.map((from, i) => {\n\t\t\tconst to = fk.references.columns[i] ?? from;\n\t\t\treturn `('${escapeLiteral(from)}', '${escapeLiteral(to)}')`;\n\t\t}).join(\", \");\n\t\tconst description = `verify foreign key (${fk.columns.join(\", \")}) → ${fk.references.table}(${fk.references.columns.join(\", \")}) on \"${tableName}\"`;\n\t\tchecks.push({\n\t\t\tdescription,\n\t\t\tsql: `SELECT EXISTS (SELECT 1 FROM pragma_foreign_key_list('${t}') f WHERE f.\"table\" = '${refTable}' GROUP BY f.id HAVING COUNT(*) = ${colCount} AND SUM(CASE WHEN (f.\"from\", f.\"to\") IN (${tuples}) THEN 1 ELSE 0 END) = ${colCount})`\n\t\t});\n\t}\n\treturn checks;\n}\n//#endregion\n//#region src/core/migrations/op-factory-call.ts\n/**\n* SQLite migration IR: one concrete `*Call` class per pure factory under\n* `operations/`, plus a shared `SqliteOpFactoryCallNode` abstract base.\n*\n* Each call class carries fully-resolved literal arguments. `CreateTableCall`\n* holds structured `DdlColumn[]` + `DdlTableConstraint[]` and lowers via the\n* adapter's DDL path; other call classes carry flat SQL fragments. Codec /\n* `typeRef` / default expansion happens upstream in the issue-planner /\n* strategies, mirroring the Postgres `ColumnSpec` pattern.\n*/\nconst TARGET_MIGRATION_MODULE = \"@internal/sqlite/migration\";\nvar SqliteOpFactoryCallNode = class extends TsExpression {\n\timportRequirements() {\n\t\treturn [{\n\t\t\tmoduleSpecifier: TARGET_MIGRATION_MODULE,\n\t\t\tsymbol: this.factoryName\n\t\t}];\n\t}\n\tfreeze() {\n\t\tObject.freeze(this);\n\t}\n};\nfunction renderDdlColumnDefault(def) {\n\tif (!def) return \"\";\n\tif (def.kind === \"literal\") return `lit(${jsonToTsSource(def.value)})`;\n\treturn `fn(${jsonToTsSource(def.expression)})`;\n}\nfunction renderDdlColumnAsTsCall(column) {\n\tconst opts = [];\n\tif (column.notNull) opts.push(\"notNull: true\");\n\tif (column.primaryKey) opts.push(\"primaryKey: true\");\n\tif (column.default) opts.push(`default: ${renderDdlColumnDefault(column.default)}`);\n\tif (column.codecRef) opts.push(`codecRef: ${jsonToTsSource(column.codecRef)}`);\n\tconst optsStr = opts.length > 0 ? `, { ${opts.join(\", \")} }` : \"\";\n\treturn `col(${jsonToTsSource(column.name)}, ${jsonToTsSource(column.type)}${optsStr})`;\n}\nfunction renderDdlConstraintAsTsCall(constraint) {\n\tswitch (constraint.kind) {\n\t\tcase \"primary-key\": {\n\t\t\tconst nameOpt = constraint.name ? `, { name: ${jsonToTsSource(constraint.name)} }` : \"\";\n\t\t\treturn `primaryKey(${jsonToTsSource(constraint.columns)}${nameOpt})`;\n\t\t}\n\t\tcase \"foreign-key\": {\n\t\t\tconst opts = [];\n\t\t\tif (constraint.name) opts.push(`name: ${jsonToTsSource(constraint.name)}`);\n\t\t\tif (constraint.onDelete) opts.push(`onDelete: ${jsonToTsSource(constraint.onDelete)}`);\n\t\t\tif (constraint.onUpdate) opts.push(`onUpdate: ${jsonToTsSource(constraint.onUpdate)}`);\n\t\t\tconst optsStr = opts.length > 0 ? `, { ${opts.join(\", \")} }` : \"\";\n\t\t\treturn `foreignKey(${jsonToTsSource(constraint.columns)}, ${jsonToTsSource(constraint.refTable)}, ${jsonToTsSource(constraint.refColumns)}${optsStr})`;\n\t\t}\n\t\tcase \"unique\": {\n\t\t\tconst nameOpt = constraint.name ? `, { name: ${jsonToTsSource(constraint.name)} }` : \"\";\n\t\t\treturn `unique(${jsonToTsSource(constraint.columns)}${nameOpt})`;\n\t\t}\n\t\tcase \"check-expression\": throw sqliteError(\"CONTRACT.CONSTRAINT_INVALID\", `The SQLite target does not support CHECK constraints (constraint \"${constraint.name}\"). The \"checkConstraint\" capability is Postgres-only — remove the \"@@check\" / \"check()\" declaration, or target Postgres.`, { meta: { constraintName: constraint.name } });\n\t}\n}\nfunction constraintImportSymbols(constraints) {\n\tif (!constraints || constraints.length === 0) return [];\n\tconst symbols = /* @__PURE__ */ new Set();\n\tfor (const c of constraints) if (c.kind === \"primary-key\") symbols.add(\"primaryKey\");\n\telse if (c.kind === \"foreign-key\") symbols.add(\"foreignKey\");\n\telse if (c.kind === \"unique\") symbols.add(\"unique\");\n\treturn [...symbols];\n}\nfunction defaultImportSymbols(columns) {\n\tconst symbols = /* @__PURE__ */ new Set();\n\tfor (const col of columns) if (col.default?.kind === \"literal\") symbols.add(\"lit\");\n\telse if (col.default?.kind === \"function\") symbols.add(\"fn\");\n\treturn [...symbols];\n}\nvar CreateTableCall = class extends SqliteOpFactoryCallNode {\n\tfactoryName = \"createTable\";\n\toperationClass = \"additive\";\n\ttableName;\n\tcolumns;\n\tconstraints;\n\tlabel;\n\tconstructor(tableName, columns, constraints) {\n\t\tsuper();\n\t\tthis.tableName = tableName;\n\t\tthis.columns = Object.freeze([...columns]);\n\t\tthis.constraints = constraints ? Object.freeze([...constraints]) : void 0;\n\t\tthis.label = `Create table ${tableName}`;\n\t\tthis.freeze();\n\t}\n\tasync toOp(lowerer) {\n\t\tif (lowerer === void 0) throw sqliteError(\"MIGRATION.SQLITE_CONTROL_STACK_MISSING\", `CreateTableCall.toOp: a DDL lowerer is required on the SQLite planner path (table \"${this.tableName}\"). Pass the control adapter to createSqliteMigrationPlanner.`, { meta: {\n\t\t\tfactory: this.factoryName,\n\t\t\ttableName: this.tableName\n\t\t} });\n\t\tconst ddlNode = createTable({\n\t\t\ttable: this.tableName,\n\t\t\tcolumns: this.columns,\n\t\t\t...ifDefined(\"constraints\", this.constraints)\n\t\t});\n\t\tconst statement = await lowerer.lowerToExecuteRequest(ddlNode);\n\t\tconst tableName = this.tableName;\n\t\tconst tableChecks = tableExistsAst(tableName);\n\t\tconst absent = await lowerer.lowerToExecuteRequest(tableChecks.tableAbsent());\n\t\tconst present = await lowerer.lowerToExecuteRequest(tableChecks.tablePresent());\n\t\treturn {\n\t\t\tid: `table.${tableName}`,\n\t\t\tlabel: `Create table ${tableName}`,\n\t\t\tsummary: `Creates table ${tableName} with required columns`,\n\t\t\toperationClass: \"additive\",\n\t\t\ttarget: {\n\t\t\t\tid: \"sqlite\",\n\t\t\t\tdetails: buildTargetDetails(\"table\", tableName)\n\t\t\t},\n\t\t\tprecheck: [step(`ensure table \"${tableName}\" does not exist`, absent.sql, absent.params)],\n\t\t\texecute: [{\n\t\t\t\tdescription: `create table \"${tableName}\"`,\n\t\t\t\tsql: statement.sql,\n\t\t\t\tparams: statement.params ?? []\n\t\t\t}],\n\t\t\tpostcheck: [step(`verify table \"${tableName}\" exists`, present.sql, present.params)]\n\t\t};\n\t}\n\trenderTypeScript() {\n\t\tconst columnsList = this.columns.map(renderDdlColumnAsTsCall).join(\", \");\n\t\tconst constraintsList = this.constraints ? this.constraints.map(renderDdlConstraintAsTsCall).join(\", \") : void 0;\n\t\tconst opts = [];\n\t\topts.push(`table: ${jsonToTsSource(this.tableName)}`);\n\t\topts.push(`columns: [${columnsList}]`);\n\t\tif (constraintsList) opts.push(`constraints: [${constraintsList}]`);\n\t\treturn `this.createTable({ ${opts.join(\", \")} })`;\n\t}\n\timportRequirements() {\n\t\tconst req = [];\n\t\tif (this.columns.length > 0) {\n\t\t\treq.push({\n\t\t\t\tmoduleSpecifier: TARGET_MIGRATION_MODULE,\n\t\t\t\tsymbol: \"col\"\n\t\t\t});\n\t\t\tfor (const sym of defaultImportSymbols(this.columns)) req.push({\n\t\t\t\tmoduleSpecifier: TARGET_MIGRATION_MODULE,\n\t\t\t\tsymbol: sym\n\t\t\t});\n\t\t}\n\t\tfor (const sym of constraintImportSymbols(this.constraints)) req.push({\n\t\t\tmoduleSpecifier: TARGET_MIGRATION_MODULE,\n\t\t\tsymbol: sym\n\t\t});\n\t\treturn req;\n\t}\n};\nvar DropTableCall = class extends SqliteOpFactoryCallNode {\n\tfactoryName = \"dropTable\";\n\toperationClass = \"destructive\";\n\ttableName;\n\tlabel;\n\tconstructor(tableName) {\n\t\tsuper();\n\t\tthis.tableName = tableName;\n\t\tthis.label = `Drop table ${tableName}`;\n\t\tthis.freeze();\n\t}\n\tasync toOp(lowerer) {\n\t\tif (lowerer === void 0) throw sqliteError(\"MIGRATION.SQLITE_CONTROL_STACK_MISSING\", `DropTableCall.toOp: a lowerer is required on the SQLite planner path (table \"${this.tableName}\"). Pass the control adapter to createSqliteMigrationPlanner.`, { meta: {\n\t\t\tfactory: this.factoryName,\n\t\t\ttableName: this.tableName\n\t\t} });\n\t\tconst checks = tableExistsAst(this.tableName);\n\t\tconst present = await lowerer.lowerToExecuteRequest(checks.tablePresent());\n\t\tconst absent = await lowerer.lowerToExecuteRequest(checks.tableAbsent());\n\t\treturn {\n\t\t\tid: `dropTable.${this.tableName}`,\n\t\t\tlabel: `Drop table ${this.tableName}`,\n\t\t\tsummary: `Drops table ${this.tableName} which is not in the contract`,\n\t\t\toperationClass: \"destructive\",\n\t\t\ttarget: {\n\t\t\t\tid: \"sqlite\",\n\t\t\t\tdetails: buildTargetDetails(\"table\", this.tableName)\n\t\t\t},\n\t\t\tprecheck: [step(`ensure table \"${this.tableName}\" exists`, present.sql, present.params)],\n\t\t\texecute: [step(`drop table \"${this.tableName}\"`, `DROP TABLE ${quoteIdentifier(this.tableName)}`)],\n\t\t\tpostcheck: [step(`verify table \"${this.tableName}\" is gone`, absent.sql, absent.params)]\n\t\t};\n\t}\n\trenderTypeScript() {\n\t\treturn `this.dropTable({ table: ${jsonToTsSource(this.tableName)} })`;\n\t}\n\timportRequirements() {\n\t\treturn [];\n\t}\n};\nvar RecreateTableCall = class extends SqliteOpFactoryCallNode {\n\tfactoryName = \"recreateTable\";\n\toperationClass;\n\ttableName;\n\tcontractTable;\n\tschemaColumnNames;\n\tindexes;\n\tsummary;\n\tpostchecks;\n\tlabel;\n\tconstructor(args) {\n\t\tsuper();\n\t\tthis.tableName = args.tableName;\n\t\tthis.contractTable = args.contractTable;\n\t\tthis.schemaColumnNames = args.schemaColumnNames;\n\t\tthis.indexes = args.indexes;\n\t\tthis.summary = args.summary;\n\t\tthis.postchecks = args.postchecks;\n\t\tthis.operationClass = args.operationClass;\n\t\tthis.label = `Recreate table ${args.tableName}`;\n\t\tthis.freeze();\n\t}\n\tasync toOp(lowerer) {\n\t\tif (lowerer === void 0) throw sqliteError(\"MIGRATION.SQLITE_CONTROL_STACK_MISSING\", `RecreateTableCall.toOp: a lowerer is required on the SQLite planner path (table \"${this.tableName}\"). Pass the control adapter to createSqliteMigrationPlanner.`, { meta: {\n\t\t\tfactory: this.factoryName,\n\t\t\ttableName: this.tableName\n\t\t} });\n\t\treturn recreateTable({\n\t\t\ttableName: this.tableName,\n\t\t\tcontractTable: this.contractTable,\n\t\t\tschemaColumnNames: this.schemaColumnNames,\n\t\t\tindexes: this.indexes,\n\t\t\tsummary: this.summary,\n\t\t\tpostchecks: this.postchecks,\n\t\t\toperationClass: this.operationClass\n\t\t}, lowerer);\n\t}\n\trenderTypeScript() {\n\t\treturn `this.recreateTable(${jsonToTsSource({\n\t\t\ttableName: this.tableName,\n\t\t\tcontractTable: this.contractTable,\n\t\t\tschemaColumnNames: this.schemaColumnNames,\n\t\t\tindexes: this.indexes,\n\t\t\tsummary: this.summary,\n\t\t\tpostchecks: this.postchecks,\n\t\t\toperationClass: this.operationClass\n\t\t})})`;\n\t}\n\timportRequirements() {\n\t\treturn [];\n\t}\n};\nvar AddColumnCall = class extends SqliteOpFactoryCallNode {\n\tfactoryName = \"addColumn\";\n\toperationClass = \"additive\";\n\ttableName;\n\tcolumnName;\n\tcolumn;\n\tlabel;\n\tconstructor(tableName, column) {\n\t\tsuper();\n\t\tthis.tableName = tableName;\n\t\tthis.columnName = column.name;\n\t\tthis.column = column;\n\t\tthis.label = `Add column ${column.name} on ${tableName}`;\n\t\tthis.freeze();\n\t}\n\tasync toOp(lowerer) {\n\t\tif (lowerer === void 0) throw sqliteError(\"MIGRATION.SQLITE_CONTROL_STACK_MISSING\", `AddColumnCall.toOp: a lowerer is required on the SQLite planner path (column \"${this.column.name}\" on table \"${this.tableName}\"). Pass the control adapter to createSqliteMigrationPlanner.`, { meta: {\n\t\t\tfactory: this.factoryName,\n\t\t\ttableName: this.tableName,\n\t\t\tcolumnName: this.column.name\n\t\t} });\n\t\treturn addColumn(this.tableName, this.column, lowerer);\n\t}\n\trenderTypeScript() {\n\t\treturn `this.addColumn({ table: ${jsonToTsSource(this.tableName)}, column: ${jsonToTsSource(this.column)} })`;\n\t}\n\timportRequirements() {\n\t\treturn [];\n\t}\n};\nvar DropColumnCall = class extends SqliteOpFactoryCallNode {\n\tfactoryName = \"dropColumn\";\n\toperationClass = \"destructive\";\n\ttableName;\n\tcolumnName;\n\tlabel;\n\tconstructor(tableName, columnName) {\n\t\tsuper();\n\t\tthis.tableName = tableName;\n\t\tthis.columnName = columnName;\n\t\tthis.label = `Drop column ${columnName} on ${tableName}`;\n\t\tthis.freeze();\n\t}\n\tasync toOp(lowerer) {\n\t\tif (lowerer === void 0) throw sqliteError(\"MIGRATION.SQLITE_CONTROL_STACK_MISSING\", `DropColumnCall.toOp: a lowerer is required on the SQLite planner path (column \"${this.columnName}\" on table \"${this.tableName}\"). Pass the control adapter to createSqliteMigrationPlanner.`, { meta: {\n\t\t\tfactory: this.factoryName,\n\t\t\ttableName: this.tableName,\n\t\t\tcolumnName: this.columnName\n\t\t} });\n\t\tconst checks = columnExistsAst(this.tableName, this.columnName);\n\t\tconst present = await lowerer.lowerToExecuteRequest(checks.columnPresent());\n\t\tconst absent = await lowerer.lowerToExecuteRequest(checks.columnAbsent());\n\t\treturn {\n\t\t\tid: `dropColumn.${this.tableName}.${this.columnName}`,\n\t\t\tlabel: `Drop column ${this.columnName} on ${this.tableName}`,\n\t\t\tsummary: `Drops column ${this.columnName} on ${this.tableName} which is not in the contract`,\n\t\t\toperationClass: \"destructive\",\n\t\t\ttarget: {\n\t\t\t\tid: \"sqlite\",\n\t\t\t\tdetails: buildTargetDetails(\"column\", this.columnName, this.tableName)\n\t\t\t},\n\t\t\tprecheck: [step(`ensure column \"${this.columnName}\" exists on \"${this.tableName}\"`, present.sql, present.params)],\n\t\t\texecute: [step(`drop column \"${this.columnName}\" from \"${this.tableName}\"`, dropColumnExecuteSql(this.tableName, this.columnName))],\n\t\t\tpostcheck: [step(`verify column \"${this.columnName}\" is gone from \"${this.tableName}\"`, absent.sql, absent.params)]\n\t\t};\n\t}\n\trenderTypeScript() {\n\t\treturn `this.dropColumn({ table: ${jsonToTsSource(this.tableName)}, column: ${jsonToTsSource(this.columnName)} })`;\n\t}\n\timportRequirements() {\n\t\treturn [];\n\t}\n};\nvar CreateIndexCall = class extends SqliteOpFactoryCallNode {\n\tfactoryName = \"createIndex\";\n\toperationClass = \"additive\";\n\ttableName;\n\tindexName;\n\tcolumns;\n\tlabel;\n\tconstructor(tableName, indexName, columns) {\n\t\tsuper();\n\t\tthis.tableName = tableName;\n\t\tthis.indexName = indexName;\n\t\tthis.columns = columns;\n\t\tthis.label = `Create index ${indexName} on ${tableName}`;\n\t\tthis.freeze();\n\t}\n\tasync toOp(lowerer) {\n\t\tif (lowerer === void 0) throw sqliteError(\"MIGRATION.SQLITE_CONTROL_STACK_MISSING\", `CreateIndexCall.toOp: a lowerer is required on the SQLite planner path (index \"${this.indexName}\" on table \"${this.tableName}\"). Pass the control adapter to createSqliteMigrationPlanner.`, { meta: {\n\t\t\tfactory: this.factoryName,\n\t\t\ttableName: this.tableName,\n\t\t\tindexName: this.indexName\n\t\t} });\n\t\tconst checks = indexExistsAst(this.indexName);\n\t\tconst absent = await lowerer.lowerToExecuteRequest(checks.indexAbsent());\n\t\tconst present = await lowerer.lowerToExecuteRequest(checks.indexPresent());\n\t\treturn {\n\t\t\tid: `index.${this.tableName}.${this.indexName}`,\n\t\t\tlabel: `Create index ${this.indexName} on ${this.tableName}`,\n\t\t\tsummary: `Creates index ${this.indexName} on ${this.tableName}`,\n\t\t\toperationClass: \"additive\",\n\t\t\ttarget: {\n\t\t\t\tid: \"sqlite\",\n\t\t\t\tdetails: buildTargetDetails(\"index\", this.indexName, this.tableName)\n\t\t\t},\n\t\t\tprecheck: [step(`ensure index \"${this.indexName}\" is missing`, absent.sql, absent.params)],\n\t\t\texecute: [step(`create index \"${this.indexName}\"`, buildCreateIndexSql(this.tableName, this.indexName, this.columns))],\n\t\t\tpostcheck: [step(`verify index \"${this.indexName}\" exists`, present.sql, present.params)]\n\t\t};\n\t}\n\trenderTypeScript() {\n\t\treturn `this.createIndex({ table: ${jsonToTsSource(this.tableName)}, index: ${jsonToTsSource(this.indexName)}, columns: ${jsonToTsSource(this.columns)} })`;\n\t}\n\timportRequirements() {\n\t\treturn [];\n\t}\n};\nvar DropIndexCall = class extends SqliteOpFactoryCallNode {\n\tfactoryName = \"dropIndex\";\n\toperationClass = \"destructive\";\n\ttableName;\n\tindexName;\n\tlabel;\n\tconstructor(tableName, indexName) {\n\t\tsuper();\n\t\tthis.tableName = tableName;\n\t\tthis.indexName = indexName;\n\t\tthis.label = `Drop index ${indexName} on ${tableName}`;\n\t\tthis.freeze();\n\t}\n\tasync toOp(lowerer) {\n\t\tif (lowerer === void 0) throw sqliteError(\"MIGRATION.SQLITE_CONTROL_STACK_MISSING\", `DropIndexCall.toOp: a lowerer is required on the SQLite planner path (index \"${this.indexName}\" on table \"${this.tableName}\"). Pass the control adapter to createSqliteMigrationPlanner.`, { meta: {\n\t\t\tfactory: this.factoryName,\n\t\t\ttableName: this.tableName,\n\t\t\tindexName: this.indexName\n\t\t} });\n\t\tconst checks = indexExistsAst(this.indexName);\n\t\tconst present = await lowerer.lowerToExecuteRequest(checks.indexPresent());\n\t\tconst absent = await lowerer.lowerToExecuteRequest(checks.indexAbsent());\n\t\treturn {\n\t\t\tid: `dropIndex.${this.tableName}.${this.indexName}`,\n\t\t\tlabel: `Drop index ${this.indexName} on ${this.tableName}`,\n\t\t\tsummary: `Drops index ${this.indexName} on ${this.tableName} which is not in the contract`,\n\t\t\toperationClass: \"destructive\",\n\t\t\ttarget: {\n\t\t\t\tid: \"sqlite\",\n\t\t\t\tdetails: buildTargetDetails(\"index\", this.indexName, this.tableName)\n\t\t\t},\n\t\t\tprecheck: [step(`ensure index \"${this.indexName}\" exists`, present.sql, present.params)],\n\t\t\texecute: [step(`drop index \"${this.indexName}\"`, buildDropIndexSql(this.indexName))],\n\t\t\tpostcheck: [step(`verify index \"${this.indexName}\" is gone`, absent.sql, absent.params)]\n\t\t};\n\t}\n\trenderTypeScript() {\n\t\treturn `this.dropIndex({ table: ${jsonToTsSource(this.tableName)}, index: ${jsonToTsSource(this.indexName)} })`;\n\t}\n\timportRequirements() {\n\t\treturn [];\n\t}\n};\n/**\n* A planner-generated data-transform stub. The current default strategy\n* (`nullabilityTighteningBackfillStrategy`) emits one of these with a\n* backfill-flavored `id`/`label` when the policy allows `'data'` and the\n* contract tightens a column's nullability, but the op itself is generic —\n* any future strategy that needs a placeholder data step can construct one\n* with its own id/label.\n*\n* `toOp()` always throws `MIGRATION.UNFILLED_PLACEHOLDER`: the planner cannot lower a stubbed\n* transform to a runtime op — the user must edit the rendered\n* `migration.ts` and re-emit.\n*/\nvar DataTransformCall = class extends SqliteOpFactoryCallNode {\n\tfactoryName = \"dataTransform\";\n\toperationClass = \"data\";\n\tid;\n\tlabel;\n\ttableName;\n\tcolumnName;\n\tconstructor(id, label, tableName, columnName) {\n\t\tsuper();\n\t\tthis.id = id;\n\t\tthis.label = label;\n\t\tthis.tableName = tableName;\n\t\tthis.columnName = columnName;\n\t\tthis.freeze();\n\t}\n\ttoOp(_lowerer) {\n\t\tthrow errorUnfilledPlaceholder(this.label);\n\t}\n\trenderTypeScript() {\n\t\tconst slot = `${this.tableName}-${this.columnName}-backfill-sql`;\n\t\treturn [\n\t\t\t\"dataTransform({\",\n\t\t\t` id: ${jsonToTsSource(this.id)},`,\n\t\t\t` label: ${jsonToTsSource(this.label)},`,\n\t\t\t` table: ${jsonToTsSource(this.tableName)},`,\n\t\t\t` description: ${jsonToTsSource(`Backfill NULL ${this.columnName} values in ${this.tableName}`)},`,\n\t\t\t` run: () => placeholder(${jsonToTsSource(slot)}),`,\n\t\t\t\"})\"\n\t\t].join(\"\\n\");\n\t}\n\timportRequirements() {\n\t\treturn [{\n\t\t\tmoduleSpecifier: TARGET_MIGRATION_MODULE,\n\t\t\tsymbol: this.factoryName\n\t\t}, {\n\t\t\tmoduleSpecifier: TARGET_MIGRATION_MODULE,\n\t\t\tsymbol: \"placeholder\"\n\t\t}];\n\t}\n};\n/**\n* Laundered pre-built operation. Mirrors Postgres's `RawSqlCall`: wraps an\n* already-materialized `SqlMigrationPlanOperation` (typically produced by a\n* SQL-family helper or a codec lifecycle hook) so the planner can carry it\n* alongside structured call IR. `toOp()` returns the stored op unchanged;\n* `renderTypeScript()` emits `rawSql({...})` with the op serialized as a\n* JSON literal — round-tripping requires every field on the op to be\n* JSON-serializable (no closures).\n*/\nvar RawSqlCall = class extends SqliteOpFactoryCallNode {\n\tfactoryName = \"rawSql\";\n\toperationClass;\n\tlabel;\n\top;\n\tconstructor(op) {\n\t\tsuper();\n\t\tthis.op = op;\n\t\tthis.label = op.label;\n\t\tthis.operationClass = op.operationClass;\n\t\tthis.freeze();\n\t}\n\ttoOp(_lowerer) {\n\t\treturn this.op;\n\t}\n\trenderTypeScript() {\n\t\treturn `rawSql(${jsonToTsSource(this.op)})`;\n\t}\n};\n//#endregion\nexport { DropColumnCall as a, RawSqlCall as c, buildRecreateSummary as d, sqliteDefaultToDdlColumnDefault as f, renderDefaultLiteral as h, DataTransformCall as i, RecreateTableCall as l, buildColumnTypeSql as m, CreateIndexCall as n, DropIndexCall as o, step as p, CreateTableCall as r, DropTableCall as s, AddColumnCall as t, buildRecreatePostchecks as u };\n\n//# sourceMappingURL=op-factory-call-Dv_ma_mw.mjs.map"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as CodecTypes } from "./codec-types-
|
|
1
|
+
import { t as CodecTypes } from "./codec-types-DU8BIZeM-DPqt7bmT.mjs";
|
|
2
2
|
//#region ../../../3-targets/3-targets/sqlite/dist/pack.d.mts
|
|
3
3
|
//#region src/core/descriptor-meta.d.ts
|
|
4
4
|
declare const sqliteTargetDescriptorMetaBase: {
|
|
@@ -110,4 +110,4 @@ declare const sqliteTargetDescriptorMeta: typeof sqliteTargetDescriptorMetaBase
|
|
|
110
110
|
};
|
|
111
111
|
//#endregion
|
|
112
112
|
export { sqliteTargetDescriptorMeta as t };
|
|
113
|
-
//# sourceMappingURL=pack-
|
|
113
|
+
//# sourceMappingURL=pack-YBiEVfBB.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pack-
|
|
1
|
+
{"version":3,"file":"pack-YBiEVfBB.d.mts","names":[],"sources":["../../../../3-targets/3-targets/sqlite/dist/pack.d.mts"],"mappings":";;;cAEc;WACH;WACA;WACA;aACE;eACE;iBACE;iBACA;iBACA;mBACE;mBACA;;;;aAIN;eACE;iBACE;mBACE;mBACA;qBACE;qBACA;qBACA;qBACA;;qBAEA;qBACA;qBACA;qBACA;;mBAEF;qBACE;qBACA;;qBAEA;uBACE;yBACE;yBACA;yBACA;2BACE;6BACE;6BACA;;;;uBAIN;yBACE;yBACA;yBACA;2BACE;6BACE;6BACA;;;;;;;iBAOZ;mBACE;mBACA,QAAQ;qBACN;qBACA;;qBAEA;;qBAEA;uBACE;yBACE;yBACA;;;;;iBAKR;mBACE;mBACA,QAAQ;qBACN;qBACA;;qBAEA;;qBAEA;uBACE;yBACE;yBACA;;uBAEF;yBACE;yBACA;;;;;;;;WAQd;WACA;WACA;WACA;WACA;WACA;WACA,eAAe;;cAEZ,mCAAmC;WACtC,eAAe"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as SqlitePlanTargetDetails } from "./planner-target-details-xR6UfIcz-CMahymzq.mjs";
|
|
2
|
-
import { n as TypeScriptRenderableSqliteMigration } from "./planner-produced-sqlite-migration-
|
|
2
|
+
import { n as TypeScriptRenderableSqliteMigration } from "./planner-produced-sqlite-migration-BQ8vBitH-DlquRDZ4.mjs";
|
|
3
3
|
import { MigrationPlanner, MigrationScaffoldContext, SchemaOwnership } from "@prisma/orm-framework/components/control";
|
|
4
4
|
import { MigrationOperationPolicy, SqlMigrationPlanner, SqlPlannerFailureResult } from "@prisma/orm-family-sql/family/control";
|
|
5
5
|
import { Contract } from "@prisma/orm-framework/contract/types";
|
|
@@ -101,4 +101,4 @@ declare class SqliteMigrationPlanner implements SqlMigrationPlanner<SqlitePlanTa
|
|
|
101
101
|
}
|
|
102
102
|
//#endregion
|
|
103
103
|
export { SqlitePlanResult as n, createSqliteMigrationPlanner as r, SqliteMigrationPlanner as t };
|
|
104
|
-
//# sourceMappingURL=planner-
|
|
104
|
+
//# sourceMappingURL=planner-Bsjn1MTX.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planner-
|
|
1
|
+
{"version":3,"file":"planner-Bsjn1MTX.d.mts","names":[],"sources":["../../../../3-targets/3-targets/sqlite/dist/planner.d.mts"],"mappings":";;;;;;;;;iBAQiB,6BAA6B,SAAS,wBAAwB;KAC1E;WACM;WACA,MAAM;IACb;;;;;;;;;;;;;;;;;cAiBU,kCAAkC,oBAAoB,0BAA0B;;EAE5F,YAAY,SAAS;EACrB,KAAK;aACM;aACA;aACA,QAAQ;;;;;;;;;;;aAWR,cAAc;aACd,qBAAqB,cAAc;;;;;;aAMnC;;;;;aAKA,YAAY;;;;;;aAMZ;MACP;EACJ,eAAe,SAAS,0BAA0B,kBAAkB;UAC5D;UACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA8BA"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import { n as sqliteError } from "./errors-DnR-sMHS-KkMLIP2U.mjs";
|
|
2
|
-
import { n as sqliteResolveDefault } from "./default-normalizer-
|
|
3
|
-
import { a as DropColumnCall, d as
|
|
2
|
+
import { n as sqliteResolveDefault } from "./default-normalizer-Bbo6WzxJ-MgaICRCQ.mjs";
|
|
3
|
+
import { a as DropColumnCall, d as buildRecreatePostchecks, f as buildRecreateSummary, i as DataTransformCall, l as RecreateTableCall, m as sqliteDefaultToDdlColumnDefault, n as CreateIndexCall, o as DropIndexCall, p as renderDefaultLiteral, r as CreateTableCall, s as DropTableCall, t as AddColumnCall, u as buildColumnTypeSql } from "./op-factory-call-Dv_ma_mw-BtLqNmZI.mjs";
|
|
4
4
|
import { t as CONTROL_TABLE_NAMES } from "./control-tables-D_o8dKRB-BXi43noL.mjs";
|
|
5
|
-
import { t as TypeScriptRenderableSqliteMigration } from "./planner-produced-sqlite-migration-
|
|
6
|
-
import { DdlColumn, ForeignKeyConstraint,
|
|
5
|
+
import { t as TypeScriptRenderableSqliteMigration } from "./planner-produced-sqlite-migration-D1iuFT1l-BSFCXgJD.mjs";
|
|
6
|
+
import { DdlColumn, ForeignKeyConstraint, PrimaryKeyConstraint, UniqueConstraint } from "@prisma/orm-family-sql/relational-core/ast";
|
|
7
7
|
import { ifDefined } from "@prisma/orm-framework/utils/defined";
|
|
8
8
|
import { blindCast } from "@prisma/orm-framework/utils/casts";
|
|
9
9
|
import { diffSchemas, issueOutcome, orderIssuesByDependencies } from "@prisma/orm-framework/components/control";
|
|
10
10
|
import { UNBOUND_NAMESPACE_ID, entityAt } from "@prisma/orm-framework/components/ir";
|
|
11
|
-
import { buildDataTypeResolver, buildNativeTypeExpander, contractToSchemaIR, detectTableNameCaseChanges, extractCodecControlHooks, planFieldEventOperations, plannerFailure } from "@prisma/orm-family-sql/family/control";
|
|
12
11
|
import { RelationalSchemaNodeKind, SqlSchemaIR, SqlTableIR, contractDefaultRefusal, relationalNodeGranularity } from "@prisma/orm-family-sql/schema-ir/types";
|
|
12
|
+
import { InternalError } from "@prisma/orm-framework/utils/internal-error";
|
|
13
|
+
import { buildDataTypeResolver, buildNativeTypeExpander, contractToSchemaIR, detectTableNameCaseChanges, extractCodecControlHooks, planFieldEventOperations, plannerFailure } from "@prisma/orm-family-sql/family/control";
|
|
13
14
|
import { verifySqlSchemaByDiff } from "@prisma/orm-family-sql/family/diff";
|
|
14
15
|
import { notOk, ok } from "@prisma/orm-framework/utils/result";
|
|
15
|
-
|
|
16
|
-
//#region ../../../3-targets/3-targets/sqlite/dist/planner-BTKa_OaV.mjs
|
|
16
|
+
//#region ../../../3-targets/3-targets/sqlite/dist/planner-CWfPzOwZ.mjs
|
|
17
17
|
/** Renders a column default for the SQLite dialect. */
|
|
18
18
|
function sqliteRenderDefault(def, column) {
|
|
19
19
|
if (def.kind === "function") {
|
|
@@ -150,8 +150,8 @@ function withRecordKeyNames(actualSchema) {
|
|
|
150
150
|
return { tables };
|
|
151
151
|
}
|
|
152
152
|
/**
|
|
153
|
-
* Reconstructs the `StorageColumn`-shaped fields `buildColumnTypeSql`
|
|
154
|
-
*
|
|
153
|
+
* Reconstructs the `StorageColumn`-shaped fields `buildColumnTypeSql`
|
|
154
|
+
* expects, from a column node's own stamped codec
|
|
155
155
|
* identity (`codecRef` / `codecBaseNativeType`, Decision 5) — never the
|
|
156
156
|
* contract. SQLite's type renderer only uppercases the resolved base type
|
|
157
157
|
* (no parameterized expansion, no named-type quoting), so `typeRef` is
|
|
@@ -184,19 +184,6 @@ function plannableDefault(column) {
|
|
|
184
184
|
} });
|
|
185
185
|
return columnDefault;
|
|
186
186
|
}
|
|
187
|
-
function sqliteDefaultToDdlColumnDefault(columnDefault) {
|
|
188
|
-
if (!columnDefault) return void 0;
|
|
189
|
-
switch (columnDefault.kind) {
|
|
190
|
-
case "literal": return new LiteralColumnDefault(columnDefault.value);
|
|
191
|
-
case "function":
|
|
192
|
-
if (columnDefault.expression === "autoincrement()") return void 0;
|
|
193
|
-
return new FunctionColumnDefault(columnDefault.expression);
|
|
194
|
-
default: {
|
|
195
|
-
const exhaustive = columnDefault;
|
|
196
|
-
return assertNever(exhaustive, `sqliteDefaultToDdlColumnDefault: unhandled kind "${blindCast(exhaustive).kind}"`);
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
187
|
/**
|
|
201
188
|
* True when the column is rendered inline as `INTEGER PRIMARY KEY
|
|
202
189
|
* AUTOINCREMENT` — the sole member of the table's primary key with an
|
|
@@ -218,11 +205,13 @@ function isInlineAutoincrementPrimaryKeyNode(table, column) {
|
|
|
218
205
|
function columnSpecFromNode(column, inline) {
|
|
219
206
|
const like = columnLike(column);
|
|
220
207
|
const typeSql = buildColumnTypeSql(like, {});
|
|
221
|
-
const defaultSql = buildColumnDefaultSql(like.default, like.codecId);
|
|
222
208
|
return {
|
|
223
209
|
name: column.name,
|
|
224
210
|
typeSql,
|
|
225
|
-
|
|
211
|
+
...inline ? {} : {
|
|
212
|
+
...ifDefined("default", like.default),
|
|
213
|
+
...ifDefined("codecRef", column.codecRef)
|
|
214
|
+
},
|
|
226
215
|
nullable: column.nullable,
|
|
227
216
|
...inline ? { inlineAutoincrementPrimaryKey: true } : {}
|
|
228
217
|
};
|
|
@@ -853,4 +842,4 @@ function retainUnownedExtras(issues, ownership) {
|
|
|
853
842
|
//#endregion
|
|
854
843
|
export { verifySqliteDatabaseSchema as a, sqliteContractToSchema as i, createSqliteMigrationPlanner as n, diffSqliteSchema as r, SqliteMigrationPlanner as t };
|
|
855
844
|
|
|
856
|
-
//# sourceMappingURL=planner-
|
|
845
|
+
//# sourceMappingURL=planner-CWfPzOwZ-DVj6Tm5a.mjs.map
|