@prisma-next/target-postgres 0.14.0-dev.3 → 0.14.0-dev.31

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 (166) hide show
  1. package/dist/canonicalize-Bn3BM1Cn.mjs +46 -0
  2. package/dist/canonicalize-Bn3BM1Cn.mjs.map +1 -0
  3. package/dist/canonicalize-CAbXtVtB.d.mts +37 -0
  4. package/dist/canonicalize-CAbXtVtB.d.mts.map +1 -0
  5. package/dist/{codec-types-DHCkwPKE.d.mts → codec-types-CueCoGD0.d.mts} +2 -2
  6. package/dist/{codec-types-DHCkwPKE.d.mts.map → codec-types-CueCoGD0.d.mts.map} +1 -1
  7. package/dist/codec-types.d.mts +1 -1
  8. package/dist/{codecs--0A5_4Bq.d.mts → codecs-Ca8upop6.d.mts} +12 -1
  9. package/dist/codecs-Ca8upop6.d.mts.map +1 -0
  10. package/dist/codecs.d.mts +1 -1
  11. package/dist/codecs.mjs +34 -1
  12. package/dist/codecs.mjs.map +1 -1
  13. package/dist/contract-free.d.mts +8 -3
  14. package/dist/contract-free.d.mts.map +1 -1
  15. package/dist/contract-free.mjs +3 -3
  16. package/dist/control.d.mts +1 -1
  17. package/dist/control.d.mts.map +1 -1
  18. package/dist/control.mjs +11 -10
  19. package/dist/control.mjs.map +1 -1
  20. package/dist/data-transform-BOWpliq8.mjs.map +1 -1
  21. package/dist/{data-transform-DDgWdB5o.d.mts → data-transform-qKy1U5V9.d.mts} +2 -2
  22. package/dist/{data-transform-DDgWdB5o.d.mts.map → data-transform-qKy1U5V9.d.mts.map} +1 -1
  23. package/dist/data-transform.d.mts +1 -1
  24. package/dist/{ddl-QDyOSeLc.mjs → ddl-CGf6UABz.mjs} +62 -5
  25. package/dist/ddl-CGf6UABz.mjs.map +1 -0
  26. package/dist/ddl.d.mts +3 -2
  27. package/dist/ddl.mjs +2 -2
  28. package/dist/{default-normalizer-DyyCHQWs.mjs → default-normalizer-CzV8-QSu.mjs} +58 -2
  29. package/dist/default-normalizer-CzV8-QSu.mjs.map +1 -0
  30. package/dist/default-normalizer.d.mts +1 -1
  31. package/dist/default-normalizer.d.mts.map +1 -1
  32. package/dist/default-normalizer.mjs +1 -1
  33. package/dist/descriptor-meta-Dvvpu_jU.mjs +17 -0
  34. package/dist/descriptor-meta-Dvvpu_jU.mjs.map +1 -0
  35. package/dist/descriptor-meta-runtime-D5zHFKUz.mjs +228 -0
  36. package/dist/descriptor-meta-runtime-D5zHFKUz.mjs.map +1 -0
  37. package/dist/{issue-planner-DL6g3CmE.mjs → issue-planner-D5H1VuVP.mjs} +11 -9
  38. package/dist/issue-planner-D5H1VuVP.mjs.map +1 -0
  39. package/dist/issue-planner.d.mts +3 -3
  40. package/dist/issue-planner.d.mts.map +1 -1
  41. package/dist/issue-planner.mjs +1 -1
  42. package/dist/migration.d.mts +3 -3
  43. package/dist/migration.mjs +2 -2
  44. package/dist/nodes-CSkPX3rI.d.mts +120 -0
  45. package/dist/nodes-CSkPX3rI.d.mts.map +1 -0
  46. package/dist/{nodes-Bbhs2rwj.mjs → nodes-Dh__NS58.mjs} +56 -2
  47. package/dist/nodes-Dh__NS58.mjs.map +1 -0
  48. package/dist/{op-factory-call-D_p5vxwt.mjs → op-factory-call-DIdBDwmO.mjs} +199 -28
  49. package/dist/op-factory-call-DIdBDwmO.mjs.map +1 -0
  50. package/dist/{op-factory-call-DmQEc3XV.d.mts → op-factory-call-DPJR7tJc.d.mts} +44 -13
  51. package/dist/op-factory-call-DPJR7tJc.d.mts.map +1 -0
  52. package/dist/op-factory-call.d.mts +1 -1
  53. package/dist/op-factory-call.mjs +1 -1
  54. package/dist/pack.d.mts +74 -2
  55. package/dist/pack.d.mts.map +1 -1
  56. package/dist/pack.mjs +1 -1
  57. package/dist/{planner-Bs_baQax.mjs → planner-BnNEtGYM.mjs} +156 -24
  58. package/dist/planner-BnNEtGYM.mjs.map +1 -0
  59. package/dist/{planner-ddl-builders-B2wOwLqI.mjs → planner-ddl-builders-B8Nn6nHN.mjs} +12 -27
  60. package/dist/planner-ddl-builders-B8Nn6nHN.mjs.map +1 -0
  61. package/dist/planner-ddl-builders.d.mts +2 -4
  62. package/dist/planner-ddl-builders.d.mts.map +1 -1
  63. package/dist/planner-ddl-builders.mjs +2 -2
  64. package/dist/{planner-produced-postgres-migration-QqHa2C2l.d.mts → planner-produced-postgres-migration-BO-frvvN.d.mts} +3 -3
  65. package/dist/{planner-produced-postgres-migration-QqHa2C2l.d.mts.map → planner-produced-postgres-migration-BO-frvvN.d.mts.map} +1 -1
  66. package/dist/{planner-produced-postgres-migration-Cji5vxUf.mjs → planner-produced-postgres-migration-DzvdQ-7K.mjs} +2 -2
  67. package/dist/{planner-produced-postgres-migration-Cji5vxUf.mjs.map → planner-produced-postgres-migration-DzvdQ-7K.mjs.map} +1 -1
  68. package/dist/planner-produced-postgres-migration.d.mts +1 -1
  69. package/dist/planner-produced-postgres-migration.mjs +1 -1
  70. package/dist/{planner-sql-checks-jqUUGyQR.mjs → planner-sql-checks-CyjaoKhm.mjs} +2 -2
  71. package/dist/{planner-sql-checks-jqUUGyQR.mjs.map → planner-sql-checks-CyjaoKhm.mjs.map} +1 -1
  72. package/dist/planner-sql-checks.mjs +1 -1
  73. package/dist/{planner-target-details-CIY6tLeo.d.mts → planner-target-details-HkP4RrRO.d.mts} +2 -2
  74. package/dist/planner-target-details-HkP4RrRO.d.mts.map +1 -0
  75. package/dist/planner-target-details.d.mts +1 -1
  76. package/dist/planner.d.mts +31 -4
  77. package/dist/planner.d.mts.map +1 -1
  78. package/dist/planner.mjs +2 -2
  79. package/dist/{postgres-contract-serializer-k3TAcPMY.mjs → postgres-contract-serializer-tGMiJcl4.mjs} +30 -21
  80. package/dist/postgres-contract-serializer-tGMiJcl4.mjs.map +1 -0
  81. package/dist/{postgres-migration-B5jKrXv3.mjs → postgres-migration-C8JZyTSJ.mjs} +2 -2
  82. package/dist/{postgres-migration-B5jKrXv3.mjs.map → postgres-migration-C8JZyTSJ.mjs.map} +1 -1
  83. package/dist/{postgres-migration-Y4YBJqkS.d.mts → postgres-migration-Cs7zMOe1.d.mts} +5 -5
  84. package/dist/{postgres-migration-Y4YBJqkS.d.mts.map → postgres-migration-Cs7zMOe1.d.mts.map} +1 -1
  85. package/dist/postgres-rls-policy-12wAEQhs.d.mts +60 -0
  86. package/dist/postgres-rls-policy-12wAEQhs.d.mts.map +1 -0
  87. package/dist/postgres-schema-DJUEkWg-.d.mts +190 -0
  88. package/dist/postgres-schema-DJUEkWg-.d.mts.map +1 -0
  89. package/dist/{postgres-schema-COGZ1ark.mjs → postgres-schema-DLcc3W2-.mjs} +138 -5
  90. package/dist/postgres-schema-DLcc3W2-.mjs.map +1 -0
  91. package/dist/postgres-schema-ir-BJl_a3J7.d.mts +102 -0
  92. package/dist/postgres-schema-ir-BJl_a3J7.d.mts.map +1 -0
  93. package/dist/postgres-schema-ir-I_FiUndw.mjs +133 -0
  94. package/dist/postgres-schema-ir-I_FiUndw.mjs.map +1 -0
  95. package/dist/postgres-schema-ir-annotations-BbDSiwx2.mjs +14 -0
  96. package/dist/postgres-schema-ir-annotations-BbDSiwx2.mjs.map +1 -0
  97. package/dist/render-ops.d.mts +1 -1
  98. package/dist/rls-canonicalize.d.mts +2 -0
  99. package/dist/rls-canonicalize.mjs +2 -0
  100. package/dist/runtime.d.mts +5 -5
  101. package/dist/runtime.d.mts.map +1 -1
  102. package/dist/runtime.mjs +2 -2
  103. package/dist/schema-ir-annotations.d.mts +8 -0
  104. package/dist/schema-ir-annotations.d.mts.map +1 -0
  105. package/dist/schema-ir-annotations.mjs +2 -0
  106. package/dist/types.d.mts +4 -140
  107. package/dist/types.mjs +3 -2
  108. package/package.json +21 -17
  109. package/src/contract-free/checks.ts +73 -0
  110. package/src/contract-free/ddl.ts +45 -1
  111. package/src/core/authoring.ts +115 -1
  112. package/src/core/codecs.ts +35 -1
  113. package/src/core/ddl/nodes.ts +94 -2
  114. package/src/core/default-normalizer.ts +60 -2
  115. package/src/core/descriptor-meta.ts +4 -0
  116. package/src/core/entity-kinds.ts +16 -0
  117. package/src/core/migrations/bound-schema.ts +10 -0
  118. package/src/core/migrations/contract-to-postgres-schema-ir.ts +91 -0
  119. package/src/core/migrations/control-policy.ts +3 -0
  120. package/src/core/migrations/diff-postgres-schema.ts +55 -0
  121. package/src/core/migrations/issue-planner.ts +8 -0
  122. package/src/core/migrations/op-factory-call.ts +106 -21
  123. package/src/core/migrations/operations/columns.ts +24 -12
  124. package/src/core/migrations/operations/data-transform.ts +6 -0
  125. package/src/core/migrations/operations/rls.ts +106 -0
  126. package/src/core/migrations/operations/shared.ts +0 -30
  127. package/src/core/migrations/planner-ddl-builders.ts +15 -56
  128. package/src/core/migrations/planner-recipes.ts +31 -13
  129. package/src/core/migrations/planner-strategies.ts +3 -11
  130. package/src/core/migrations/planner-target-details.ts +3 -1
  131. package/src/core/migrations/planner.ts +84 -1
  132. package/src/core/migrations/verify-postgres-namespaces.ts +12 -15
  133. package/src/core/postgres-contract-serializer.ts +48 -33
  134. package/src/core/postgres-schema.ts +37 -13
  135. package/src/core/postgres-validators.ts +20 -0
  136. package/src/core/rls/canonicalize.ts +48 -0
  137. package/src/core/schema-ir/postgres-rls-policy.ts +101 -0
  138. package/src/core/schema-ir/postgres-role.ts +52 -0
  139. package/src/core/schema-ir/postgres-schema-ir-annotations.ts +22 -0
  140. package/src/core/schema-ir/postgres-schema-ir.ts +138 -0
  141. package/src/core/schema-ir/postgres-table-ir.ts +96 -0
  142. package/src/exports/contract-free.ts +7 -1
  143. package/src/exports/control.ts +11 -12
  144. package/src/exports/ddl.ts +4 -0
  145. package/src/exports/planner-ddl-builders.ts +0 -2
  146. package/src/exports/planner.ts +5 -0
  147. package/src/exports/rls-canonicalize.ts +6 -0
  148. package/src/exports/schema-ir-annotations.ts +1 -0
  149. package/src/exports/types.ts +20 -0
  150. package/dist/codecs--0A5_4Bq.d.mts.map +0 -1
  151. package/dist/ddl-QDyOSeLc.mjs.map +0 -1
  152. package/dist/default-normalizer-DyyCHQWs.mjs.map +0 -1
  153. package/dist/descriptor-meta-CpGygXpI.mjs +0 -140
  154. package/dist/descriptor-meta-CpGygXpI.mjs.map +0 -1
  155. package/dist/issue-planner-DL6g3CmE.mjs.map +0 -1
  156. package/dist/nodes-Bbhs2rwj.mjs.map +0 -1
  157. package/dist/nodes-pLeLgdis.d.mts +0 -67
  158. package/dist/nodes-pLeLgdis.d.mts.map +0 -1
  159. package/dist/op-factory-call-D_p5vxwt.mjs.map +0 -1
  160. package/dist/op-factory-call-DmQEc3XV.d.mts.map +0 -1
  161. package/dist/planner-Bs_baQax.mjs.map +0 -1
  162. package/dist/planner-ddl-builders-B2wOwLqI.mjs.map +0 -1
  163. package/dist/planner-target-details-CIY6tLeo.d.mts.map +0 -1
  164. package/dist/postgres-contract-serializer-k3TAcPMY.mjs.map +0 -1
  165. package/dist/postgres-schema-COGZ1ark.mjs.map +0 -1
  166. package/dist/types.d.mts.map +0 -1
@@ -0,0 +1,120 @@
1
+ import { n as RlsPolicyOperation } from "./canonicalize-CAbXtVtB.mjs";
2
+ import { DdlColumn, DdlNode, DdlTableConstraint } from "@prisma-next/sql-relational-core/ast";
3
+
4
+ //#region src/core/ddl/nodes.d.ts
5
+ interface AlterTableActionVisitor<R> {
6
+ addColumn(action: AddColumnAction): R;
7
+ dropDefault(action: DropDefaultAction): R;
8
+ }
9
+ declare abstract class AlterTableAction {
10
+ abstract readonly kind: string;
11
+ abstract accept<R>(visitor: AlterTableActionVisitor<R>): R;
12
+ }
13
+ declare class AddColumnAction extends AlterTableAction {
14
+ readonly kind: "add-column";
15
+ readonly column: DdlColumn;
16
+ constructor(column: DdlColumn);
17
+ accept<R>(visitor: AlterTableActionVisitor<R>): R;
18
+ }
19
+ declare class DropDefaultAction extends AlterTableAction {
20
+ readonly kind: "drop-default";
21
+ readonly columnName: string;
22
+ constructor(columnName: string);
23
+ accept<R>(visitor: AlterTableActionVisitor<R>): R;
24
+ }
25
+ /**
26
+ * The set of ALTER TABLE subactions currently expressible as typed DDL.
27
+ *
28
+ * The remaining actions — SetDefault, SetNotNull, DropNotNull,
29
+ * AlterColumnType — are still emitted as raw SQL by `operations/columns.ts`
30
+ * and join this union as they are converted to typed DDL. Until then it is
31
+ * intentionally partial: only the ALTER subactions used by the
32
+ * already-converted ops (AddColumn, DropDefault) appear here.
33
+ */
34
+ type AnyAlterTableAction = AddColumnAction | DropDefaultAction;
35
+ interface PostgresDdlVisitor<R> {
36
+ createTable(node: PostgresCreateTable): R;
37
+ createSchema(node: PostgresCreateSchema): R;
38
+ alterTable(node: PostgresAlterTable): R;
39
+ createPolicy(node: PostgresCreatePolicy): R;
40
+ dropPolicy(node: PostgresDropPolicy): R;
41
+ }
42
+ declare abstract class PostgresDdlNode extends DdlNode {
43
+ abstract accept<R>(visitor: PostgresDdlVisitor<R>): R;
44
+ }
45
+ declare class PostgresCreateTable extends PostgresDdlNode {
46
+ readonly kind: "create-table";
47
+ readonly table: string;
48
+ readonly schema: string | undefined;
49
+ readonly ifNotExists: boolean | undefined;
50
+ readonly columns: ReadonlyArray<DdlColumn>;
51
+ readonly constraints: ReadonlyArray<DdlTableConstraint> | undefined;
52
+ constructor(options: {
53
+ readonly table: string;
54
+ readonly schema?: string;
55
+ readonly ifNotExists?: boolean;
56
+ readonly columns: readonly DdlColumn[];
57
+ readonly constraints?: readonly DdlTableConstraint[];
58
+ });
59
+ accept<R>(visitor: PostgresDdlVisitor<R>): R;
60
+ }
61
+ declare class PostgresCreateSchema extends PostgresDdlNode {
62
+ readonly kind: "create-schema";
63
+ readonly schema: string;
64
+ readonly ifNotExists: boolean | undefined;
65
+ constructor(options: {
66
+ readonly schema: string;
67
+ readonly ifNotExists?: boolean;
68
+ });
69
+ accept<R>(visitor: PostgresDdlVisitor<R>): R;
70
+ }
71
+ declare class PostgresAlterTable extends PostgresDdlNode {
72
+ readonly kind: "alter-table";
73
+ readonly table: string;
74
+ readonly schema: string | undefined;
75
+ readonly actions: ReadonlyArray<AnyAlterTableAction>;
76
+ constructor(options: {
77
+ readonly table: string;
78
+ readonly schema?: string;
79
+ readonly actions: readonly AnyAlterTableAction[];
80
+ });
81
+ accept<R>(visitor: PostgresDdlVisitor<R>): R;
82
+ }
83
+ declare class PostgresCreatePolicy extends PostgresDdlNode {
84
+ readonly kind: "create-policy";
85
+ readonly schema: string;
86
+ readonly table: string;
87
+ readonly name: string;
88
+ readonly permissive: boolean;
89
+ readonly operation: RlsPolicyOperation;
90
+ readonly roles: ReadonlyArray<string>;
91
+ readonly using: string | undefined;
92
+ readonly withCheck: string | undefined;
93
+ constructor(options: {
94
+ readonly schema: string;
95
+ readonly table: string;
96
+ readonly name: string;
97
+ readonly permissive: boolean;
98
+ readonly operation: RlsPolicyOperation;
99
+ readonly roles: readonly string[];
100
+ readonly using?: string;
101
+ readonly withCheck?: string;
102
+ });
103
+ accept<R>(visitor: PostgresDdlVisitor<R>): R;
104
+ }
105
+ declare class PostgresDropPolicy extends PostgresDdlNode {
106
+ readonly kind: "drop-policy";
107
+ readonly schema: string;
108
+ readonly table: string;
109
+ readonly name: string;
110
+ constructor(options: {
111
+ readonly schema: string;
112
+ readonly table: string;
113
+ readonly name: string;
114
+ });
115
+ accept<R>(visitor: PostgresDdlVisitor<R>): R;
116
+ }
117
+ type AnyPostgresDdlNode = PostgresCreateTable | PostgresCreateSchema | PostgresAlterTable | PostgresCreatePolicy | PostgresDropPolicy;
118
+ //#endregion
119
+ export { DropDefaultAction as a, PostgresCreateSchema as c, PostgresDdlVisitor as d, PostgresDropPolicy as f, AnyPostgresDdlNode as i, PostgresCreateTable as l, AlterTableActionVisitor as n, PostgresAlterTable as o, AnyAlterTableAction as r, PostgresCreatePolicy as s, AddColumnAction as t, PostgresDdlNode as u };
120
+ //# sourceMappingURL=nodes-CSkPX3rI.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodes-CSkPX3rI.d.mts","names":[],"sources":["../src/core/ddl/nodes.ts"],"mappings":"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"}
@@ -13,6 +13,18 @@ var AddColumnAction = class extends AlterTableAction {
13
13
  return visitor.addColumn(this);
14
14
  }
15
15
  };
16
+ var DropDefaultAction = class extends AlterTableAction {
17
+ kind = "drop-default";
18
+ columnName;
19
+ constructor(columnName) {
20
+ super();
21
+ this.columnName = columnName;
22
+ Object.freeze(this);
23
+ }
24
+ accept(visitor) {
25
+ return visitor.dropDefault(this);
26
+ }
27
+ };
16
28
  var PostgresDdlNode = class extends DdlNode {};
17
29
  function freezeDdlColumns(columns) {
18
30
  return Object.freeze([...columns]);
@@ -70,7 +82,49 @@ var PostgresAlterTable = class extends PostgresDdlNode {
70
82
  return visitor.alterTable(this);
71
83
  }
72
84
  };
85
+ var PostgresCreatePolicy = class extends PostgresDdlNode {
86
+ kind = "create-policy";
87
+ schema;
88
+ table;
89
+ name;
90
+ permissive;
91
+ operation;
92
+ roles;
93
+ using;
94
+ withCheck;
95
+ constructor(options) {
96
+ super();
97
+ this.schema = options.schema;
98
+ this.table = options.table;
99
+ this.name = options.name;
100
+ this.permissive = options.permissive;
101
+ this.operation = options.operation;
102
+ this.roles = Object.freeze([...options.roles]);
103
+ this.using = options.using;
104
+ this.withCheck = options.withCheck;
105
+ this.freeze();
106
+ }
107
+ accept(visitor) {
108
+ return visitor.createPolicy(this);
109
+ }
110
+ };
111
+ var PostgresDropPolicy = class extends PostgresDdlNode {
112
+ kind = "drop-policy";
113
+ schema;
114
+ table;
115
+ name;
116
+ constructor(options) {
117
+ super();
118
+ this.schema = options.schema;
119
+ this.table = options.table;
120
+ this.name = options.name;
121
+ this.freeze();
122
+ }
123
+ accept(visitor) {
124
+ return visitor.dropPolicy(this);
125
+ }
126
+ };
73
127
  //#endregion
74
- export { PostgresDdlNode as a, PostgresCreateTable as i, PostgresAlterTable as n, PostgresCreateSchema as r, AddColumnAction as t };
128
+ export { PostgresCreateSchema as a, PostgresDropPolicy as c, PostgresCreatePolicy as i, DropDefaultAction as n, PostgresCreateTable as o, PostgresAlterTable as r, PostgresDdlNode as s, AddColumnAction as t };
75
129
 
76
- //# sourceMappingURL=nodes-Bbhs2rwj.mjs.map
130
+ //# sourceMappingURL=nodes-Dh__NS58.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodes-Dh__NS58.mjs","names":[],"sources":["../src/core/ddl/nodes.ts"],"sourcesContent":["import {\n type DdlColumn,\n DdlNode,\n type DdlTableConstraint,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { RlsPolicyOperation } from '../rls/canonicalize';\n\n// ---------------------------------------------------------------------------\n// AlterTableAction — nested polymorphic hierarchy\n// ---------------------------------------------------------------------------\n\nexport interface AlterTableActionVisitor<R> {\n addColumn(action: AddColumnAction): R;\n dropDefault(action: DropDefaultAction): R;\n}\n\nexport abstract class AlterTableAction {\n abstract readonly kind: string;\n abstract accept<R>(visitor: AlterTableActionVisitor<R>): R;\n}\n\nexport class AddColumnAction extends AlterTableAction {\n readonly kind = 'add-column' as const;\n readonly column: DdlColumn;\n\n constructor(column: DdlColumn) {\n super();\n this.column = column;\n Object.freeze(this);\n }\n\n override accept<R>(visitor: AlterTableActionVisitor<R>): R {\n return visitor.addColumn(this);\n }\n}\n\nexport class DropDefaultAction extends AlterTableAction {\n readonly kind = 'drop-default' as const;\n readonly columnName: string;\n\n constructor(columnName: string) {\n super();\n this.columnName = columnName;\n Object.freeze(this);\n }\n\n override accept<R>(visitor: AlterTableActionVisitor<R>): R {\n return visitor.dropDefault(this);\n }\n}\n\n/**\n * The set of ALTER TABLE subactions currently expressible as typed DDL.\n *\n * The remaining actions — SetDefault, SetNotNull, DropNotNull,\n * AlterColumnType — are still emitted as raw SQL by `operations/columns.ts`\n * and join this union as they are converted to typed DDL. Until then it is\n * intentionally partial: only the ALTER subactions used by the\n * already-converted ops (AddColumn, DropDefault) appear here.\n */\nexport type AnyAlterTableAction = AddColumnAction | DropDefaultAction;\n\n// ---------------------------------------------------------------------------\n// Top-level DDL visitor\n// ---------------------------------------------------------------------------\n\nexport interface PostgresDdlVisitor<R> {\n createTable(node: PostgresCreateTable): R;\n createSchema(node: PostgresCreateSchema): R;\n alterTable(node: PostgresAlterTable): R;\n createPolicy(node: PostgresCreatePolicy): R;\n dropPolicy(node: PostgresDropPolicy): R;\n}\n\nexport abstract class PostgresDdlNode extends DdlNode {\n abstract accept<R>(visitor: PostgresDdlVisitor<R>): R;\n}\n\nfunction freezeDdlColumns(columns: readonly DdlColumn[]): ReadonlyArray<DdlColumn> {\n return Object.freeze([...columns]);\n}\n\nfunction freezeConstraints(\n constraints: readonly DdlTableConstraint[] | undefined,\n): ReadonlyArray<DdlTableConstraint> | undefined {\n return constraints ? Object.freeze([...constraints]) : undefined;\n}\n\nexport class PostgresCreateTable extends PostgresDdlNode {\n readonly kind = 'create-table' as const;\n readonly table: string;\n readonly schema: string | undefined;\n readonly ifNotExists: boolean | undefined;\n readonly columns: ReadonlyArray<DdlColumn>;\n readonly constraints: ReadonlyArray<DdlTableConstraint> | undefined;\n\n constructor(options: {\n readonly table: string;\n readonly schema?: string;\n readonly ifNotExists?: boolean;\n readonly columns: readonly DdlColumn[];\n readonly constraints?: readonly DdlTableConstraint[];\n }) {\n super();\n this.table = options.table;\n this.schema = options.schema;\n this.ifNotExists = options.ifNotExists;\n this.columns = freezeDdlColumns(options.columns);\n this.constraints = freezeConstraints(options.constraints);\n this.freeze();\n }\n\n override accept<R>(visitor: PostgresDdlVisitor<R>): R {\n return visitor.createTable(this);\n }\n}\n\nexport class PostgresCreateSchema extends PostgresDdlNode {\n readonly kind = 'create-schema' as const;\n readonly schema: string;\n readonly ifNotExists: boolean | undefined;\n\n constructor(options: { readonly schema: string; readonly ifNotExists?: boolean }) {\n super();\n this.schema = options.schema;\n this.ifNotExists = options.ifNotExists;\n this.freeze();\n }\n\n override accept<R>(visitor: PostgresDdlVisitor<R>): R {\n return visitor.createSchema(this);\n }\n}\n\nexport class PostgresAlterTable extends PostgresDdlNode {\n readonly kind = 'alter-table' as const;\n readonly table: string;\n readonly schema: string | undefined;\n readonly actions: ReadonlyArray<AnyAlterTableAction>;\n\n constructor(options: {\n readonly table: string;\n readonly schema?: string;\n readonly actions: readonly AnyAlterTableAction[];\n }) {\n super();\n this.table = options.table;\n this.schema = options.schema;\n this.actions = Object.freeze([...options.actions]);\n this.freeze();\n }\n\n override accept<R>(visitor: PostgresDdlVisitor<R>): R {\n return visitor.alterTable(this);\n }\n}\n\nexport type { RlsPolicyOperation };\n\nexport class PostgresCreatePolicy extends PostgresDdlNode {\n readonly kind = 'create-policy' as const;\n readonly schema: string;\n readonly table: string;\n readonly name: string;\n readonly permissive: boolean;\n readonly operation: RlsPolicyOperation;\n readonly roles: ReadonlyArray<string>;\n readonly using: string | undefined;\n readonly withCheck: string | undefined;\n\n constructor(options: {\n readonly schema: string;\n readonly table: string;\n readonly name: string;\n readonly permissive: boolean;\n readonly operation: RlsPolicyOperation;\n readonly roles: readonly string[];\n readonly using?: string;\n readonly withCheck?: string;\n }) {\n super();\n this.schema = options.schema;\n this.table = options.table;\n this.name = options.name;\n this.permissive = options.permissive;\n this.operation = options.operation;\n this.roles = Object.freeze([...options.roles]);\n this.using = options.using;\n this.withCheck = options.withCheck;\n this.freeze();\n }\n\n override accept<R>(visitor: PostgresDdlVisitor<R>): R {\n return visitor.createPolicy(this);\n }\n}\n\nexport class PostgresDropPolicy extends PostgresDdlNode {\n readonly kind = 'drop-policy' as const;\n readonly schema: string;\n readonly table: string;\n readonly name: string;\n\n constructor(options: { readonly schema: string; readonly table: string; readonly name: string }) {\n super();\n this.schema = options.schema;\n this.table = options.table;\n this.name = options.name;\n this.freeze();\n }\n\n override accept<R>(visitor: PostgresDdlVisitor<R>): R {\n return visitor.dropPolicy(this);\n }\n}\n\nexport type AnyPostgresDdlNode =\n | PostgresCreateTable\n | PostgresCreateSchema\n | PostgresAlterTable\n | PostgresCreatePolicy\n | PostgresDropPolicy;\n"],"mappings":";;AAgBA,IAAsB,mBAAtB,MAAuC,CAGvC;AAEA,IAAa,kBAAb,cAAqC,iBAAiB;CACpD,OAAgB;CAChB;CAEA,YAAY,QAAmB;EAC7B,MAAM;EACN,KAAK,SAAS;EACd,OAAO,OAAO,IAAI;CACpB;CAEA,OAAmB,SAAwC;EACzD,OAAO,QAAQ,UAAU,IAAI;CAC/B;AACF;AAEA,IAAa,oBAAb,cAAuC,iBAAiB;CACtD,OAAgB;CAChB;CAEA,YAAY,YAAoB;EAC9B,MAAM;EACN,KAAK,aAAa;EAClB,OAAO,OAAO,IAAI;CACpB;CAEA,OAAmB,SAAwC;EACzD,OAAO,QAAQ,YAAY,IAAI;CACjC;AACF;AAyBA,IAAsB,kBAAtB,cAA8C,QAAQ,CAEtD;AAEA,SAAS,iBAAiB,SAAyD;CACjF,OAAO,OAAO,OAAO,CAAC,GAAG,OAAO,CAAC;AACnC;AAEA,SAAS,kBACP,aAC+C;CAC/C,OAAO,cAAc,OAAO,OAAO,CAAC,GAAG,WAAW,CAAC,IAAI,KAAA;AACzD;AAEA,IAAa,sBAAb,cAAyC,gBAAgB;CACvD,OAAgB;CAChB;CACA;CACA;CACA;CACA;CAEA,YAAY,SAMT;EACD,MAAM;EACN,KAAK,QAAQ,QAAQ;EACrB,KAAK,SAAS,QAAQ;EACtB,KAAK,cAAc,QAAQ;EAC3B,KAAK,UAAU,iBAAiB,QAAQ,OAAO;EAC/C,KAAK,cAAc,kBAAkB,QAAQ,WAAW;EACxD,KAAK,OAAO;CACd;CAEA,OAAmB,SAAmC;EACpD,OAAO,QAAQ,YAAY,IAAI;CACjC;AACF;AAEA,IAAa,uBAAb,cAA0C,gBAAgB;CACxD,OAAgB;CAChB;CACA;CAEA,YAAY,SAAsE;EAChF,MAAM;EACN,KAAK,SAAS,QAAQ;EACtB,KAAK,cAAc,QAAQ;EAC3B,KAAK,OAAO;CACd;CAEA,OAAmB,SAAmC;EACpD,OAAO,QAAQ,aAAa,IAAI;CAClC;AACF;AAEA,IAAa,qBAAb,cAAwC,gBAAgB;CACtD,OAAgB;CAChB;CACA;CACA;CAEA,YAAY,SAIT;EACD,MAAM;EACN,KAAK,QAAQ,QAAQ;EACrB,KAAK,SAAS,QAAQ;EACtB,KAAK,UAAU,OAAO,OAAO,CAAC,GAAG,QAAQ,OAAO,CAAC;EACjD,KAAK,OAAO;CACd;CAEA,OAAmB,SAAmC;EACpD,OAAO,QAAQ,WAAW,IAAI;CAChC;AACF;AAIA,IAAa,uBAAb,cAA0C,gBAAgB;CACxD,OAAgB;CAChB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAEA,YAAY,SAST;EACD,MAAM;EACN,KAAK,SAAS,QAAQ;EACtB,KAAK,QAAQ,QAAQ;EACrB,KAAK,OAAO,QAAQ;EACpB,KAAK,aAAa,QAAQ;EAC1B,KAAK,YAAY,QAAQ;EACzB,KAAK,QAAQ,OAAO,OAAO,CAAC,GAAG,QAAQ,KAAK,CAAC;EAC7C,KAAK,QAAQ,QAAQ;EACrB,KAAK,YAAY,QAAQ;EACzB,KAAK,OAAO;CACd;CAEA,OAAmB,SAAmC;EACpD,OAAO,QAAQ,aAAa,IAAI;CAClC;AACF;AAEA,IAAa,qBAAb,cAAwC,gBAAgB;CACtD,OAAgB;CAChB;CACA;CACA;CAEA,YAAY,SAAqF;EAC/F,MAAM;EACN,KAAK,SAAS,QAAQ;EACtB,KAAK,QAAQ,QAAQ;EACrB,KAAK,OAAO,QAAQ;EACpB,KAAK,OAAO;CACd;CAEA,OAAmB,SAAmC;EACpD,OAAO,QAAQ,WAAW,IAAI;CAChC;AACF"}
@@ -1,14 +1,25 @@
1
1
  import { i as quoteIdentifier, n as escapeLiteral } from "./sql-utils-DcfMz4MQ.mjs";
2
- import { a as columnDefaultAst, c as columnTypeAst, d as indexExistsAst, f as noNullValuesAst, i as createTable, l as constraintExistsAst, m as tableIsEmptyAst, n as alterTable, o as columnExistsAst, p as tableExistsAst, r as createSchema, s as columnNullabilityAst, t as addColumnAction, u as extensionExistsAst } from "./ddl-QDyOSeLc.mjs";
3
- import { n as qualifyTableName } from "./planner-sql-checks-jqUUGyQR.mjs";
4
- import { t as buildAddColumnSql } from "./planner-ddl-builders-B2wOwLqI.mjs";
2
+ import { _ as rlsPolicyExistsAst, a as createTable, c as columnDefaultAst, d as columnTypeAst, f as constraintExistsAst, g as rlsEnabledAst, h as noNullValuesAst, i as createSchema, l as columnExistsAst, m as indexExistsAst, n as alterTable, o as dropDefaultAction, p as extensionExistsAst, r as createPolicy, s as dropPolicy, t as addColumnAction, u as columnNullabilityAst, v as tableExistsAst, y as tableIsEmptyAst } from "./ddl-CGf6UABz.mjs";
3
+ import { n as qualifyTableName } from "./planner-sql-checks-CyjaoKhm.mjs";
4
+ import { n as buildColumnTypeSql } from "./planner-ddl-builders-B8Nn6nHN.mjs";
5
5
  import { FunctionColumnDefault, LiteralColumnDefault } from "@prisma-next/sql-relational-core/ast";
6
6
  import { blindCast } from "@prisma-next/utils/casts";
7
7
  import { ifDefined } from "@prisma-next/utils/defined";
8
8
  import { UNBOUND_NAMESPACE_ID } from "@prisma-next/framework-components/ir";
9
+ import { col } from "@prisma-next/sql-relational-core/contract-free";
9
10
  import { errorUnfilledPlaceholder } from "@prisma-next/errors/migration";
10
11
  import { TsExpression, jsonToTsSource } from "@prisma-next/ts-render";
11
12
  import { REFERENTIAL_ACTION_SQL } from "@prisma-next/sql-contract/referential-action-sql";
13
+ //#region src/core/migrations/bound-schema.ts
14
+ /**
15
+ * Maps a planner schema name to the contract-free DDL builder's optional
16
+ * `schema` field: the unbound sentinel becomes `undefined` (the builder omits
17
+ * the schema qualifier), every other name passes through.
18
+ */
19
+ function boundSchema(schemaName) {
20
+ return schemaName === UNBOUND_NAMESPACE_ID ? void 0 : schemaName;
21
+ }
22
+ //#endregion
12
23
  //#region src/core/migrations/operations/shared.ts
13
24
  function step(description, sql, params) {
14
25
  return {
@@ -171,12 +182,16 @@ async function setDefault(schemaName, tableName, columnName, defaultSql, lowerer
171
182
  };
172
183
  }
173
184
  async function dropDefault(schemaName, tableName, columnName, lowerer) {
174
- const qualified = qualifyTableName(schemaName, tableName);
175
185
  const { present } = await columnExistsSteps(lowerer, {
176
186
  schema: schemaName,
177
187
  table: tableName,
178
188
  column: columnName
179
189
  });
190
+ const dropDefaultExec = await lowerer.lowerToExecuteRequest(alterTable({
191
+ ...ifDefined("schema", boundSchema(schemaName)),
192
+ table: tableName,
193
+ actions: [dropDefaultAction(columnName)]
194
+ }));
180
195
  const noDefault = await lowerer.lowerToExecuteRequest(columnDefaultAst({
181
196
  schema: schemaName,
182
197
  table: tableName,
@@ -188,17 +203,23 @@ async function dropDefault(schemaName, tableName, columnName, lowerer) {
188
203
  operationClass: "destructive",
189
204
  target: targetDetails("column", columnName, schemaName, tableName),
190
205
  precheck: [step(`ensure column "${columnName}" exists`, present.sql, present.params)],
191
- execute: [step(`drop default on "${columnName}"`, `ALTER TABLE ${qualified} ALTER COLUMN ${quoteIdentifier(columnName)} DROP DEFAULT`)],
206
+ execute: [step(`drop default on "${columnName}"`, dropDefaultExec.sql)],
192
207
  postcheck: [step(`verify column "${columnName}" has no default`, noDefault.sql, noDefault.params)]
193
208
  };
194
209
  }
195
210
  /**
196
211
  * Builds the op for adding a NOT NULL column (no contract default) to a
197
212
  * non-empty table. Prechecks assert the column is absent and the table is
198
- * empty; the execute step is the raw ADD COLUMN SQL passed by the caller
199
- * (slice-7 deferred); postchecks assert the column exists and is NOT NULL.
213
+ * empty; the execute step lowers the typed `AddColumn` DDL node through the
214
+ * adapter; postchecks assert the column exists and is NOT NULL.
200
215
  */
201
- async function addNotNullColumnDirect(schemaName, tableName, columnName, executeStepSql, lowerer) {
216
+ async function addNotNullColumnDirect(schemaName, tableName, column, lowerer) {
217
+ const columnName = column.name;
218
+ const addColumn = await lowerer.lowerToExecuteRequest(alterTable({
219
+ ...ifDefined("schema", boundSchema(schemaName)),
220
+ table: tableName,
221
+ actions: [addColumnAction(column)]
222
+ }));
202
223
  const absent = await lowerer.lowerToExecuteRequest(columnExistsAst({
203
224
  schema: schemaName,
204
225
  table: tableName,
@@ -223,7 +244,7 @@ async function addNotNullColumnDirect(schemaName, tableName, columnName, execute
223
244
  operationClass: "additive",
224
245
  target: targetDetails("column", columnName, schemaName, tableName),
225
246
  precheck: [step(`ensure column "${columnName}" is missing`, absent.sql, absent.params), step(`ensure table "${tableName}" is empty before adding NOT NULL column without default`, tableEmpty.sql, tableEmpty.params)],
226
- execute: [step(`add column "${columnName}"`, executeStepSql)],
247
+ execute: [step(`add column "${columnName}"`, addColumn.sql)],
227
248
  postcheck: [step(`verify column "${columnName}" exists`, present.sql, present.params), step(`verify column "${columnName}" is NOT NULL`, notNullable.sql, notNullable.params)]
228
249
  };
229
250
  }
@@ -463,6 +484,81 @@ async function dropIndex(schemaName, tableName, indexName, lowerer) {
463
484
  };
464
485
  }
465
486
  //#endregion
487
+ //#region src/core/migrations/operations/rls.ts
488
+ const PLAIN_IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_$]*$/;
489
+ function validateRoleName(role) {
490
+ if (!PLAIN_IDENTIFIER.test(role)) throw new Error(`Invalid role name ${JSON.stringify(role)}: role names must be plain SQL identifiers matching ^[A-Za-z_][A-Za-z0-9_$]*$`);
491
+ return role;
492
+ }
493
+ async function createRlsPolicy(schemaName, tableName, policy, lowerer) {
494
+ const validatedRoles = policy.roles.map(validateRoleName);
495
+ const ddlNode = createPolicy({
496
+ schema: schemaName,
497
+ table: tableName,
498
+ name: policy.name,
499
+ permissive: policy.permissive,
500
+ operation: policy.operation,
501
+ roles: validatedRoles,
502
+ ...ifDefined("using", policy.using),
503
+ ...ifDefined("withCheck", policy.withCheck)
504
+ });
505
+ const checks = rlsPolicyExistsAst({
506
+ schema: schemaName,
507
+ table: tableName,
508
+ policyName: policy.name
509
+ });
510
+ const absent = await lowerer.lowerToExecuteRequest(checks.policyAbsent());
511
+ const execute = await lowerer.lowerToExecuteRequest(ddlNode);
512
+ const present = await lowerer.lowerToExecuteRequest(checks.policyPresent());
513
+ return {
514
+ id: `rlsPolicy.${schemaName}.${tableName}.${policy.name}`,
515
+ label: `Create RLS policy "${policy.name}" on "${tableName}"`,
516
+ operationClass: "additive",
517
+ target: targetDetails("rlsPolicy", policy.name, schemaName, tableName),
518
+ precheck: [step(`ensure RLS policy "${policy.name}" does not exist`, absent.sql, absent.params)],
519
+ execute: [step(`create RLS policy "${policy.name}"`, execute.sql, execute.params)],
520
+ postcheck: [step(`verify RLS policy "${policy.name}" exists`, present.sql, present.params)]
521
+ };
522
+ }
523
+ async function dropRlsPolicy(schemaName, tableName, policyName, lowerer) {
524
+ const ddlNode = dropPolicy({
525
+ schema: schemaName,
526
+ table: tableName,
527
+ name: policyName
528
+ });
529
+ const checks = rlsPolicyExistsAst({
530
+ schema: schemaName,
531
+ table: tableName,
532
+ policyName
533
+ });
534
+ const present = await lowerer.lowerToExecuteRequest(checks.policyPresent());
535
+ const execute = await lowerer.lowerToExecuteRequest(ddlNode);
536
+ const absent = await lowerer.lowerToExecuteRequest(checks.policyAbsent());
537
+ return {
538
+ id: `rlsPolicy.${schemaName}.${tableName}.${policyName}.drop`,
539
+ label: `Drop RLS policy "${policyName}" on "${tableName}"`,
540
+ operationClass: "destructive",
541
+ target: targetDetails("rlsPolicy", policyName, schemaName, tableName),
542
+ precheck: [step(`ensure RLS policy "${policyName}" exists`, present.sql, present.params)],
543
+ execute: [step(`drop RLS policy "${policyName}"`, execute.sql, execute.params)],
544
+ postcheck: [step(`verify RLS policy "${policyName}" is absent`, absent.sql, absent.params)]
545
+ };
546
+ }
547
+ async function enableRowLevelSecurity(schemaName, tableName, lowerer) {
548
+ const checks = rlsEnabledAst(schemaName, tableName);
549
+ const disabled = await lowerer.lowerToExecuteRequest(checks.rlsDisabled());
550
+ const enabled = await lowerer.lowerToExecuteRequest(checks.rlsEnabled());
551
+ return {
552
+ id: `rowLevelSecurity.${schemaName}.${tableName}`,
553
+ label: `Enable row-level security on "${tableName}"`,
554
+ operationClass: "additive",
555
+ target: targetDetails("rowLevelSecurity", tableName, schemaName),
556
+ precheck: [step(`check RLS is not already enabled on "${tableName}"`, disabled.sql, disabled.params)],
557
+ execute: [step(`enable row-level security on "${tableName}"`, `ALTER TABLE ${qualifyTableName(schemaName, tableName)} ENABLE ROW LEVEL SECURITY`)],
558
+ postcheck: [step(`verify row-level security is enabled on "${tableName}"`, enabled.sql, enabled.params)]
559
+ };
560
+ }
561
+ //#endregion
466
562
  //#region src/core/migrations/operations/tables.ts
467
563
  async function dropTable(schemaName, tableName, lowerer) {
468
564
  const qualified = qualifyTableName(schemaName, tableName);
@@ -504,7 +600,20 @@ function buildAddColumnOperationIdentity(schema, tableName, columnName) {
504
600
  }
505
601
  async function buildAddNotNullColumnWithTemporaryDefaultOperation(options) {
506
602
  const { schema, tableName, columnName, column, codecHooks, storageTypes, temporaryDefault, lowerer } = options;
507
- const qualified = qualifyTableName(schema, tableName);
603
+ const ddlColumn = col(columnName, buildColumnTypeSql(column, codecHooks, storageTypes), {
604
+ notNull: true,
605
+ default: new FunctionColumnDefault(temporaryDefault)
606
+ });
607
+ const addColumn = await lowerer.lowerToExecuteRequest(alterTable({
608
+ ...ifDefined("schema", boundSchema(schema)),
609
+ table: tableName,
610
+ actions: [addColumnAction(ddlColumn)]
611
+ }));
612
+ const dropTempDefault = await lowerer.lowerToExecuteRequest(alterTable({
613
+ ...ifDefined("schema", boundSchema(schema)),
614
+ table: tableName,
615
+ actions: [dropDefaultAction(columnName)]
616
+ }));
508
617
  const absent = await lowerer.lowerToExecuteRequest(columnExistsAst({
509
618
  schema,
510
619
  table: tableName,
@@ -532,10 +641,10 @@ async function buildAddNotNullColumnWithTemporaryDefaultOperation(options) {
532
641
  precheck: [step(`ensure column "${columnName}" is missing`, absent.sql, absent.params)],
533
642
  execute: [{
534
643
  description: `add column "${columnName}"`,
535
- sql: buildAddColumnSql(qualified, columnName, column, codecHooks, temporaryDefault, storageTypes)
644
+ sql: addColumn.sql
536
645
  }, {
537
646
  description: `drop temporary default from column "${columnName}"`,
538
- sql: `ALTER TABLE ${qualified} ALTER COLUMN ${quoteIdentifier(columnName)} DROP DEFAULT`
647
+ sql: dropTempDefault.sql
539
648
  }],
540
649
  postcheck: [
541
650
  step(`verify column "${columnName}" exists`, present.sql, present.params),
@@ -568,9 +677,6 @@ async function buildAddNotNullColumnWithTemporaryDefaultOperation(options) {
568
677
  * `PostgresOpFactoryCall` union.
569
678
  */
570
679
  const POSTGRES_MIGRATION_FACADE = "@prisma-next/postgres/migration";
571
- function boundSchema(schemaName) {
572
- return schemaName === UNBOUND_NAMESPACE_ID ? void 0 : schemaName;
573
- }
574
680
  var PostgresOpFactoryCallNode = class extends TsExpression {
575
681
  importRequirements() {
576
682
  return [{
@@ -998,10 +1104,8 @@ var DropDefaultCall = class extends PostgresOpFactoryCallNode {
998
1104
  };
999
1105
  /**
1000
1106
  * Planner-internal call for adding a NOT NULL column (no contract default) to
1001
- * a table that must be empty at migration time. Carries the raw ADD COLUMN SQL
1002
- * (produced by `buildAddColumnSql` at plan time deferred from slice-7 typed
1003
- * DDL) plus the parameters needed to lower the typed pre/postchecks at render
1004
- * time.
1107
+ * a table that must be empty at migration time. Carries the typed `DdlColumn`
1108
+ * and lowers it to an ADD COLUMN execute step via the adapter at `toOp` time.
1005
1109
  *
1006
1110
  * No authored `PostgresMigration` method: this call is only emitted by the
1007
1111
  * planner, never hand-written by migration authors.
@@ -1012,20 +1116,20 @@ var AddNotNullColumnDirectCall = class extends PostgresOpFactoryCallNode {
1012
1116
  schemaName;
1013
1117
  tableName;
1014
1118
  columnName;
1015
- executeStepSql;
1119
+ column;
1016
1120
  label;
1017
- constructor(schemaName, tableName, columnName, executeStepSql) {
1121
+ constructor(schemaName, tableName, columnName, column) {
1018
1122
  super();
1019
1123
  this.schemaName = schemaName;
1020
1124
  this.tableName = tableName;
1021
1125
  this.columnName = columnName;
1022
- this.executeStepSql = executeStepSql;
1126
+ this.column = column;
1023
1127
  this.label = `Add column ${columnName} to ${tableName}`;
1024
1128
  this.freeze();
1025
1129
  }
1026
1130
  async toOp(lowerer) {
1027
1131
  if (lowerer === void 0) throw new Error(`AddNotNullColumnDirectCall.toOp: a lowerer is required on the Postgres planner path (column "${this.columnName}" on table "${this.tableName}"). Pass the control adapter to createPostgresMigrationPlanner.`);
1028
- return addNotNullColumnDirect(this.schemaName, this.tableName, this.columnName, this.executeStepSql, lowerer);
1132
+ return addNotNullColumnDirect(this.schemaName, this.tableName, this.column, lowerer);
1029
1133
  }
1030
1134
  renderTypeScript() {
1031
1135
  return `rawSql(${jsonToTsSource({
@@ -1041,9 +1145,9 @@ var AddNotNullColumnDirectCall = class extends PostgresOpFactoryCallNode {
1041
1145
  /**
1042
1146
  * Planner-internal call for adding a NOT NULL column (no contract default)
1043
1147
  * using a temporary default value for non-empty tables. Carries all parameters
1044
- * needed for `buildAddNotNullColumnWithTemporaryDefaultOperation`; the typed
1045
- * pre/postchecks are lowered at render time via `toOp(lowerer)`. The execute
1046
- * SQL (`buildAddColumnSql`) is still raw per slice-7 deferral.
1148
+ * needed for `buildAddNotNullColumnWithTemporaryDefaultOperation`; both the
1149
+ * typed ADD COLUMN execute step and the pre/postchecks are lowered via the
1150
+ * adapter at `toOp` time.
1047
1151
  *
1048
1152
  * No authored `PostgresMigration` method: this call is only emitted by the
1049
1153
  * planner, never hand-written by migration authors.
@@ -1484,7 +1588,74 @@ var DataTransformCall = class extends PostgresOpFactoryCallNode {
1484
1588
  }];
1485
1589
  }
1486
1590
  };
1591
+ var CreatePostgresRlsPolicyCall = class extends PostgresOpFactoryCallNode {
1592
+ factoryName = "createRlsPolicy";
1593
+ operationClass = "additive";
1594
+ schemaName;
1595
+ tableName;
1596
+ policy;
1597
+ label;
1598
+ constructor(schemaName, tableName, policy) {
1599
+ super();
1600
+ this.schemaName = schemaName;
1601
+ this.tableName = tableName;
1602
+ this.policy = policy;
1603
+ this.label = `Create RLS policy "${policy.name}" on "${tableName}"`;
1604
+ this.freeze();
1605
+ }
1606
+ async toOp(lowerer) {
1607
+ if (lowerer === void 0) throw new Error(`CreatePostgresRlsPolicyCall.toOp: a lowerer is required on the Postgres planner path (policy "${this.policy.name}" on table "${this.tableName}"). Pass the control adapter to createPostgresMigrationPlanner.`);
1608
+ return createRlsPolicy(this.schemaName, this.tableName, this.policy, lowerer);
1609
+ }
1610
+ renderTypeScript() {
1611
+ return `createRlsPolicy(${jsonToTsSource(this.schemaName)}, ${jsonToTsSource(this.tableName)}, ${jsonToTsSource(this.policy)})`;
1612
+ }
1613
+ };
1614
+ var DropPostgresRlsPolicyCall = class extends PostgresOpFactoryCallNode {
1615
+ factoryName = "dropRlsPolicy";
1616
+ operationClass = "destructive";
1617
+ schemaName;
1618
+ tableName;
1619
+ policyName;
1620
+ label;
1621
+ constructor(schemaName, tableName, policyName) {
1622
+ super();
1623
+ this.schemaName = schemaName;
1624
+ this.tableName = tableName;
1625
+ this.policyName = policyName;
1626
+ this.label = `Drop RLS policy "${policyName}" on "${tableName}"`;
1627
+ this.freeze();
1628
+ }
1629
+ async toOp(lowerer) {
1630
+ if (lowerer === void 0) throw new Error(`DropPostgresRlsPolicyCall.toOp: a lowerer is required on the Postgres planner path (policy "${this.policyName}" on table "${this.tableName}"). Pass the control adapter to createPostgresMigrationPlanner.`);
1631
+ return dropRlsPolicy(this.schemaName, this.tableName, this.policyName, lowerer);
1632
+ }
1633
+ renderTypeScript() {
1634
+ return `dropRlsPolicy(${jsonToTsSource(this.schemaName)}, ${jsonToTsSource(this.tableName)}, ${jsonToTsSource(this.policyName)})`;
1635
+ }
1636
+ };
1637
+ var EnableRowLevelSecurityCall = class extends PostgresOpFactoryCallNode {
1638
+ factoryName = "enableRowLevelSecurity";
1639
+ operationClass = "additive";
1640
+ schemaName;
1641
+ tableName;
1642
+ label;
1643
+ constructor(schemaName, tableName) {
1644
+ super();
1645
+ this.schemaName = schemaName;
1646
+ this.tableName = tableName;
1647
+ this.label = `Enable row-level security on "${tableName}"`;
1648
+ this.freeze();
1649
+ }
1650
+ async toOp(lowerer) {
1651
+ if (lowerer === void 0) throw new Error(`EnableRowLevelSecurityCall.toOp: a lowerer is required on the Postgres planner path (table "${this.tableName}"). Pass the control adapter to createPostgresMigrationPlanner.`);
1652
+ return enableRowLevelSecurity(this.schemaName, this.tableName, lowerer);
1653
+ }
1654
+ renderTypeScript() {
1655
+ return `enableRowLevelSecurity(${jsonToTsSource(this.schemaName)}, ${jsonToTsSource(this.tableName)})`;
1656
+ }
1657
+ };
1487
1658
  //#endregion
1488
- export { SetNotNullCall as C, installExtension as D, createExtension as E, SetDefaultCall as S, buildTargetDetails as T, DropDefaultCall as _, AddNotNullColumnWithTempDefaultCall as a, DropTableCall as b, AlterColumnTypeCall as c, CreateSchemaCall as d, CreateTableCall as f, DropConstraintCall as g, DropColumnCall as h, AddNotNullColumnDirectCall as i, CreateExtensionCall as l, DropCheckConstraintCall as m, AddColumnCall as n, AddPrimaryKeyCall as o, DataTransformCall as p, AddForeignKeyCall as r, AddUniqueCall as s, AddCheckConstraintCall as t, CreateIndexCall as u, DropIndexCall as v, postgresDefaultToDdlColumnDefault as w, RawSqlCall as x, DropNotNullCall as y };
1659
+ export { installExtension as A, EnableRowLevelSecurityCall as C, postgresDefaultToDdlColumnDefault as D, SetNotNullCall as E, buildTargetDetails as O, DropTableCall as S, SetDefaultCall as T, DropConstraintCall as _, AddNotNullColumnWithTempDefaultCall as a, DropNotNullCall as b, AlterColumnTypeCall as c, CreatePostgresRlsPolicyCall as d, CreateSchemaCall as f, DropColumnCall as g, DropCheckConstraintCall as h, AddNotNullColumnDirectCall as i, createExtension as k, CreateExtensionCall as l, DataTransformCall as m, AddColumnCall as n, AddPrimaryKeyCall as o, CreateTableCall as p, AddForeignKeyCall as r, AddUniqueCall as s, AddCheckConstraintCall as t, CreateIndexCall as u, DropDefaultCall as v, RawSqlCall as w, DropPostgresRlsPolicyCall as x, DropIndexCall as y };
1489
1660
 
1490
- //# sourceMappingURL=op-factory-call-D_p5vxwt.mjs.map
1661
+ //# sourceMappingURL=op-factory-call-DIdBDwmO.mjs.map