@prisma-next/target-postgres 0.14.0-dev.73 → 0.14.0-dev.74
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/contract-free.mjs +1 -1
- package/dist/{control-policy-CuUhjWnn.mjs → control-policy-5LE2kwfb.mjs} +35 -8
- package/dist/control-policy-5LE2kwfb.mjs.map +1 -0
- package/dist/control.mjs +2 -2
- package/dist/control.mjs.map +1 -1
- package/dist/{ddl-Dqgs-bDc.mjs → ddl-BQzITB_e.mjs} +37 -2
- package/dist/ddl-BQzITB_e.mjs.map +1 -0
- package/dist/{diff-database-schema-ClN3bkRS.mjs → diff-database-schema-DULhiCNM.mjs} +2 -2
- package/dist/{diff-database-schema-ClN3bkRS.mjs.map → diff-database-schema-DULhiCNM.mjs.map} +1 -1
- package/dist/diff-database-schema.mjs +1 -1
- package/dist/issue-planner.d.mts +1 -1
- package/dist/issue-planner.d.mts.map +1 -1
- package/dist/issue-planner.mjs +1 -1
- package/dist/migration.d.mts +2 -2
- package/dist/migration.mjs +2 -2
- package/dist/{op-factory-call-CSIg5XDu.d.mts → op-factory-call-Bn9zDx4_.d.mts} +26 -3
- package/dist/{op-factory-call-CSIg5XDu.d.mts.map → op-factory-call-Bn9zDx4_.d.mts.map} +1 -1
- package/dist/{op-factory-call-DtVSP_7Y.mjs → op-factory-call-D6yu-PlS.mjs} +73 -4
- package/dist/op-factory-call-D6yu-PlS.mjs.map +1 -0
- package/dist/op-factory-call.d.mts +2 -2
- package/dist/op-factory-call.mjs +2 -2
- package/dist/{planner-ChVasl04.mjs → planner-DwDxdYxi.mjs} +5 -5
- package/dist/{planner-ChVasl04.mjs.map → planner-DwDxdYxi.mjs.map} +1 -1
- package/dist/{planner-produced-postgres-migration-CXue-6M9.d.mts → planner-produced-postgres-migration-BEY1T0Xm.d.mts} +2 -2
- package/dist/{planner-produced-postgres-migration-CXue-6M9.d.mts.map → planner-produced-postgres-migration-BEY1T0Xm.d.mts.map} +1 -1
- package/dist/{planner-produced-postgres-migration-qpU05c__.mjs → planner-produced-postgres-migration-BGPpq56_.mjs} +2 -2
- package/dist/{planner-produced-postgres-migration-qpU05c__.mjs.map → planner-produced-postgres-migration-BGPpq56_.mjs.map} +1 -1
- package/dist/planner-produced-postgres-migration.d.mts +1 -1
- package/dist/planner-produced-postgres-migration.mjs +1 -1
- package/dist/planner.d.mts +1 -1
- package/dist/planner.mjs +2 -2
- package/dist/{postgres-migration-DkmgGNcv.d.mts → postgres-migration-DbckK1su.d.mts} +13 -2
- package/dist/postgres-migration-DbckK1su.d.mts.map +1 -0
- package/dist/{postgres-migration-fndp3Mbm.mjs → postgres-migration-et1td40f.mjs} +11 -2
- package/dist/postgres-migration-et1td40f.mjs.map +1 -0
- package/package.json +20 -20
- package/src/contract-free/checks.ts +80 -0
- package/src/core/migrations/issue-planner.ts +56 -8
- package/src/core/migrations/op-factory-call.ts +110 -2
- package/src/core/migrations/postgres-migration.ts +17 -0
- package/src/core/psl-infer/infer-psl-contract.ts +4 -4
- package/src/exports/op-factory-call.ts +1 -0
- package/dist/control-policy-CuUhjWnn.mjs.map +0 -1
- package/dist/ddl-Dqgs-bDc.mjs.map +0 -1
- package/dist/op-factory-call-DtVSP_7Y.mjs.map +0 -1
- package/dist/postgres-migration-DkmgGNcv.d.mts.map +0 -1
- package/dist/postgres-migration-fndp3Mbm.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ddl-Dqgs-bDc.mjs","names":[],"sources":["../src/contract-free/checks.ts","../src/contract-free/ddl.ts"],"sourcesContent":["import type { SelectAst } from '@prisma-next/sql-relational-core/ast';\nimport {\n type CfExpr,\n type CfExprSelectQuery,\n cfExpr,\n cfTable,\n exprSelect,\n} from '@prisma-next/sql-relational-core/contract-free';\nimport { PostgresTableSource } from '../core/ast/table-source';\nimport { PG_TEXT_CODEC_ID } from '../core/codec-ids';\nimport { postgresCreateNamespace } from '../core/postgres-schema';\n\n/**\n * `to_regclass($1)` with the qualified table name bound as a text parameter.\n * Thin vocabulary wrapper over the core `cfExpr.fn` helper — the target\n * supplies only the template and the codec'd operand.\n */\nexport function toRegclass(qualifiedName: string): CfExpr {\n return cfExpr.fn({\n method: 'to_regclass',\n template: 'to_regclass({{self}})',\n self: cfExpr.param(qualifiedName, PG_TEXT_CODEC_ID),\n returns: { codecId: PG_TEXT_CODEC_ID, nullable: true },\n });\n}\n\nexport interface TableExistsCheckBuilder {\n tableAbsent(): SelectAst;\n tablePresent(): SelectAst;\n}\n\n/**\n * Typed builder for the migration planner's table-existence checks. Produces\n * FROM-less `SELECT to_regclass($1) IS [NOT] NULL AS \"result\"` ASTs with the\n * qualified table name bound as a text parameter — never inlined into the SQL.\n *\n * `schema` is a namespace coordinate: the framework `__unbound__` sentinel\n * elides the qualifier (search_path decides at runtime); any other id\n * qualifies as `\"schema\".\"table\"`.\n */\nexport function tableExistsAst(schema: string, table: string): TableExistsCheckBuilder {\n const qualified = postgresCreateNamespace({ id: schema, entries: { table: {} } }).qualifyTable(\n table,\n );\n const regclass = toRegclass(qualified);\n return {\n tableAbsent: () => exprSelect().project('result', regclass.isNull()).build(),\n tablePresent: () => exprSelect().project('result', regclass.isNotNull()).build(),\n };\n}\n\nexport interface ConstraintExistsCheckBuilder {\n constraintPresent(): SelectAst;\n constraintAbsent(): SelectAst;\n}\n\n/**\n * Typed builder for the migration planner's constraint-existence checks.\n * Produces `SELECT [NOT ]EXISTS (SELECT 1 FROM pg_constraint c JOIN\n * pg_namespace n ON n.oid = c.connamespace WHERE c.conname = $1 AND\n * n.nspname = $2 [AND c.conrelid = to_regclass($3)]) AS \"result\"` with the\n * constraint name, schema name, and qualified table name bound as text\n * parameters.\n *\n * When `table` is omitted the check matches by name + schema across all\n * tables. Pass `table` to scope the check to a single table (prevents false\n * matches on identically-named constraints in different tables). `schema`\n * is a namespace coordinate: the `__unbound__` sentinel compares `nspname`\n * against `current_schema()` instead of a bound parameter.\n */\nexport function constraintExistsAst(options: {\n readonly constraintName: string;\n readonly schema: string;\n readonly table?: string;\n}): ConstraintExistsCheckBuilder {\n const namespace = postgresCreateNamespace({ id: options.schema, entries: { table: {} } });\n const conditions = [\n cfExpr.columnRef('c', 'conname').eqParam(options.constraintName, PG_TEXT_CODEC_ID),\n cfExpr.columnRef('n', 'nspname').eqExpr(namespace.schemaFilterExpression()),\n ];\n if (options.table !== undefined) {\n conditions.push(\n cfExpr.columnRef('c', 'conrelid').eqExpr(toRegclass(namespace.qualifyTable(options.table))),\n );\n }\n const inner = (): CfExprSelectQuery =>\n exprSelect()\n .from(cfTable('pg_constraint', 'c'))\n .join(\n cfTable('pg_namespace', 'n'),\n cfExpr.columnRef('n', 'oid').eqExpr(cfExpr.columnRef('c', 'connamespace')),\n )\n .project('one', cfExpr.lit(1))\n .where(cfExpr.allOf(conditions));\n return {\n constraintPresent: () => exprSelect().project('result', cfExpr.exists(inner())).build(),\n constraintAbsent: () => exprSelect().project('result', cfExpr.notExists(inner())).build(),\n };\n}\n\nfunction checkNamespace(schema: string) {\n return postgresCreateNamespace({ id: schema, entries: { table: {} } });\n}\n\nfunction informationSchemaColumns(): PostgresTableSource {\n return new PostgresTableSource({ schema: 'information_schema', name: 'columns' });\n}\n\nfunction infoSchemaColumnConditions(options: {\n readonly schema: string;\n readonly table: string;\n readonly column: string;\n}): CfExpr[] {\n return [\n cfExpr\n .identifierRef('table_schema')\n .eqExpr(checkNamespace(options.schema).schemaFilterExpression()),\n cfExpr.identifierRef('table_name').eqParam(options.table, PG_TEXT_CODEC_ID),\n cfExpr.identifierRef('column_name').eqParam(options.column, PG_TEXT_CODEC_ID),\n ];\n}\n\nfunction infoSchemaColumnQuery(conditions: ReadonlyArray<CfExpr>): CfExprSelectQuery {\n return exprSelect()\n .from(informationSchemaColumns())\n .project('one', cfExpr.lit(1))\n .where(cfExpr.allOf(conditions));\n}\n\nexport interface ColumnExistsCheckBuilder {\n columnPresent(): SelectAst;\n columnAbsent(): SelectAst;\n}\n\n/**\n * Typed builder for column-existence checks over\n * `information_schema.columns`, with schema, table, and column names bound\n * as text parameters.\n */\nexport function columnExistsAst(options: {\n readonly schema: string;\n readonly table: string;\n readonly column: string;\n}): ColumnExistsCheckBuilder {\n const inner = () => infoSchemaColumnQuery(infoSchemaColumnConditions(options));\n return {\n columnPresent: () => exprSelect().project('result', cfExpr.exists(inner())).build(),\n columnAbsent: () => exprSelect().project('result', cfExpr.notExists(inner())).build(),\n };\n}\n\n/**\n * Typed nullability check: EXISTS over `information_schema.columns` with\n * `is_nullable` compared against the bound `'YES'` / `'NO'` marker.\n */\nexport function columnNullabilityAst(options: {\n readonly schema: string;\n readonly table: string;\n readonly column: string;\n readonly nullable: boolean;\n}): SelectAst {\n const conditions = [\n ...infoSchemaColumnConditions(options),\n cfExpr.identifierRef('is_nullable').eqParam(options.nullable ? 'YES' : 'NO', PG_TEXT_CODEC_ID),\n ];\n return exprSelect()\n .project('result', cfExpr.exists(infoSchemaColumnQuery(conditions)))\n .build();\n}\n\nexport interface ColumnDefaultCheckBuilder {\n defaultPresent(): SelectAst;\n defaultAbsent(): SelectAst;\n noDefault(): SelectAst;\n}\n\n/**\n * Typed default-presence checks over `information_schema.columns`.\n * `defaultPresent` / `defaultAbsent` assert the column row exists with a\n * non-null / null `column_default`; `noDefault` is the NOT EXISTS variant\n * (also true when the column row is missing entirely).\n */\nexport function columnDefaultAst(options: {\n readonly schema: string;\n readonly table: string;\n readonly column: string;\n}): ColumnDefaultCheckBuilder {\n const withDefault = () =>\n infoSchemaColumnQuery([\n ...infoSchemaColumnConditions(options),\n cfExpr.identifierRef('column_default').isNotNull(),\n ]);\n const withoutDefault = () =>\n infoSchemaColumnQuery([\n ...infoSchemaColumnConditions(options),\n cfExpr.identifierRef('column_default').isNull(),\n ]);\n return {\n defaultPresent: () => exprSelect().project('result', cfExpr.exists(withDefault())).build(),\n defaultAbsent: () => exprSelect().project('result', cfExpr.exists(withoutDefault())).build(),\n noDefault: () => exprSelect().project('result', cfExpr.notExists(withDefault())).build(),\n };\n}\n\n/**\n * Typed column-type check: EXISTS over `pg_attribute` joined to `pg_class`\n * and `pg_namespace`, comparing `format_type(a.atttypid, a.atttypmod)`\n * against the bound expected display type and excluding dropped columns.\n */\nexport function columnTypeAst(options: {\n readonly schema: string;\n readonly table: string;\n readonly column: string;\n readonly expectedType: string;\n}): SelectAst {\n const formatType = cfExpr.fn({\n method: 'format_type',\n template: 'format_type({{self}}, {{arg0}})',\n self: cfExpr.columnRef('a', 'atttypid'),\n args: [cfExpr.columnRef('a', 'atttypmod')],\n returns: { codecId: PG_TEXT_CODEC_ID, nullable: false },\n });\n const inner = exprSelect()\n .from(cfTable('pg_attribute', 'a'))\n .join(\n cfTable('pg_class', 'c'),\n cfExpr.columnRef('c', 'oid').eqExpr(cfExpr.columnRef('a', 'attrelid')),\n )\n .join(\n cfTable('pg_namespace', 'n'),\n cfExpr.columnRef('n', 'oid').eqExpr(cfExpr.columnRef('c', 'relnamespace')),\n )\n .project('one', cfExpr.lit(1))\n .where(\n cfExpr.allOf([\n cfExpr\n .columnRef('n', 'nspname')\n .eqExpr(checkNamespace(options.schema).schemaFilterExpression()),\n cfExpr.columnRef('c', 'relname').eqParam(options.table, PG_TEXT_CODEC_ID),\n cfExpr.columnRef('a', 'attname').eqParam(options.column, PG_TEXT_CODEC_ID),\n formatType.eqParam(options.expectedType, PG_TEXT_CODEC_ID),\n cfExpr.columnRef('a', 'attisdropped').not(),\n ]),\n );\n return exprSelect().project('result', cfExpr.exists(inner)).build();\n}\n\nexport interface TablePrimaryKeyCheckBuilder {\n pkPresent(): SelectAst;\n pkAbsent(): SelectAst;\n}\n\n/**\n * Typed primary-key existence check over `pg_index` joined to `pg_class`\n * and `pg_namespace`, with a LEFT JOIN on the index relation so an\n * optional `constraintName` can scope the match to a named constraint.\n */\nexport function tablePrimaryKeyAst(options: {\n readonly schema: string;\n readonly table: string;\n readonly constraintName?: string;\n}): TablePrimaryKeyCheckBuilder {\n const conditions = [\n cfExpr\n .columnRef('n', 'nspname')\n .eqExpr(checkNamespace(options.schema).schemaFilterExpression()),\n cfExpr.columnRef('c', 'relname').eqParam(options.table, PG_TEXT_CODEC_ID),\n cfExpr.columnRef('i', 'indisprimary'),\n ];\n if (options.constraintName !== undefined) {\n conditions.push(\n cfExpr.columnRef('c2', 'relname').eqParam(options.constraintName, PG_TEXT_CODEC_ID),\n );\n }\n const inner = () =>\n exprSelect()\n .from(cfTable('pg_index', 'i'))\n .join(\n cfTable('pg_class', 'c'),\n cfExpr.columnRef('c', 'oid').eqExpr(cfExpr.columnRef('i', 'indrelid')),\n )\n .join(\n cfTable('pg_namespace', 'n'),\n cfExpr.columnRef('n', 'oid').eqExpr(cfExpr.columnRef('c', 'relnamespace')),\n )\n .leftJoin(\n cfTable('pg_class', 'c2'),\n cfExpr.columnRef('c2', 'oid').eqExpr(cfExpr.columnRef('i', 'indexrelid')),\n )\n .project('one', cfExpr.lit(1))\n .where(cfExpr.allOf(conditions));\n return {\n pkPresent: () => exprSelect().project('result', cfExpr.exists(inner())).build(),\n pkAbsent: () => exprSelect().project('result', cfExpr.notExists(inner())).build(),\n };\n}\n\n/**\n * Typed emptiness check: NOT EXISTS over the user table itself with\n * `LIMIT 1`. The table is addressed through the namespace's polymorphic\n * `tableSource` (qualified for named schemas, bare for the unbound slot).\n */\nexport function tableIsEmptyAst(schema: string, table: string): SelectAst {\n const inner = exprSelect()\n .from(checkNamespace(schema).tableSource(table))\n .project('one', cfExpr.lit(1))\n .limit(1);\n return exprSelect().project('result', cfExpr.notExists(inner)).build();\n}\n\n/**\n * Typed no-NULL-values data check used by `SET NOT NULL` prechecks:\n * NOT EXISTS over the user table where the column IS NULL.\n */\nexport function noNullValuesAst(options: {\n readonly schema: string;\n readonly table: string;\n readonly column: string;\n}): SelectAst {\n const inner = exprSelect()\n .from(checkNamespace(options.schema).tableSource(options.table))\n .project('one', cfExpr.lit(1))\n .where(cfExpr.identifierRef(options.column).isNull());\n return exprSelect().project('result', cfExpr.notExists(inner)).build();\n}\n\nexport interface ExtensionExistsCheckBuilder {\n extensionPresent(): SelectAst;\n extensionAbsent(): SelectAst;\n}\n\n/**\n * Typed extension existence check over `pg_extension`, with the extension\n * name bound as a text parameter.\n */\nexport function extensionExistsAst(extensionName: string): ExtensionExistsCheckBuilder {\n const inner = () =>\n exprSelect()\n .from(cfTable('pg_extension'))\n .project('one', cfExpr.lit(1))\n .where(cfExpr.identifierRef('extname').eqParam(extensionName, PG_TEXT_CODEC_ID));\n return {\n extensionPresent: () => exprSelect().project('result', cfExpr.exists(inner())).build(),\n extensionAbsent: () => exprSelect().project('result', cfExpr.notExists(inner())).build(),\n };\n}\n\nexport interface RlsPolicyExistsCheckBuilder {\n policyPresent(): SelectAst;\n policyAbsent(): SelectAst;\n}\n\n/**\n * Typed RLS-policy existence check over `pg_policies`, with schema, table,\n * and policy names bound as text parameters (never inlined). The `schema`\n * coordinate is the resolved live-database schema name (e.g. `'public'`),\n * compared against `pg_policies.schemaname` as a bound parameter.\n */\nexport function rlsPolicyExistsAst(options: {\n readonly schema: string;\n readonly table: string;\n readonly policyName: string;\n}): RlsPolicyExistsCheckBuilder {\n const inner = () =>\n exprSelect()\n .from(cfTable('pg_policies'))\n .project('one', cfExpr.lit(1))\n .where(\n cfExpr.allOf([\n cfExpr.identifierRef('schemaname').eqParam(options.schema, PG_TEXT_CODEC_ID),\n cfExpr.identifierRef('tablename').eqParam(options.table, PG_TEXT_CODEC_ID),\n cfExpr.identifierRef('policyname').eqParam(options.policyName, PG_TEXT_CODEC_ID),\n ]),\n );\n return {\n policyPresent: () => exprSelect().project('result', cfExpr.exists(inner())).build(),\n policyAbsent: () => exprSelect().project('result', cfExpr.notExists(inner())).build(),\n };\n}\n\nexport interface RlsEnabledCheckBuilder {\n rlsEnabled(): SelectAst;\n rlsDisabled(): SelectAst;\n}\n\n/**\n * Typed row-level-security enabled check over `pg_class` joined to\n * `pg_namespace`, comparing `pg_class.relrowsecurity` against the expected\n * boolean. Schema and table names are bound as text parameters.\n */\nexport function rlsEnabledAst(schema: string, table: string): RlsEnabledCheckBuilder {\n const inner = (enabled: boolean) =>\n exprSelect()\n .from(cfTable('pg_class', 'c'))\n .join(\n cfTable('pg_namespace', 'n'),\n cfExpr.columnRef('n', 'oid').eqExpr(cfExpr.columnRef('c', 'relnamespace')),\n )\n .project('one', cfExpr.lit(1))\n .where(\n cfExpr.allOf([\n cfExpr.columnRef('n', 'nspname').eqParam(schema, PG_TEXT_CODEC_ID),\n cfExpr.columnRef('c', 'relname').eqParam(table, PG_TEXT_CODEC_ID),\n enabled\n ? cfExpr.columnRef('c', 'relrowsecurity')\n : cfExpr.columnRef('c', 'relrowsecurity').not(),\n ]),\n );\n return {\n rlsEnabled: () =>\n exprSelect()\n .project('result', cfExpr.exists(inner(true)))\n .build(),\n rlsDisabled: () =>\n exprSelect()\n .project('result', cfExpr.exists(inner(false)))\n .build(),\n };\n}\n\nexport interface IndexExistsCheckBuilder {\n indexPresent(): SelectAst;\n indexAbsent(): SelectAst;\n}\n\n/**\n * Typed index existence check riding the same `to_regclass` vocabulary as\n * `tableExistsAst`, with the qualified index name bound as a text parameter.\n */\nexport function indexExistsAst(schema: string, indexName: string): IndexExistsCheckBuilder {\n const regclass = toRegclass(checkNamespace(schema).qualifyTable(indexName));\n return {\n indexPresent: () => exprSelect().project('result', regclass.isNotNull()).build(),\n indexAbsent: () => exprSelect().project('result', regclass.isNull()).build(),\n };\n}\n","import type { DdlColumn, DdlTableConstraint } from '@prisma-next/sql-relational-core/ast';\nimport {\n AddColumnAction,\n type AnyAlterTableAction,\n DropDefaultAction,\n PostgresAlterPolicyRename,\n PostgresAlterTable,\n PostgresCreatePolicy,\n PostgresCreateSchema,\n PostgresCreateTable,\n PostgresCreateType,\n PostgresDisableRowLevelSecurity,\n PostgresDropPolicy,\n PostgresDropType,\n type RlsPolicyOperation,\n} from '../core/ddl/nodes';\n\n/**\n * Build a Postgres `CREATE TABLE` query node.\n *\n * Pass `constraints` for table-level composite primary keys, foreign keys, and\n * unique constraints — use the {@link PrimaryKeyConstraint}, {@link ForeignKeyConstraint},\n * and {@link UniqueConstraint} classes from `@prisma-next/sql-relational-core/ast`.\n *\n * Precondition: identifiers (`table`, `schema`, column names/types) are\n * emitted to SQL verbatim — they are not quoted or escaped, so callers must\n * pass pre-trusted values (e.g. fixed control-plane identifiers). String-literal\n * default values, by contrast, are single-quote-escaped (embedded `'` doubled)\n * by the renderer. Identifier quoting for untrusted identifiers is added when\n * the migration planner adopts this lowering path.\n */\nexport function createTable(options: {\n readonly table: string;\n readonly schema?: string;\n readonly ifNotExists?: boolean;\n readonly columns: readonly DdlColumn[];\n readonly constraints?: readonly DdlTableConstraint[];\n}): PostgresCreateTable {\n return new PostgresCreateTable(options);\n}\n\n/**\n * Build a Postgres `CREATE SCHEMA` query node. See {@link createTable} for the\n * pre-trusted-identifier precondition.\n */\nexport function createSchema(options: {\n readonly schema: string;\n readonly ifNotExists?: boolean;\n}): PostgresCreateSchema {\n return new PostgresCreateSchema(options);\n}\n\n/**\n * Build a Postgres `CREATE TYPE … AS ENUM (…)` DDL node. The type name (and\n * optional schema) are quoted by the renderer; the enum member `values` are\n * emitted as single-quote-escaped string literals. An absent `schema` renders\n * the type name unqualified so the connection's `search_path` resolves it.\n */\nexport function createType(options: {\n readonly schema?: string;\n readonly name: string;\n readonly values: readonly string[];\n}): PostgresCreateType {\n return new PostgresCreateType(options);\n}\n\n/**\n * Build a Postgres `DROP TYPE` DDL node. See {@link createType} for the\n * identifier-quoting and unqualified-when-schemaless behaviour.\n */\nexport function dropType(options: {\n readonly schema?: string;\n readonly name: string;\n}): PostgresDropType {\n return new PostgresDropType(options);\n}\n\n/**\n * Build an `ADD COLUMN` action for use inside {@link alterTable}.\n * The column is a structured `DdlColumn` so codec-encoded defaults flow\n * through the adapter's `pgRenderDdlColumn` → `pgRenderDdlColumnDefault` path.\n */\nexport function addColumnAction(column: DdlColumn): AddColumnAction {\n return new AddColumnAction(column);\n}\n\n/**\n * Build a `DROP DEFAULT` action (`ALTER COLUMN \"<name>\" DROP DEFAULT`) for\n * use inside {@link alterTable}. The renderer quotes the column name.\n */\nexport function dropDefaultAction(columnName: string): DropDefaultAction {\n return new DropDefaultAction(columnName);\n}\n\n/**\n * Build a Postgres `ALTER TABLE` query node carrying one or more actions.\n * See {@link addColumnAction} / {@link dropDefaultAction} for building actions.\n */\nexport function alterTable(options: {\n readonly table: string;\n readonly schema?: string;\n readonly actions: readonly AnyAlterTableAction[];\n}): PostgresAlterTable {\n return new PostgresAlterTable(options);\n}\n\n/**\n * Build a Postgres `CREATE POLICY` DDL node.\n *\n * Identifiers (`schema`, `table`, `name`) are quoted by the renderer.\n * `using` and `withCheck` are emitted verbatim as predicate SQL — callers\n * must supply safe, pre-validated SQL expressions.\n */\nexport function createPolicy(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}): PostgresCreatePolicy {\n return new PostgresCreatePolicy(options);\n}\n\n/**\n * Build a Postgres `DROP POLICY` DDL node.\n * Identifiers (`schema`, `table`, `name`) are quoted by the renderer.\n */\nexport function dropPolicy(options: {\n readonly schema: string;\n readonly table: string;\n readonly name: string;\n}): PostgresDropPolicy {\n return new PostgresDropPolicy(options);\n}\n\n/**\n * Build a Postgres `ALTER POLICY … RENAME TO` DDL node.\n * Identifiers (`schema`, `table`, `name`, `newName`) are quoted by the renderer.\n */\nexport function alterPolicyRename(options: {\n readonly schema: string;\n readonly table: string;\n readonly name: string;\n readonly newName: string;\n}): PostgresAlterPolicyRename {\n return new PostgresAlterPolicyRename(options);\n}\n\n/**\n * Build a Postgres `ALTER TABLE … DISABLE ROW LEVEL SECURITY` DDL node.\n * Identifiers (`schema`, `table`) are quoted by the renderer.\n */\nexport function disableRowLevelSecurity(options: {\n readonly schema: string;\n readonly table: string;\n}): PostgresDisableRowLevelSecurity {\n return new PostgresDisableRowLevelSecurity(options);\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"op-factory-call-DtVSP_7Y.mjs","names":["contractFreeDdl.alterTable","contractFreeDdl.dropDefaultAction","contractFreeDdl.addColumnAction","disableRowLevelSecurityDdl","contractFreeDdl.alterTable","contractFreeDdl.addColumnAction","contractFreeDdl.dropDefaultAction","exhaustive","contractFreeDdl.createTable","contractFreeDdl.alterTable","contractFreeDdl.addColumnAction","contractFreeDdl.createSchema"],"sources":["../src/core/migrations/bound-schema.ts","../src/core/migrations/operations/shared.ts","../src/core/migrations/operations/columns.ts","../src/core/migrations/operations/constraints.ts","../src/core/migrations/operations/dependencies.ts","../src/core/migrations/operations/indexes.ts","../src/core/migrations/operations/native-enum-types.ts","../src/core/migrations/operations/rls.ts","../src/core/migrations/operations/tables.ts","../src/core/migrations/planner-target-details.ts","../src/core/migrations/planner-recipes.ts","../src/core/migrations/op-factory-call.ts"],"sourcesContent":["import { UNBOUND_NAMESPACE_ID } from '@prisma-next/framework-components/ir';\n\n/**\n * Maps a planner schema name to the contract-free DDL builder's optional\n * `schema` field: the unbound sentinel becomes `undefined` (the builder omits\n * the schema qualifier), every other name passes through.\n */\nexport function boundSchema(schemaName: string): string | undefined {\n return schemaName === UNBOUND_NAMESPACE_ID ? undefined : schemaName;\n}\n","import type { SqlMigrationPlanOperation } from '@prisma-next/family-sql/control';\nimport type { ReferentialAction } from '@prisma-next/sql-contract/types';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport type { OperationClass, PostgresPlanTargetDetails } from '../planner-target-details';\n\nexport type Op = SqlMigrationPlanOperation<PostgresPlanTargetDetails>;\n\n/**\n * Literal-args shape for a foreign key definition. `references.schema`\n * carries the target table's namespace (schema) coordinate so the rendered\n * DDL qualifies the REFERENCES clause correctly for cross-schema FKs.\n */\nexport interface ForeignKeySpec {\n readonly name: string;\n readonly columns: readonly string[];\n readonly references: {\n readonly schema: string;\n readonly table: string;\n readonly columns: readonly string[];\n };\n readonly onDelete?: ReferentialAction;\n readonly onUpdate?: ReferentialAction;\n}\n\nexport function step(description: string, sql: string, params?: readonly unknown[]) {\n return { description, sql, ...ifDefined('params', params) };\n}\n\nexport function targetDetails(\n objectType: OperationClass,\n name: string,\n schema: string,\n table?: string,\n): { readonly id: 'postgres'; readonly details: PostgresPlanTargetDetails } {\n return {\n id: 'postgres',\n details: { schema, objectType, name, ...ifDefined('table', table) },\n };\n}\n","import type { ExecuteRequestLowerer } from '@prisma-next/family-sql/control-adapter';\nimport type { DdlColumn } from '@prisma-next/sql-relational-core/ast';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport {\n columnDefaultAst,\n columnExistsAst,\n columnNullabilityAst,\n columnTypeAst,\n noNullValuesAst,\n tableIsEmptyAst,\n} from '../../../contract-free/checks';\nimport * as contractFreeDdl from '../../../contract-free/ddl';\nimport { quoteIdentifier } from '../../sql-utils';\nimport { boundSchema } from '../bound-schema';\nimport { qualifyTableName } from '../planner-sql-checks';\nimport { type Op, step, targetDetails } from './shared';\n\ntype CheckStep = { sql: string; params?: readonly unknown[] };\n\nasync function columnExistsSteps(\n lowerer: ExecuteRequestLowerer,\n options: { schema: string; table: string; column: string },\n): Promise<{ present: CheckStep; absent: CheckStep }> {\n const checks = columnExistsAst(options);\n const present = await lowerer.lowerToExecuteRequest(checks.columnPresent());\n const absent = await lowerer.lowerToExecuteRequest(checks.columnAbsent());\n return { present, absent };\n}\n\nexport async function dropColumn(\n schemaName: string,\n tableName: string,\n columnName: string,\n lowerer: ExecuteRequestLowerer,\n): Promise<Op> {\n const qualified = qualifyTableName(schemaName, tableName);\n const { present, absent } = await columnExistsSteps(lowerer, {\n schema: schemaName,\n table: tableName,\n column: columnName,\n });\n return {\n id: `dropColumn.${tableName}.${columnName}`,\n label: `Drop column \"${columnName}\" from \"${tableName}\"`,\n operationClass: 'destructive',\n target: targetDetails('column', columnName, schemaName, tableName),\n precheck: [step(`ensure column \"${columnName}\" exists`, present.sql, present.params)],\n execute: [\n step(\n `drop column \"${columnName}\"`,\n `ALTER TABLE ${qualified} DROP COLUMN ${quoteIdentifier(columnName)}`,\n ),\n ],\n postcheck: [step(`verify column \"${columnName}\" does not exist`, absent.sql, absent.params)],\n };\n}\n\n/**\n * `qualifiedTargetType` is the new column type as it appears in the\n * `ALTER COLUMN TYPE` clause (schema-qualified for user-defined types, raw\n * native name for built-ins). `formatTypeExpected` is the unqualified\n * `format_type` form used in the postcheck. `rawTargetTypeForLabel` is the\n * string appearing in the human-readable label (typically `toType` when\n * explicit, else the column's native type).\n */\nexport async function alterColumnType(\n schemaName: string,\n tableName: string,\n columnName: string,\n options: {\n readonly qualifiedTargetType: string;\n readonly formatTypeExpected: string;\n readonly rawTargetTypeForLabel: string;\n readonly using?: string;\n },\n lowerer: ExecuteRequestLowerer,\n): Promise<Op> {\n const qualified = qualifyTableName(schemaName, tableName);\n const usingClause = options.using\n ? ` USING ${options.using}`\n : ` USING ${quoteIdentifier(columnName)}::${options.qualifiedTargetType}`;\n const { present } = await columnExistsSteps(lowerer, {\n schema: schemaName,\n table: tableName,\n column: columnName,\n });\n const typeCheck = await lowerer.lowerToExecuteRequest(\n columnTypeAst({\n schema: schemaName,\n table: tableName,\n column: columnName,\n expectedType: options.formatTypeExpected,\n }),\n );\n return {\n id: `alterType.${tableName}.${columnName}`,\n label: `Alter type of \"${tableName}\".\"${columnName}\" to ${options.rawTargetTypeForLabel}`,\n operationClass: 'destructive',\n target: targetDetails('column', columnName, schemaName, tableName),\n precheck: [step(`ensure column \"${columnName}\" exists`, present.sql, present.params)],\n execute: [\n step(\n `alter type of \"${columnName}\"`,\n `ALTER TABLE ${qualified} ALTER COLUMN ${quoteIdentifier(columnName)} TYPE ${options.qualifiedTargetType}${usingClause}`,\n ),\n ],\n postcheck: [\n step(\n `verify column \"${columnName}\" has type \"${options.formatTypeExpected}\"`,\n typeCheck.sql,\n typeCheck.params,\n ),\n ],\n meta: { warning: 'TABLE_REWRITE' },\n };\n}\n\nexport async function setNotNull(\n schemaName: string,\n tableName: string,\n columnName: string,\n lowerer: ExecuteRequestLowerer,\n): Promise<Op> {\n const qualified = qualifyTableName(schemaName, tableName);\n const { present } = await columnExistsSteps(lowerer, {\n schema: schemaName,\n table: tableName,\n column: columnName,\n });\n const noNulls = await lowerer.lowerToExecuteRequest(\n noNullValuesAst({ schema: schemaName, table: tableName, column: columnName }),\n );\n const notNullable = await lowerer.lowerToExecuteRequest(\n columnNullabilityAst({\n schema: schemaName,\n table: tableName,\n column: columnName,\n nullable: false,\n }),\n );\n return {\n id: `alterNullability.setNotNull.${tableName}.${columnName}`,\n label: `Set NOT NULL on \"${tableName}\".\"${columnName}\"`,\n operationClass: 'destructive',\n target: targetDetails('column', columnName, schemaName, tableName),\n precheck: [\n step(`ensure column \"${columnName}\" exists`, present.sql, present.params),\n step(`ensure no NULL values in \"${columnName}\"`, noNulls.sql, noNulls.params),\n ],\n execute: [\n step(\n `set NOT NULL on \"${columnName}\"`,\n `ALTER TABLE ${qualified} ALTER COLUMN ${quoteIdentifier(columnName)} SET NOT NULL`,\n ),\n ],\n postcheck: [\n step(`verify column \"${columnName}\" is NOT NULL`, notNullable.sql, notNullable.params),\n ],\n };\n}\n\nexport async function dropNotNull(\n schemaName: string,\n tableName: string,\n columnName: string,\n lowerer: ExecuteRequestLowerer,\n): Promise<Op> {\n const qualified = qualifyTableName(schemaName, tableName);\n const { present } = await columnExistsSteps(lowerer, {\n schema: schemaName,\n table: tableName,\n column: columnName,\n });\n const nullable = await lowerer.lowerToExecuteRequest(\n columnNullabilityAst({\n schema: schemaName,\n table: tableName,\n column: columnName,\n nullable: true,\n }),\n );\n return {\n id: `alterNullability.dropNotNull.${tableName}.${columnName}`,\n label: `Drop NOT NULL on \"${tableName}\".\"${columnName}\"`,\n operationClass: 'widening',\n target: targetDetails('column', columnName, schemaName, tableName),\n precheck: [step(`ensure column \"${columnName}\" exists`, present.sql, present.params)],\n execute: [\n step(\n `drop NOT NULL on \"${columnName}\"`,\n `ALTER TABLE ${qualified} ALTER COLUMN ${quoteIdentifier(columnName)} DROP NOT NULL`,\n ),\n ],\n postcheck: [step(`verify column \"${columnName}\" is nullable`, nullable.sql, nullable.params)],\n };\n}\n\n/**\n * `defaultSql` is the full `DEFAULT …` clause as produced by\n * `buildColumnDefaultSql` — e.g. `\"DEFAULT 42\"`,\n * `\"DEFAULT (CURRENT_TIMESTAMP)\"`, or `\"DEFAULT nextval('seq'::regclass)\"`.\n *\n * `operationClass` defaults to `'additive'` (setting a default on a column\n * that currently has none). The reconciliation planner passes `'widening'`\n * when the column already has a different default — policy enforcement\n * treats that as a widening change rather than an additive one.\n */\nexport async function setDefault(\n schemaName: string,\n tableName: string,\n columnName: string,\n defaultSql: string,\n lowerer: ExecuteRequestLowerer,\n operationClass: 'additive' | 'widening' = 'additive',\n): Promise<Op> {\n const qualified = qualifyTableName(schemaName, tableName);\n const { present } = await columnExistsSteps(lowerer, {\n schema: schemaName,\n table: tableName,\n column: columnName,\n });\n const hasDefault = await lowerer.lowerToExecuteRequest(\n columnDefaultAst({ schema: schemaName, table: tableName, column: columnName }).defaultPresent(),\n );\n return {\n id: `setDefault.${tableName}.${columnName}`,\n label: `Set default on \"${tableName}\".\"${columnName}\"`,\n operationClass,\n target: targetDetails('column', columnName, schemaName, tableName),\n precheck: [step(`ensure column \"${columnName}\" exists`, present.sql, present.params)],\n execute: [\n step(\n `set default on \"${columnName}\"`,\n `ALTER TABLE ${qualified} ALTER COLUMN ${quoteIdentifier(columnName)} SET ${defaultSql}`,\n ),\n ],\n postcheck: [\n step(`verify column \"${columnName}\" has a default`, hasDefault.sql, hasDefault.params),\n ],\n };\n}\n\nexport async function dropDefault(\n schemaName: string,\n tableName: string,\n columnName: string,\n lowerer: ExecuteRequestLowerer,\n): Promise<Op> {\n const { present } = await columnExistsSteps(lowerer, {\n schema: schemaName,\n table: tableName,\n column: columnName,\n });\n const dropDefaultExec = await lowerer.lowerToExecuteRequest(\n contractFreeDdl.alterTable({\n ...ifDefined('schema', boundSchema(schemaName)),\n table: tableName,\n actions: [contractFreeDdl.dropDefaultAction(columnName)],\n }),\n );\n const noDefault = await lowerer.lowerToExecuteRequest(\n columnDefaultAst({ schema: schemaName, table: tableName, column: columnName }).defaultAbsent(),\n );\n return {\n id: `dropDefault.${tableName}.${columnName}`,\n label: `Drop default on \"${tableName}\".\"${columnName}\"`,\n operationClass: 'destructive',\n target: targetDetails('column', columnName, schemaName, tableName),\n precheck: [step(`ensure column \"${columnName}\" exists`, present.sql, present.params)],\n execute: [step(`drop default on \"${columnName}\"`, dropDefaultExec.sql)],\n postcheck: [\n step(`verify column \"${columnName}\" has no default`, noDefault.sql, noDefault.params),\n ],\n };\n}\n\n/**\n * Builds the op for adding a NOT NULL column (no contract default) to a\n * non-empty table. Prechecks assert the column is absent and the table is\n * empty; the execute step lowers the typed `AddColumn` DDL node through the\n * adapter; postchecks assert the column exists and is NOT NULL.\n */\nexport async function addNotNullColumnDirect(\n schemaName: string,\n tableName: string,\n column: DdlColumn,\n lowerer: ExecuteRequestLowerer,\n): Promise<Op> {\n const columnName = column.name;\n const addColumn = await lowerer.lowerToExecuteRequest(\n contractFreeDdl.alterTable({\n ...ifDefined('schema', boundSchema(schemaName)),\n table: tableName,\n actions: [contractFreeDdl.addColumnAction(column)],\n }),\n );\n const absent = await lowerer.lowerToExecuteRequest(\n columnExistsAst({ schema: schemaName, table: tableName, column: columnName }).columnAbsent(),\n );\n const tableEmpty = await lowerer.lowerToExecuteRequest(tableIsEmptyAst(schemaName, tableName));\n const present = await lowerer.lowerToExecuteRequest(\n columnExistsAst({ schema: schemaName, table: tableName, column: columnName }).columnPresent(),\n );\n const notNullable = await lowerer.lowerToExecuteRequest(\n columnNullabilityAst({\n schema: schemaName,\n table: tableName,\n column: columnName,\n nullable: false,\n }),\n );\n return {\n id: `column.${tableName}.${columnName}`,\n label: `Add column ${columnName} to ${tableName}`,\n summary: `Adds column ${columnName} to table ${tableName}`,\n operationClass: 'additive',\n target: targetDetails('column', columnName, schemaName, tableName),\n precheck: [\n step(`ensure column \"${columnName}\" is missing`, absent.sql, absent.params),\n step(\n `ensure table \"${tableName}\" is empty before adding NOT NULL column without default`,\n tableEmpty.sql,\n tableEmpty.params,\n ),\n ],\n execute: [step(`add column \"${columnName}\"`, addColumn.sql)],\n postcheck: [\n step(`verify column \"${columnName}\" exists`, present.sql, present.params),\n step(`verify column \"${columnName}\" is NOT NULL`, notNullable.sql, notNullable.params),\n ],\n };\n}\n","import type { ExecuteRequestLowerer } from '@prisma-next/family-sql/control-adapter';\nimport { REFERENTIAL_ACTION_SQL } from '@prisma-next/sql-contract/referential-action-sql';\nimport { constraintExistsAst } from '../../../contract-free/checks';\nimport { escapeLiteral, quoteIdentifier } from '../../sql-utils';\nimport { qualifyTableName } from '../planner-sql-checks';\nimport { type ForeignKeySpec, type Op, step, targetDetails } from './shared';\n\nasync function constraintCheckSteps(\n lowerer: ExecuteRequestLowerer,\n options: { constraintName: string; schema: string; table: string },\n): Promise<{\n absent: { sql: string; params?: readonly unknown[] };\n present: { sql: string; params?: readonly unknown[] };\n}> {\n const checks = constraintExistsAst(options);\n const absent = await lowerer.lowerToExecuteRequest(checks.constraintAbsent());\n const present = await lowerer.lowerToExecuteRequest(checks.constraintPresent());\n return { absent, present };\n}\n\nfunction renderForeignKeySql(schemaName: string, tableName: string, fk: ForeignKeySpec): string {\n let sql = `ALTER TABLE ${qualifyTableName(schemaName, tableName)}\nADD CONSTRAINT ${quoteIdentifier(fk.name)}\nFOREIGN KEY (${fk.columns.map(quoteIdentifier).join(', ')})\nREFERENCES ${qualifyTableName(fk.references.schema, fk.references.table)} (${fk.references.columns\n .map(quoteIdentifier)\n .join(', ')})`;\n\n if (fk.onDelete !== undefined) {\n const action = REFERENTIAL_ACTION_SQL[fk.onDelete];\n if (!action) {\n throw new Error(`Unknown referential action for onDelete: ${String(fk.onDelete)}`);\n }\n sql += `\\nON DELETE ${action}`;\n }\n if (fk.onUpdate !== undefined) {\n const action = REFERENTIAL_ACTION_SQL[fk.onUpdate];\n if (!action) {\n throw new Error(`Unknown referential action for onUpdate: ${String(fk.onUpdate)}`);\n }\n sql += `\\nON UPDATE ${action}`;\n }\n return sql;\n}\n\nexport async function addPrimaryKey(\n schemaName: string,\n tableName: string,\n constraintName: string,\n columns: readonly string[],\n lowerer: ExecuteRequestLowerer,\n): Promise<Op> {\n const qualified = qualifyTableName(schemaName, tableName);\n const columnList = columns.map(quoteIdentifier).join(', ');\n const { absent, present } = await constraintCheckSteps(lowerer, {\n constraintName,\n schema: schemaName,\n table: tableName,\n });\n return {\n id: `primaryKey.${tableName}.${constraintName}`,\n label: `Add primary key on \"${tableName}\"`,\n operationClass: 'additive',\n target: targetDetails('primaryKey', constraintName, schemaName, tableName),\n precheck: [\n step(`ensure primary key \"${constraintName}\" does not exist`, absent.sql, absent.params),\n ],\n execute: [\n step(\n `add primary key \"${constraintName}\"`,\n `ALTER TABLE ${qualified} ADD CONSTRAINT ${quoteIdentifier(constraintName)} PRIMARY KEY (${columnList})`,\n ),\n ],\n postcheck: [step(`verify primary key \"${constraintName}\" exists`, present.sql, present.params)],\n };\n}\n\nexport async function addUnique(\n schemaName: string,\n tableName: string,\n constraintName: string,\n columns: readonly string[],\n lowerer: ExecuteRequestLowerer,\n): Promise<Op> {\n const qualified = qualifyTableName(schemaName, tableName);\n const columnList = columns.map(quoteIdentifier).join(', ');\n const { absent, present } = await constraintCheckSteps(lowerer, {\n constraintName,\n schema: schemaName,\n table: tableName,\n });\n return {\n id: `unique.${tableName}.${constraintName}`,\n label: `Add unique constraint on \"${tableName}\" (${columns.join(', ')})`,\n operationClass: 'additive',\n target: targetDetails('unique', constraintName, schemaName, tableName),\n precheck: [\n step(`ensure constraint \"${constraintName}\" does not exist`, absent.sql, absent.params),\n ],\n execute: [\n step(\n `add unique constraint \"${constraintName}\"`,\n `ALTER TABLE ${qualified} ADD CONSTRAINT ${quoteIdentifier(constraintName)} UNIQUE (${columnList})`,\n ),\n ],\n postcheck: [step(`verify constraint \"${constraintName}\" exists`, present.sql, present.params)],\n };\n}\n\nexport async function addForeignKey(\n schemaName: string,\n tableName: string,\n fk: ForeignKeySpec,\n lowerer: ExecuteRequestLowerer,\n): Promise<Op> {\n const { absent, present } = await constraintCheckSteps(lowerer, {\n constraintName: fk.name,\n schema: schemaName,\n table: tableName,\n });\n return {\n id: `foreignKey.${tableName}.${fk.name}`,\n label: `Add foreign key \"${fk.name}\" on \"${tableName}\"`,\n operationClass: 'additive',\n target: targetDetails('foreignKey', fk.name, schemaName, tableName),\n precheck: [step(`ensure FK \"${fk.name}\" does not exist`, absent.sql, absent.params)],\n execute: [step(`add FK \"${fk.name}\"`, renderForeignKeySql(schemaName, tableName, fk))],\n postcheck: [step(`verify FK \"${fk.name}\" exists`, present.sql, present.params)],\n };\n}\n\nexport async function addCheckConstraint(\n schemaName: string,\n tableName: string,\n constraintName: string,\n column: string,\n values: readonly string[],\n lowerer: ExecuteRequestLowerer,\n): Promise<Op> {\n const qualified = qualifyTableName(schemaName, tableName);\n const valueList = values.map((v) => `'${escapeLiteral(v)}'`).join(', ');\n const { absent, present } = await constraintCheckSteps(lowerer, {\n constraintName,\n schema: schemaName,\n table: tableName,\n });\n return {\n id: `checkConstraint.${tableName}.${constraintName}`,\n label: `Add check constraint \"${constraintName}\" on \"${tableName}\".\"${column}\"`,\n operationClass: 'additive',\n target: targetDetails('checkConstraint', constraintName, schemaName, tableName),\n precheck: [\n step(`ensure constraint \"${constraintName}\" does not exist`, absent.sql, absent.params),\n ],\n execute: [\n step(\n `add check constraint \"${constraintName}\"`,\n `ALTER TABLE ${qualified} ADD CONSTRAINT ${quoteIdentifier(constraintName)} CHECK (${quoteIdentifier(column)} IN (${valueList}))`,\n ),\n ],\n postcheck: [step(`verify constraint \"${constraintName}\" exists`, present.sql, present.params)],\n };\n}\n\nexport async function dropCheckConstraint(\n schemaName: string,\n tableName: string,\n constraintName: string,\n lowerer: ExecuteRequestLowerer,\n): Promise<Op> {\n const qualified = qualifyTableName(schemaName, tableName);\n const { absent, present } = await constraintCheckSteps(lowerer, {\n constraintName,\n schema: schemaName,\n table: tableName,\n });\n return {\n id: `dropCheckConstraint.${tableName}.${constraintName}`,\n label: `Drop check constraint \"${constraintName}\" on \"${tableName}\"`,\n operationClass: 'destructive',\n target: targetDetails('checkConstraint', constraintName, schemaName, tableName),\n precheck: [step(`ensure constraint \"${constraintName}\" exists`, present.sql, present.params)],\n execute: [\n step(\n `drop check constraint \"${constraintName}\"`,\n `ALTER TABLE ${qualified} DROP CONSTRAINT ${quoteIdentifier(constraintName)}`,\n ),\n ],\n postcheck: [\n step(`verify constraint \"${constraintName}\" does not exist`, absent.sql, absent.params),\n ],\n };\n}\n\n/**\n * `kind` feeds the operation's `target.details.objectType`. Descriptor-flow\n * does not carry kind information in its drop-constraint descriptor, so the\n * default is `'unique'`. The reconciliation planner passes the correct kind\n * (`'foreignKey'`, `'primaryKey'`, or `'unique'`) based on the diff issue\n * that produced the drop.\n */\nexport async function dropConstraint(\n schemaName: string,\n tableName: string,\n constraintName: string,\n lowerer: ExecuteRequestLowerer,\n kind: 'foreignKey' | 'unique' | 'primaryKey' = 'unique',\n): Promise<Op> {\n const qualified = qualifyTableName(schemaName, tableName);\n const { absent, present } = await constraintCheckSteps(lowerer, {\n constraintName,\n schema: schemaName,\n table: tableName,\n });\n return {\n id: `dropConstraint.${tableName}.${constraintName}`,\n label: `Drop constraint \"${constraintName}\" on \"${tableName}\"`,\n operationClass: 'destructive',\n target: targetDetails(kind, constraintName, schemaName, tableName),\n precheck: [step(`ensure constraint \"${constraintName}\" exists`, present.sql, present.params)],\n execute: [\n step(\n `drop constraint \"${constraintName}\"`,\n `ALTER TABLE ${qualified} DROP CONSTRAINT ${quoteIdentifier(constraintName)}`,\n ),\n ],\n postcheck: [\n step(`verify constraint \"${constraintName}\" does not exist`, absent.sql, absent.params),\n ],\n };\n}\n","import type { ExecuteRequestLowerer } from '@prisma-next/family-sql/control-adapter';\nimport { extensionExistsAst } from '../../../contract-free/checks';\nimport { DEFAULT_NAMESPACE_ID } from '../../namespace-ids';\nimport { quoteIdentifier } from '../../sql-utils';\nimport { type Op, step } from './shared';\n\nexport function createExtension(extensionName: string): Op {\n return {\n id: `extension.${extensionName}`,\n label: `Create extension \"${extensionName}\"`,\n operationClass: 'additive',\n target: { id: 'postgres' },\n precheck: [],\n execute: [\n step(\n `Create extension \"${extensionName}\"`,\n `CREATE EXTENSION IF NOT EXISTS ${quoteIdentifier(extensionName)}`,\n ),\n ],\n postcheck: [],\n };\n}\n\n/**\n * Install a Postgres extension as the baseline op for an extension-pack\n * contract space. Layered on top of {@link createExtension}: stamps an\n * `invariantId` (required so the per-space marker records the install),\n * scopes the op `id` under a caller-chosen namespace (e.g. `pgvector.`),\n * and emits pre- and postcheck SQL probing `pg_extension`. The richer\n * shape lets the runner's idempotency probe skip the install on re-run\n * (postcheck-pre-satisfied) without firing the precheck.\n *\n * Use this for hand-rolled baseline migrations in contract-space\n * extension packages (e.g. `extension-pgvector`, `extension-paradedb`);\n * use the bare {@link createExtension} for planner-emitted ops where the\n * caller already controls idempotency through the surrounding plan.\n */\nexport async function installExtension(\n options: {\n readonly extensionName: string;\n readonly invariantId: string;\n readonly id: string;\n readonly label?: string;\n },\n lowerer: ExecuteRequestLowerer,\n): Promise<Op> {\n const { extensionName, invariantId, id } = options;\n const label = options.label ?? `Enable extension \"${extensionName}\"`;\n const checks = extensionExistsAst(extensionName);\n const absent = await lowerer.lowerToExecuteRequest(checks.extensionAbsent());\n const present = await lowerer.lowerToExecuteRequest(checks.extensionPresent());\n return {\n id,\n label,\n operationClass: 'additive',\n invariantId,\n target: {\n id: 'postgres',\n details: { schema: DEFAULT_NAMESPACE_ID, objectType: 'dependency', name: extensionName },\n },\n precheck: [\n step(`verify extension \"${extensionName}\" is not already enabled`, absent.sql, absent.params),\n ],\n execute: [\n step(\n `create extension \"${extensionName}\"`,\n `CREATE EXTENSION IF NOT EXISTS ${extensionName}`,\n ),\n ],\n postcheck: [\n step(`confirm extension \"${extensionName}\" is enabled`, present.sql, present.params),\n ],\n };\n}\n","import type { ExecuteRequestLowerer } from '@prisma-next/family-sql/control-adapter';\nimport { indexExistsAst } from '../../../contract-free/checks';\nimport { escapeLiteral, quoteIdentifier } from '../../sql-utils';\nimport { qualifyTableName } from '../planner-sql-checks';\nimport { type Op, step, targetDetails } from './shared';\n\ntype CheckStep = { sql: string; params?: readonly unknown[] };\n\nasync function indexExistsSteps(\n lowerer: ExecuteRequestLowerer,\n schemaName: string,\n indexName: string,\n): Promise<{ present: CheckStep; absent: CheckStep }> {\n const checks = indexExistsAst(schemaName, indexName);\n const present = await lowerer.lowerToExecuteRequest(checks.indexPresent());\n const absent = await lowerer.lowerToExecuteRequest(checks.indexAbsent());\n return { present, absent };\n}\n\nexport interface CreateIndexExtras {\n readonly type?: string;\n readonly options?: Record<string, unknown>;\n}\n\nfunction renderIndexOptionValue(key: string, value: unknown): string {\n if (typeof value === 'string') return `'${escapeLiteral(value)}'`;\n if (typeof value === 'number' && Number.isFinite(value)) return String(value);\n if (typeof value === 'boolean') return value ? 'true' : 'false';\n throw new Error(\n `Index option \"${key}\" must be a string, finite number, or boolean; got ${typeof value}`,\n );\n}\n\nfunction renderIndexOptions(options: Record<string, unknown>): string {\n return Object.entries(options)\n .map(([key, value]) => `${quoteIdentifier(key)} = ${renderIndexOptionValue(key, value)}`)\n .join(', ');\n}\n\nexport async function createIndex(\n schemaName: string,\n tableName: string,\n indexName: string,\n columns: readonly string[],\n lowerer: ExecuteRequestLowerer,\n extras?: CreateIndexExtras,\n): Promise<Op> {\n const qualified = qualifyTableName(schemaName, tableName);\n const columnList = columns.map(quoteIdentifier).join(', ');\n const using = extras?.type ? ` USING ${quoteIdentifier(extras.type)}` : '';\n const options = extras?.options;\n const withClause =\n options && Object.keys(options).length > 0 ? ` WITH (${renderIndexOptions(options)})` : '';\n const { present, absent } = await indexExistsSteps(lowerer, schemaName, indexName);\n return {\n id: `index.${tableName}.${indexName}`,\n label: `Create index \"${indexName}\" on \"${tableName}\"`,\n operationClass: 'additive',\n target: targetDetails('index', indexName, schemaName, tableName),\n precheck: [step(`ensure index \"${indexName}\" does not exist`, absent.sql, absent.params)],\n execute: [\n step(\n `create index \"${indexName}\"`,\n `CREATE INDEX ${quoteIdentifier(indexName)} ON ${qualified}${using} (${columnList})${withClause}`,\n ),\n ],\n postcheck: [step(`verify index \"${indexName}\" exists`, present.sql, present.params)],\n };\n}\n\nexport async function dropIndex(\n schemaName: string,\n tableName: string,\n indexName: string,\n lowerer: ExecuteRequestLowerer,\n): Promise<Op> {\n const { present, absent } = await indexExistsSteps(lowerer, schemaName, indexName);\n return {\n id: `dropIndex.${tableName}.${indexName}`,\n label: `Drop index \"${indexName}\"`,\n operationClass: 'destructive',\n target: targetDetails('index', indexName, schemaName, tableName),\n precheck: [step(`ensure index \"${indexName}\" exists`, present.sql, present.params)],\n execute: [\n step(`drop index \"${indexName}\"`, `DROP INDEX ${qualifyTableName(schemaName, indexName)}`),\n ],\n postcheck: [step(`verify index \"${indexName}\" does not exist`, absent.sql, absent.params)],\n };\n}\n","import type { ExecuteRequestLowerer } from '@prisma-next/family-sql/control-adapter';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport { createType, dropType } from '../../../contract-free/ddl';\nimport { validateEnumValueLength } from '../../sql-utils';\nimport { boundSchema } from '../bound-schema';\nimport { type Op, step, targetDetails } from './shared';\n\n/**\n * `CREATE TYPE <qualified> AS ENUM (…)` for a managed native enum, built as a\n * typed DDL node and lowered by the control adapter (the type name is quoted,\n * member values render as escaped string literals in declaration order —\n * Postgres enum sort order is semantic). `boundSchema` maps the unbound sentinel\n * to an absent schema so the type name renders unqualified and the connection's\n * `search_path` resolves the schema at runtime.\n */\nexport async function createNativeEnumType(\n schemaName: string,\n typeName: string,\n members: readonly string[],\n lowerer: ExecuteRequestLowerer,\n): Promise<Op> {\n for (const member of members) {\n validateEnumValueLength(member, typeName);\n }\n const ddlNode = createType({\n ...ifDefined('schema', boundSchema(schemaName)),\n name: typeName,\n values: members,\n });\n const statement = await lowerer.lowerToExecuteRequest(ddlNode);\n return {\n id: `createNativeEnumType.${typeName}`,\n label: `Create enum type \"${typeName}\"`,\n operationClass: 'additive',\n target: targetDetails('type', typeName, schemaName),\n precheck: [],\n execute: [step(`create enum type \"${typeName}\"`, statement.sql, statement.params)],\n postcheck: [],\n };\n}\n\n/** `DROP TYPE <qualified>` for an unclaimed managed native enum, via typed DDL. */\nexport async function dropNativeEnumType(\n schemaName: string,\n typeName: string,\n lowerer: ExecuteRequestLowerer,\n): Promise<Op> {\n const ddlNode = dropType({\n ...ifDefined('schema', boundSchema(schemaName)),\n name: typeName,\n });\n const statement = await lowerer.lowerToExecuteRequest(ddlNode);\n return {\n id: `dropNativeEnumType.${typeName}`,\n label: `Drop enum type \"${typeName}\"`,\n operationClass: 'destructive',\n target: targetDetails('type', typeName, schemaName),\n precheck: [],\n execute: [step(`drop enum type \"${typeName}\"`, statement.sql, statement.params)],\n postcheck: [],\n };\n}\n","import type { ExecuteRequestLowerer } from '@prisma-next/family-sql/control-adapter';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport { rlsEnabledAst, rlsPolicyExistsAst } from '../../../contract-free/checks';\nimport {\n alterPolicyRename,\n createPolicy,\n disableRowLevelSecurity as disableRowLevelSecurityDdl,\n dropPolicy,\n} from '../../../contract-free/ddl';\nimport type { PostgresRlsPolicy } from '../../postgres-rls-policy';\nimport { qualifyTableName } from '../planner-sql-checks';\nimport { type Op, step, targetDetails } from './shared';\n\nconst PLAIN_IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_$]*$/;\n\nfunction validateRoleName(role: string): string {\n if (!PLAIN_IDENTIFIER.test(role)) {\n throw new Error(\n `Invalid role name ${JSON.stringify(role)}: role names must be plain SQL identifiers matching ^[A-Za-z_][A-Za-z0-9_$]*$`,\n );\n }\n return role;\n}\n\nexport async function createRlsPolicy(\n schemaName: string,\n tableName: string,\n policy: PostgresRlsPolicy,\n lowerer: ExecuteRequestLowerer,\n): Promise<Op> {\n const validatedRoles = policy.roles.map(validateRoleName);\n const ddlNode = createPolicy({\n schema: schemaName,\n table: tableName,\n name: policy.name,\n permissive: policy.permissive,\n operation: policy.operation,\n roles: validatedRoles,\n ...ifDefined('using', policy.using),\n ...ifDefined('withCheck', policy.withCheck),\n });\n const checks = rlsPolicyExistsAst({\n schema: schemaName,\n table: tableName,\n policyName: policy.name,\n });\n const absent = await lowerer.lowerToExecuteRequest(checks.policyAbsent());\n const execute = await lowerer.lowerToExecuteRequest(ddlNode);\n const present = await lowerer.lowerToExecuteRequest(checks.policyPresent());\n return {\n id: `rlsPolicy.${schemaName}.${tableName}.${policy.name}`,\n label: `Create RLS policy \"${policy.name}\" on \"${tableName}\"`,\n operationClass: 'additive',\n target: targetDetails('rlsPolicy', policy.name, schemaName, tableName),\n precheck: [\n step(`ensure RLS policy \"${policy.name}\" does not exist`, absent.sql, absent.params),\n ],\n execute: [step(`create RLS policy \"${policy.name}\"`, execute.sql, execute.params)],\n postcheck: [step(`verify RLS policy \"${policy.name}\" exists`, present.sql, present.params)],\n };\n}\n\nexport async function dropRlsPolicy(\n schemaName: string,\n tableName: string,\n policyName: string,\n lowerer: ExecuteRequestLowerer,\n): Promise<Op> {\n const ddlNode = dropPolicy({ schema: schemaName, table: tableName, name: policyName });\n const checks = rlsPolicyExistsAst({ schema: schemaName, table: tableName, policyName });\n const present = await lowerer.lowerToExecuteRequest(checks.policyPresent());\n const execute = await lowerer.lowerToExecuteRequest(ddlNode);\n const absent = await lowerer.lowerToExecuteRequest(checks.policyAbsent());\n return {\n id: `rlsPolicy.${schemaName}.${tableName}.${policyName}.drop`,\n label: `Drop RLS policy \"${policyName}\" on \"${tableName}\"`,\n operationClass: 'destructive',\n target: targetDetails('rlsPolicy', policyName, schemaName, tableName),\n precheck: [step(`ensure RLS policy \"${policyName}\" exists`, present.sql, present.params)],\n execute: [step(`drop RLS policy \"${policyName}\"`, execute.sql, execute.params)],\n postcheck: [step(`verify RLS policy \"${policyName}\" is absent`, absent.sql, absent.params)],\n };\n}\n\nexport async function enableRowLevelSecurity(\n schemaName: string,\n tableName: string,\n lowerer: ExecuteRequestLowerer,\n): Promise<Op> {\n const checks = rlsEnabledAst(schemaName, tableName);\n const disabled = await lowerer.lowerToExecuteRequest(checks.rlsDisabled());\n const enabled = await lowerer.lowerToExecuteRequest(checks.rlsEnabled());\n return {\n id: `rowLevelSecurity.${schemaName}.${tableName}`,\n label: `Enable row-level security on \"${tableName}\"`,\n operationClass: 'additive',\n target: targetDetails('rowLevelSecurity', tableName, schemaName),\n precheck: [\n step(`check RLS is not already enabled on \"${tableName}\"`, disabled.sql, disabled.params),\n ],\n execute: [\n step(\n `enable row-level security on \"${tableName}\"`,\n `ALTER TABLE ${qualifyTableName(schemaName, tableName)} ENABLE ROW LEVEL SECURITY`,\n ),\n ],\n postcheck: [\n step(`verify row-level security is enabled on \"${tableName}\"`, enabled.sql, enabled.params),\n ],\n };\n}\n\nexport async function disableRowLevelSecurity(\n schemaName: string,\n tableName: string,\n lowerer: ExecuteRequestLowerer,\n): Promise<Op> {\n const ddlNode = disableRowLevelSecurityDdl({ schema: schemaName, table: tableName });\n const checks = rlsEnabledAst(schemaName, tableName);\n const enabled = await lowerer.lowerToExecuteRequest(checks.rlsEnabled());\n const execute = await lowerer.lowerToExecuteRequest(ddlNode);\n const disabled = await lowerer.lowerToExecuteRequest(checks.rlsDisabled());\n return {\n id: `rowLevelSecurity.${schemaName}.${tableName}.disable`,\n label: `Disable row-level security on \"${tableName}\"`,\n operationClass: 'destructive',\n target: targetDetails('rowLevelSecurity', tableName, schemaName),\n precheck: [\n step(`check RLS is currently enabled on \"${tableName}\"`, enabled.sql, enabled.params),\n ],\n execute: [step(`disable row-level security on \"${tableName}\"`, execute.sql, execute.params)],\n postcheck: [\n step(\n `verify row-level security is disabled on \"${tableName}\"`,\n disabled.sql,\n disabled.params,\n ),\n ],\n };\n}\n\nexport async function renameRlsPolicy(\n schemaName: string,\n tableName: string,\n oldPolicyName: string,\n newPolicyName: string,\n lowerer: ExecuteRequestLowerer,\n): Promise<Op> {\n const ddlNode = alterPolicyRename({\n schema: schemaName,\n table: tableName,\n name: oldPolicyName,\n newName: newPolicyName,\n });\n const oldChecks = rlsPolicyExistsAst({\n schema: schemaName,\n table: tableName,\n policyName: oldPolicyName,\n });\n const newChecks = rlsPolicyExistsAst({\n schema: schemaName,\n table: tableName,\n policyName: newPolicyName,\n });\n const oldPresent = await lowerer.lowerToExecuteRequest(oldChecks.policyPresent());\n const execute = await lowerer.lowerToExecuteRequest(ddlNode);\n const newPresent = await lowerer.lowerToExecuteRequest(newChecks.policyPresent());\n return {\n id: `rlsPolicy.${schemaName}.${tableName}.${oldPolicyName}.rename`,\n label: `Rename RLS policy \"${oldPolicyName}\" to \"${newPolicyName}\" on \"${tableName}\"`,\n operationClass: 'widening',\n target: targetDetails('rlsPolicy', newPolicyName, schemaName, tableName),\n precheck: [\n step(`ensure RLS policy \"${oldPolicyName}\" exists`, oldPresent.sql, oldPresent.params),\n ],\n execute: [\n step(\n `rename RLS policy \"${oldPolicyName}\" to \"${newPolicyName}\"`,\n execute.sql,\n execute.params,\n ),\n ],\n postcheck: [\n step(`verify RLS policy \"${newPolicyName}\" exists`, newPresent.sql, newPresent.params),\n ],\n };\n}\n","import type { ExecuteRequestLowerer } from '@prisma-next/family-sql/control-adapter';\nimport { tableExistsAst } from '../../../contract-free/checks';\nimport { qualifyTableName } from '../planner-sql-checks';\nimport { type Op, step, targetDetails } from './shared';\n\nexport async function dropTable(\n schemaName: string,\n tableName: string,\n lowerer: ExecuteRequestLowerer,\n): Promise<Op> {\n const qualified = qualifyTableName(schemaName, tableName);\n const checks = tableExistsAst(schemaName, tableName);\n const present = await lowerer.lowerToExecuteRequest(checks.tablePresent());\n const absent = await lowerer.lowerToExecuteRequest(checks.tableAbsent());\n return {\n id: `dropTable.${tableName}`,\n label: `Drop table \"${tableName}\"`,\n operationClass: 'destructive',\n target: targetDetails('table', tableName, schemaName),\n precheck: [step(`ensure table \"${tableName}\" exists`, present.sql, present.params)],\n execute: [step(`drop table \"${tableName}\"`, `DROP TABLE ${qualified}`)],\n postcheck: [step(`verify table \"${tableName}\" does not exist`, absent.sql, absent.params)],\n };\n}\n","import { ifDefined } from '@prisma-next/utils/defined';\n\nexport type OperationClass =\n | 'dependency'\n | 'type'\n | 'table'\n | 'column'\n | 'primaryKey'\n | 'unique'\n | 'index'\n | 'foreignKey'\n | 'checkConstraint'\n | 'rlsPolicy'\n | 'rowLevelSecurity';\n\nexport interface PostgresPlanTargetDetails {\n readonly schema: string;\n readonly objectType: OperationClass;\n readonly name: string;\n readonly table?: string;\n}\n\nexport function buildTargetDetails(\n objectType: OperationClass,\n name: string,\n schema: string,\n table?: string,\n): PostgresPlanTargetDetails {\n return {\n schema,\n objectType,\n name,\n ...ifDefined('table', table),\n };\n}\n","import type { CodecControlHooks, SqlMigrationPlanOperation } from '@prisma-next/family-sql/control';\nimport type { ExecuteRequestLowerer } from '@prisma-next/family-sql/control-adapter';\nimport type { StorageColumn, StorageTypeInstance } from '@prisma-next/sql-contract/types';\nimport { FunctionColumnDefault } from '@prisma-next/sql-relational-core/ast';\nimport { col } from '@prisma-next/sql-relational-core/contract-free';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport {\n columnDefaultAst,\n columnExistsAst,\n columnNullabilityAst,\n} from '../../contract-free/checks';\nimport * as contractFreeDdl from '../../contract-free/ddl';\nimport { boundSchema } from './bound-schema';\nimport { step } from './operations/shared';\nimport { buildColumnTypeSql } from './planner-ddl-builders';\nimport { buildTargetDetails, type PostgresPlanTargetDetails } from './planner-target-details';\n\nexport function buildAddColumnOperationIdentity(\n schema: string,\n tableName: string,\n columnName: string,\n): Pick<\n SqlMigrationPlanOperation<PostgresPlanTargetDetails>,\n 'id' | 'label' | 'summary' | 'target'\n> {\n return {\n id: `column.${tableName}.${columnName}`,\n label: `Add column ${columnName} to ${tableName}`,\n summary: `Adds column ${columnName} to table ${tableName}`,\n target: {\n id: 'postgres',\n details: buildTargetDetails('table', tableName, schema),\n },\n };\n}\n\nexport async function buildAddNotNullColumnWithTemporaryDefaultOperation(options: {\n readonly schema: string;\n readonly tableName: string;\n readonly columnName: string;\n readonly column: StorageColumn;\n readonly codecHooks: Map<string, CodecControlHooks>;\n readonly storageTypes: Record<string, StorageTypeInstance>;\n readonly temporaryDefault: string;\n readonly lowerer: ExecuteRequestLowerer;\n}): Promise<SqlMigrationPlanOperation<PostgresPlanTargetDetails>> {\n const {\n schema,\n tableName,\n columnName,\n column,\n codecHooks,\n storageTypes,\n temporaryDefault,\n lowerer,\n } = options;\n\n // The recipe handles NOT NULL columns that carry no contract default, so the\n // temporary backfill value is the only default. It is a pre-rendered SQL\n // fragment (e.g. `''`, `0`, `'{}'::jsonb`), carried verbatim as a\n // `FunctionColumnDefault` so the adapter emits it as a `DEFAULT (...)` clause.\n const ddlColumn = col(columnName, buildColumnTypeSql(column, codecHooks, storageTypes), {\n notNull: true,\n default: new FunctionColumnDefault(temporaryDefault),\n });\n const addColumn = await lowerer.lowerToExecuteRequest(\n contractFreeDdl.alterTable({\n ...ifDefined('schema', boundSchema(schema)),\n table: tableName,\n actions: [contractFreeDdl.addColumnAction(ddlColumn)],\n }),\n );\n const dropTempDefault = await lowerer.lowerToExecuteRequest(\n contractFreeDdl.alterTable({\n ...ifDefined('schema', boundSchema(schema)),\n table: tableName,\n actions: [contractFreeDdl.dropDefaultAction(columnName)],\n }),\n );\n\n const absent = await lowerer.lowerToExecuteRequest(\n columnExistsAst({ schema, table: tableName, column: columnName }).columnAbsent(),\n );\n const present = await lowerer.lowerToExecuteRequest(\n columnExistsAst({ schema, table: tableName, column: columnName }).columnPresent(),\n );\n const notNullable = await lowerer.lowerToExecuteRequest(\n columnNullabilityAst({ schema, table: tableName, column: columnName, nullable: false }),\n );\n const noDefault = await lowerer.lowerToExecuteRequest(\n columnDefaultAst({ schema, table: tableName, column: columnName }).noDefault(),\n );\n\n return {\n ...buildAddColumnOperationIdentity(schema, tableName, columnName),\n operationClass: 'additive',\n precheck: [step(`ensure column \"${columnName}\" is missing`, absent.sql, absent.params)],\n execute: [\n {\n description: `add column \"${columnName}\"`,\n sql: addColumn.sql,\n },\n {\n description: `drop temporary default from column \"${columnName}\"`,\n sql: dropTempDefault.sql,\n },\n ],\n postcheck: [\n step(`verify column \"${columnName}\" exists`, present.sql, present.params),\n step(`verify column \"${columnName}\" is NOT NULL`, notNullable.sql, notNullable.params),\n step(\n `verify column \"${columnName}\" has no default after temporary default removal`,\n noDefault.sql,\n noDefault.params,\n ),\n ],\n };\n}\n","/**\n * Postgres migration IR: one concrete `*Call` class per pure factory under\n * `operations/`, plus a shared `PostgresOpFactoryCallNode` abstract base.\n *\n * Every call class carries the literal arguments its backing factory would\n * receive, computes a human-readable `label` in its constructor, and\n * implements two polymorphic hooks:\n *\n * - `toOp()` — converts the IR node to a runtime\n * `SqlMigrationPlanOperation` by delegating to the matching pure factory\n * under `operations/`. `DataTransformCall.toOp()` always throws\n * `PN-MIG-2001` because a planner-generated data transform is an\n * unfilled authoring stub by construction.\n * - `renderTypeScript()` / `importRequirements()` — inherited from\n * `TsExpression`. Used by `renderCallsToTypeScript` to emit the call as\n * a TypeScript expression inside the scaffolded `migration.ts`.\n *\n * The abstract base and all concrete classes are package-private. External\n * consumers see only the framework-level `OpFactoryCall` interface and the\n * `PostgresOpFactoryCall` union.\n */\n\nimport { errorUnfilledPlaceholder } from '@prisma-next/errors/migration';\nimport type { CodecControlHooks, SqlMigrationPlanOperation } from '@prisma-next/family-sql/control';\nimport type { ExecuteRequestLowerer, Lowerer } from '@prisma-next/family-sql/control-adapter';\nimport type {\n OpFactoryCall as FrameworkOpFactoryCall,\n MigrationOperationClass,\n} from '@prisma-next/framework-components/control';\nimport { UNBOUND_NAMESPACE_ID } from '@prisma-next/framework-components/ir';\nimport type { StorageColumn, StorageTypeInstance } from '@prisma-next/sql-contract/types';\nimport type {\n AnyDdlColumnDefault,\n DdlColumn,\n DdlTableConstraint,\n} from '@prisma-next/sql-relational-core/ast';\nimport { FunctionColumnDefault, LiteralColumnDefault } from '@prisma-next/sql-relational-core/ast';\nimport { type ImportRequirement, jsonToTsSource, TsExpression } from '@prisma-next/ts-render';\nimport { blindCast } from '@prisma-next/utils/casts';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport { columnExistsAst, tableExistsAst } from '../../contract-free/checks';\nimport * as contractFreeDdl from '../../contract-free/ddl';\nimport type { PostgresRlsPolicy } from '../postgres-rls-policy';\nimport { escapeLiteral, quoteIdentifier } from '../sql-utils';\nimport type { PostgresColumnDefault } from '../types';\nimport { boundSchema } from './bound-schema';\nimport {\n addNotNullColumnDirect,\n alterColumnType,\n dropColumn,\n dropDefault,\n dropNotNull,\n setDefault,\n setNotNull,\n} from './operations/columns';\nimport {\n addCheckConstraint,\n addForeignKey,\n addPrimaryKey,\n addUnique,\n dropCheckConstraint,\n dropConstraint,\n} from './operations/constraints';\nimport { createExtension } from './operations/dependencies';\nimport { createIndex, dropIndex } from './operations/indexes';\nimport { createNativeEnumType, dropNativeEnumType } from './operations/native-enum-types';\nimport {\n createRlsPolicy,\n disableRowLevelSecurity,\n dropRlsPolicy,\n enableRowLevelSecurity,\n renameRlsPolicy,\n} from './operations/rls';\nimport type { ForeignKeySpec } from './operations/shared';\nimport { step, targetDetails } from './operations/shared';\nimport { dropTable } from './operations/tables';\nimport { buildAddNotNullColumnWithTemporaryDefaultOperation } from './planner-recipes';\nimport type { PostgresPlanTargetDetails } from './planner-target-details';\n\ntype Op = SqlMigrationPlanOperation<PostgresPlanTargetDetails>;\n\n// Single module specifier emitted in user-edited `migration.ts` imports. The\n// Postgres migration facade re-exports both the `*Call` factory names\n// (createTable / addColumn / …) and the contract-free DDL builders\n// (col / lit / fn / primaryKey / foreignKey / unique) from\n// sql-relational-core/contract-free. We emit imports against the facade,\n// not against the underlying sql-relational-core subpath, because user\n// projects depend on `@prisma-next/postgres` (a runtime dep of every\n// init-scaffolded project) — they do not depend on the internal\n// `@prisma-next/sql-relational-core` package, so an emitted\n// `import … from '@prisma-next/sql-relational-core/contract-free'` fails\n// ESM resolution at runtime in user migrations even though pnpm has the\n// transitive package on disk.\nconst POSTGRES_MIGRATION_FACADE = '@prisma-next/postgres/migration';\n\nabstract class PostgresOpFactoryCallNode extends TsExpression implements FrameworkOpFactoryCall {\n abstract readonly factoryName: string;\n abstract readonly operationClass: MigrationOperationClass;\n abstract readonly label: string;\n abstract toOp(lowerer?: Lowerer): Op | Promise<Op>;\n\n importRequirements(): readonly ImportRequirement[] {\n return [{ moduleSpecifier: POSTGRES_MIGRATION_FACADE, symbol: this.factoryName }];\n }\n\n protected freeze(): void {\n Object.freeze(this);\n }\n}\n\n// ============================================================================\n// Table\n// ============================================================================\n\nexport function postgresDefaultToDdlColumnDefault(\n columnDefault: PostgresColumnDefault | undefined,\n): DdlColumn['default'] {\n if (!columnDefault) return undefined;\n switch (columnDefault.kind) {\n case 'literal':\n return new LiteralColumnDefault(columnDefault.value);\n case 'function':\n if (columnDefault.expression === 'autoincrement()') return undefined;\n return new FunctionColumnDefault(columnDefault.expression);\n case 'sequence':\n return new FunctionColumnDefault(\n `nextval('${escapeLiteral(quoteIdentifier(columnDefault.name))}'::regclass)`,\n );\n default: {\n const exhaustive: never = columnDefault;\n throw new Error(\n `postgresDefaultToDdlColumnDefault: unhandled kind \"${blindCast<{ kind: string }, 'exhaustiveness: surface the unhandled default kind'>(exhaustive).kind}\"`,\n );\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// TypeScript rendering helpers for DdlColumn / DdlTableConstraint\n// ---------------------------------------------------------------------------\n\nfunction renderDdlColumnDefault(def: AnyDdlColumnDefault | undefined): string {\n if (!def) return '';\n if (def.kind === 'literal') {\n return `lit(${jsonToTsSource(def.value)})`;\n }\n return `fn(${jsonToTsSource(def.expression)})`;\n}\n\nfunction renderDdlColumnAsTsCall(col: DdlColumn): string {\n const opts: string[] = [];\n if (col.notNull) opts.push('notNull: true');\n if (col.primaryKey) opts.push('primaryKey: true');\n if (col.default) opts.push(`default: ${renderDdlColumnDefault(col.default)}`);\n if (col.codecRef) opts.push(`codecRef: ${jsonToTsSource(col.codecRef)}`);\n const optsStr = opts.length > 0 ? `, { ${opts.join(', ')} }` : '';\n return `col(${jsonToTsSource(col.name)}, ${jsonToTsSource(col.type)}${optsStr})`;\n}\n\nfunction renderDdlConstraintAsTsCall(constraint: DdlTableConstraint): string {\n switch (constraint.kind) {\n case 'primary-key': {\n const nameOpt = constraint.name ? `, { name: ${jsonToTsSource(constraint.name)} }` : '';\n return `primaryKey(${jsonToTsSource(constraint.columns)}${nameOpt})`;\n }\n case 'foreign-key': {\n const opts: string[] = [];\n if (constraint.name) opts.push(`name: ${jsonToTsSource(constraint.name)}`);\n if (constraint.onDelete) opts.push(`onDelete: ${jsonToTsSource(constraint.onDelete)}`);\n if (constraint.onUpdate) opts.push(`onUpdate: ${jsonToTsSource(constraint.onUpdate)}`);\n const optsStr = opts.length > 0 ? `, { ${opts.join(', ')} }` : '';\n return `foreignKey(${jsonToTsSource(constraint.columns)}, ${jsonToTsSource(constraint.refTable)}, ${jsonToTsSource(constraint.refColumns)}${optsStr})`;\n }\n case 'unique': {\n const nameOpt = constraint.name ? `, { name: ${jsonToTsSource(constraint.name)} }` : '';\n return `unique(${jsonToTsSource(constraint.columns)}${nameOpt})`;\n }\n case 'check-expression':\n return `checkExpression(${jsonToTsSource(constraint.name)}, ${jsonToTsSource(constraint.expression)})`;\n }\n}\n\nfunction needsColOrConstraintImport(columns: readonly DdlColumn[]): boolean {\n return columns.length > 0;\n}\n\nfunction constraintImportSymbols(constraints: readonly DdlTableConstraint[] | undefined): string[] {\n if (!constraints || constraints.length === 0) return [];\n const symbols = new Set<string>();\n for (const c of constraints) {\n if (c.kind === 'primary-key') symbols.add('primaryKey');\n else if (c.kind === 'foreign-key') symbols.add('foreignKey');\n else if (c.kind === 'unique') symbols.add('unique');\n else if (c.kind === 'check-expression') symbols.add('checkExpression');\n }\n return [...symbols];\n}\n\nfunction defaultImportSymbols(columns: readonly DdlColumn[]): string[] {\n const symbols = new Set<string>();\n for (const col of columns) {\n if (col.default?.kind === 'literal') symbols.add('lit');\n else if (col.default?.kind === 'function') symbols.add('fn');\n }\n return [...symbols];\n}\n\nexport class CreateTableCall extends PostgresOpFactoryCallNode {\n readonly factoryName = 'createTable' as const;\n readonly operationClass = 'additive' as const;\n readonly schemaName: string;\n readonly tableName: string;\n readonly columns: readonly DdlColumn[];\n readonly constraints: readonly DdlTableConstraint[] | undefined;\n readonly label: string;\n\n constructor(\n schemaName: string,\n tableName: string,\n columns: readonly DdlColumn[],\n constraints?: readonly DdlTableConstraint[],\n ) {\n super();\n this.schemaName = schemaName;\n this.tableName = tableName;\n this.columns = Object.freeze([...columns]);\n this.constraints = constraints ? Object.freeze([...constraints]) : undefined;\n this.label = `Create table \"${tableName}\"`;\n this.freeze();\n }\n\n async toOp(lowerer?: ExecuteRequestLowerer): Promise<Op> {\n if (lowerer === undefined) {\n throw new Error(\n `CreateTableCall.toOp: a DDL lowerer is required on the Postgres planner path (table \"${this.tableName}\"). Pass the control adapter to createPostgresMigrationPlanner.`,\n );\n }\n const ddlNode = contractFreeDdl.createTable({\n ...ifDefined('schema', boundSchema(this.schemaName)),\n table: this.tableName,\n columns: this.columns,\n ...ifDefined('constraints', this.constraints),\n });\n const statement = await lowerer.lowerToExecuteRequest(ddlNode);\n const schemaName = this.schemaName;\n const tableName = this.tableName;\n const checks = tableExistsAst(schemaName, tableName);\n const absent = await lowerer.lowerToExecuteRequest(checks.tableAbsent());\n const present = await lowerer.lowerToExecuteRequest(checks.tablePresent());\n return {\n id: `table.${tableName}`,\n label: `Create table \"${tableName}\"`,\n summary: `Creates table \"${tableName}\"`,\n operationClass: 'additive',\n target: targetDetails('table', tableName, schemaName),\n precheck: [step(`ensure table \"${tableName}\" does not exist`, absent.sql, absent.params)],\n execute: [\n {\n description: `create table \"${tableName}\"`,\n sql: statement.sql,\n params: statement.params ?? [],\n },\n ],\n postcheck: [step(`verify table \"${tableName}\" exists`, present.sql, present.params)],\n };\n }\n\n renderTypeScript(): string {\n const columnsList = this.columns.map(renderDdlColumnAsTsCall).join(', ');\n const constraintsList = this.constraints\n ? this.constraints.map(renderDdlConstraintAsTsCall).join(', ')\n : undefined;\n\n const opts: string[] = [];\n if (this.schemaName !== UNBOUND_NAMESPACE_ID) {\n opts.push(`schema: ${jsonToTsSource(this.schemaName)}`);\n }\n opts.push(`table: ${jsonToTsSource(this.tableName)}`);\n opts.push(`columns: [${columnsList}]`);\n if (constraintsList) opts.push(`constraints: [${constraintsList}]`);\n\n return `this.createTable({ ${opts.join(', ')} })`;\n }\n\n override importRequirements(): readonly ImportRequirement[] {\n const req: ImportRequirement[] = [];\n if (needsColOrConstraintImport(this.columns)) {\n req.push({ moduleSpecifier: POSTGRES_MIGRATION_FACADE, symbol: 'col' });\n for (const sym of defaultImportSymbols(this.columns)) {\n req.push({ moduleSpecifier: POSTGRES_MIGRATION_FACADE, symbol: sym });\n }\n }\n for (const sym of constraintImportSymbols(this.constraints)) {\n req.push({ moduleSpecifier: POSTGRES_MIGRATION_FACADE, symbol: sym });\n }\n return req;\n }\n}\n\nexport class DropTableCall extends PostgresOpFactoryCallNode {\n readonly factoryName = 'dropTable' as const;\n readonly operationClass = 'destructive' as const;\n readonly schemaName: string;\n readonly tableName: string;\n readonly label: string;\n\n constructor(schemaName: string, tableName: string) {\n super();\n this.schemaName = schemaName;\n this.tableName = tableName;\n this.label = `Drop table \"${tableName}\"`;\n this.freeze();\n }\n\n async toOp(lowerer?: ExecuteRequestLowerer): Promise<Op> {\n if (lowerer === undefined) {\n throw new Error(\n `DropTableCall.toOp: a lowerer is required on the Postgres planner path (table \"${this.tableName}\"). Pass the control adapter to createPostgresMigrationPlanner.`,\n );\n }\n return dropTable(this.schemaName, this.tableName, lowerer);\n }\n\n renderTypeScript(): string {\n const opts: string[] = [];\n if (this.schemaName !== UNBOUND_NAMESPACE_ID) {\n opts.push(`schema: ${jsonToTsSource(this.schemaName)}`);\n }\n opts.push(`table: ${jsonToTsSource(this.tableName)}`);\n return `this.dropTable({ ${opts.join(', ')} })`;\n }\n\n override importRequirements(): readonly ImportRequirement[] {\n return [];\n }\n}\n\n// ============================================================================\n// Column\n// ============================================================================\n\nexport class AddColumnCall extends PostgresOpFactoryCallNode {\n readonly factoryName = 'addColumn' as const;\n readonly operationClass = 'additive' as const;\n readonly schemaName: string;\n readonly tableName: string;\n readonly column: DdlColumn;\n readonly label: string;\n\n constructor(schemaName: string, tableName: string, column: DdlColumn) {\n super();\n this.schemaName = schemaName;\n this.tableName = tableName;\n this.column = column;\n this.label = `Add column \"${column.name}\" to \"${tableName}\"`;\n this.freeze();\n }\n\n async toOp(lowerer?: ExecuteRequestLowerer): Promise<Op> {\n if (lowerer === undefined) {\n throw new Error(\n `AddColumnCall.toOp: a DDL lowerer is required on the Postgres planner path (column \"${this.column.name}\" on table \"${this.tableName}\"). Pass the control adapter to createPostgresMigrationPlanner.`,\n );\n }\n const ddlNode = contractFreeDdl.alterTable({\n ...ifDefined('schema', boundSchema(this.schemaName)),\n table: this.tableName,\n actions: [contractFreeDdl.addColumnAction(this.column)],\n });\n const statement = await lowerer.lowerToExecuteRequest(ddlNode);\n const schemaName = this.schemaName;\n const tableName = this.tableName;\n const columnName = this.column.name;\n const colChecks = columnExistsAst({ schema: schemaName, table: tableName, column: columnName });\n const absent = await lowerer.lowerToExecuteRequest(colChecks.columnAbsent());\n const present = await lowerer.lowerToExecuteRequest(colChecks.columnPresent());\n return {\n id: `column.${schemaName}.${tableName}.${columnName}`,\n label: `Add column \"${columnName}\" to \"${tableName}\"`,\n operationClass: 'additive',\n target: targetDetails('column', columnName, schemaName, tableName),\n precheck: [step(`ensure column \"${columnName}\" is missing`, absent.sql, absent.params)],\n execute: [step(`add column \"${columnName}\"`, statement.sql)],\n postcheck: [step(`verify column \"${columnName}\" exists`, present.sql, present.params)],\n };\n }\n\n renderTypeScript(): string {\n const opts: string[] = [];\n if (this.schemaName !== UNBOUND_NAMESPACE_ID) {\n opts.push(`schema: ${jsonToTsSource(this.schemaName)}`);\n }\n opts.push(`table: ${jsonToTsSource(this.tableName)}`);\n opts.push(`column: ${renderDdlColumnAsTsCall(this.column)}`);\n return `this.addColumn({ ${opts.join(', ')} })`;\n }\n\n override importRequirements(): readonly ImportRequirement[] {\n const req: ImportRequirement[] = [\n { moduleSpecifier: POSTGRES_MIGRATION_FACADE, symbol: 'col' },\n ];\n for (const sym of defaultImportSymbols([this.column])) {\n req.push({ moduleSpecifier: POSTGRES_MIGRATION_FACADE, symbol: sym });\n }\n return req;\n }\n}\n\nexport class DropColumnCall extends PostgresOpFactoryCallNode {\n readonly factoryName = 'dropColumn' as const;\n readonly operationClass = 'destructive' as const;\n readonly schemaName: string;\n readonly tableName: string;\n readonly columnName: string;\n readonly label: string;\n\n constructor(schemaName: string, tableName: string, columnName: string) {\n super();\n this.schemaName = schemaName;\n this.tableName = tableName;\n this.columnName = columnName;\n this.label = `Drop column \"${columnName}\" from \"${tableName}\"`;\n this.freeze();\n }\n\n async toOp(lowerer?: ExecuteRequestLowerer): Promise<Op> {\n if (lowerer === undefined) {\n throw new Error(\n `DropColumnCall.toOp: a lowerer is required on the Postgres planner path (column \"${this.columnName}\" on table \"${this.tableName}\"). Pass the control adapter to createPostgresMigrationPlanner.`,\n );\n }\n return dropColumn(this.schemaName, this.tableName, this.columnName, lowerer);\n }\n\n renderTypeScript(): string {\n const opts: string[] = [];\n if (this.schemaName !== UNBOUND_NAMESPACE_ID) {\n opts.push(`schema: ${jsonToTsSource(this.schemaName)}`);\n }\n opts.push(`table: ${jsonToTsSource(this.tableName)}`);\n opts.push(`column: ${jsonToTsSource(this.columnName)}`);\n return `this.dropColumn({ ${opts.join(', ')} })`;\n }\n\n override importRequirements(): readonly ImportRequirement[] {\n return [];\n }\n}\n\nexport interface AlterColumnTypeOptions {\n readonly qualifiedTargetType: string;\n readonly formatTypeExpected: string;\n readonly rawTargetTypeForLabel: string;\n readonly using?: string;\n}\n\nexport class AlterColumnTypeCall extends PostgresOpFactoryCallNode {\n readonly factoryName = 'alterColumnType' as const;\n readonly operationClass = 'destructive' as const;\n readonly schemaName: string;\n readonly tableName: string;\n readonly columnName: string;\n readonly options: AlterColumnTypeOptions;\n readonly label: string;\n\n constructor(\n schemaName: string,\n tableName: string,\n columnName: string,\n options: AlterColumnTypeOptions,\n ) {\n super();\n this.schemaName = schemaName;\n this.tableName = tableName;\n this.columnName = columnName;\n this.options = options;\n this.label = `Alter type of \"${tableName}\".\"${columnName}\" to ${options.rawTargetTypeForLabel}`;\n this.freeze();\n }\n\n async toOp(lowerer?: ExecuteRequestLowerer): Promise<Op> {\n if (lowerer === undefined) {\n throw new Error(\n `AlterColumnTypeCall.toOp: a lowerer is required on the Postgres planner path (column \"${this.columnName}\" on table \"${this.tableName}\"). Pass the control adapter to createPostgresMigrationPlanner.`,\n );\n }\n return alterColumnType(this.schemaName, this.tableName, this.columnName, this.options, lowerer);\n }\n\n renderTypeScript(): string {\n const opts: string[] = [];\n if (this.schemaName !== UNBOUND_NAMESPACE_ID) {\n opts.push(`schema: ${jsonToTsSource(this.schemaName)}`);\n }\n opts.push(`table: ${jsonToTsSource(this.tableName)}`);\n opts.push(`column: ${jsonToTsSource(this.columnName)}`);\n opts.push(`options: ${jsonToTsSource(this.options)}`);\n return `this.alterColumnType({ ${opts.join(', ')} })`;\n }\n\n override importRequirements(): readonly ImportRequirement[] {\n return [];\n }\n}\n\nexport class SetNotNullCall extends PostgresOpFactoryCallNode {\n readonly factoryName = 'setNotNull' as const;\n readonly operationClass = 'destructive' as const;\n readonly schemaName: string;\n readonly tableName: string;\n readonly columnName: string;\n readonly label: string;\n\n constructor(schemaName: string, tableName: string, columnName: string) {\n super();\n this.schemaName = schemaName;\n this.tableName = tableName;\n this.columnName = columnName;\n this.label = `Set NOT NULL on \"${tableName}\".\"${columnName}\"`;\n this.freeze();\n }\n\n async toOp(lowerer?: ExecuteRequestLowerer): Promise<Op> {\n if (lowerer === undefined) {\n throw new Error(\n `SetNotNullCall.toOp: a lowerer is required on the Postgres planner path (column \"${this.columnName}\" on table \"${this.tableName}\"). Pass the control adapter to createPostgresMigrationPlanner.`,\n );\n }\n return setNotNull(this.schemaName, this.tableName, this.columnName, lowerer);\n }\n\n renderTypeScript(): string {\n const opts: string[] = [];\n if (this.schemaName !== UNBOUND_NAMESPACE_ID) {\n opts.push(`schema: ${jsonToTsSource(this.schemaName)}`);\n }\n opts.push(`table: ${jsonToTsSource(this.tableName)}`);\n opts.push(`column: ${jsonToTsSource(this.columnName)}`);\n return `this.setNotNull({ ${opts.join(', ')} })`;\n }\n\n override importRequirements(): readonly ImportRequirement[] {\n return [];\n }\n}\n\nexport class DropNotNullCall extends PostgresOpFactoryCallNode {\n readonly factoryName = 'dropNotNull' as const;\n readonly operationClass = 'widening' as const;\n readonly schemaName: string;\n readonly tableName: string;\n readonly columnName: string;\n readonly label: string;\n\n constructor(schemaName: string, tableName: string, columnName: string) {\n super();\n this.schemaName = schemaName;\n this.tableName = tableName;\n this.columnName = columnName;\n this.label = `Drop NOT NULL on \"${tableName}\".\"${columnName}\"`;\n this.freeze();\n }\n\n async toOp(lowerer?: ExecuteRequestLowerer): Promise<Op> {\n if (lowerer === undefined) {\n throw new Error(\n `DropNotNullCall.toOp: a lowerer is required on the Postgres planner path (column \"${this.columnName}\" on table \"${this.tableName}\"). Pass the control adapter to createPostgresMigrationPlanner.`,\n );\n }\n return dropNotNull(this.schemaName, this.tableName, this.columnName, lowerer);\n }\n\n renderTypeScript(): string {\n const opts: string[] = [];\n if (this.schemaName !== UNBOUND_NAMESPACE_ID) {\n opts.push(`schema: ${jsonToTsSource(this.schemaName)}`);\n }\n opts.push(`table: ${jsonToTsSource(this.tableName)}`);\n opts.push(`column: ${jsonToTsSource(this.columnName)}`);\n return `this.dropNotNull({ ${opts.join(', ')} })`;\n }\n\n override importRequirements(): readonly ImportRequirement[] {\n return [];\n }\n}\n\nexport class SetDefaultCall extends PostgresOpFactoryCallNode {\n readonly factoryName = 'setDefault' as const;\n readonly operationClass: 'additive' | 'widening';\n readonly schemaName: string;\n readonly tableName: string;\n readonly columnName: string;\n readonly defaultSql: string;\n readonly label: string;\n\n constructor(\n schemaName: string,\n tableName: string,\n columnName: string,\n defaultSql: string,\n operationClass: 'additive' | 'widening' = 'additive',\n ) {\n super();\n this.schemaName = schemaName;\n this.tableName = tableName;\n this.columnName = columnName;\n this.defaultSql = defaultSql;\n this.operationClass = operationClass;\n this.label = `Set default on \"${tableName}\".\"${columnName}\"`;\n this.freeze();\n }\n\n async toOp(lowerer?: ExecuteRequestLowerer): Promise<Op> {\n if (lowerer === undefined) {\n throw new Error(\n `SetDefaultCall.toOp: a lowerer is required on the Postgres planner path (column \"${this.columnName}\" on table \"${this.tableName}\"). Pass the control adapter to createPostgresMigrationPlanner.`,\n );\n }\n return setDefault(\n this.schemaName,\n this.tableName,\n this.columnName,\n this.defaultSql,\n lowerer,\n this.operationClass,\n );\n }\n\n renderTypeScript(): string {\n const opts: string[] = [];\n if (this.schemaName !== UNBOUND_NAMESPACE_ID) {\n opts.push(`schema: ${jsonToTsSource(this.schemaName)}`);\n }\n opts.push(`table: ${jsonToTsSource(this.tableName)}`);\n opts.push(`column: ${jsonToTsSource(this.columnName)}`);\n opts.push(`defaultSql: ${jsonToTsSource(this.defaultSql)}`);\n if (this.operationClass !== 'additive') {\n opts.push(`operationClass: ${jsonToTsSource(this.operationClass)}`);\n }\n return `this.setDefault({ ${opts.join(', ')} })`;\n }\n\n override importRequirements(): readonly ImportRequirement[] {\n return [];\n }\n}\n\nexport class DropDefaultCall extends PostgresOpFactoryCallNode {\n readonly factoryName = 'dropDefault' as const;\n readonly operationClass = 'destructive' as const;\n readonly schemaName: string;\n readonly tableName: string;\n readonly columnName: string;\n readonly label: string;\n\n constructor(schemaName: string, tableName: string, columnName: string) {\n super();\n this.schemaName = schemaName;\n this.tableName = tableName;\n this.columnName = columnName;\n this.label = `Drop default on \"${tableName}\".\"${columnName}\"`;\n this.freeze();\n }\n\n async toOp(lowerer?: ExecuteRequestLowerer): Promise<Op> {\n if (lowerer === undefined) {\n throw new Error(\n `DropDefaultCall.toOp: a lowerer is required on the Postgres planner path (column \"${this.columnName}\" on table \"${this.tableName}\"). Pass the control adapter to createPostgresMigrationPlanner.`,\n );\n }\n return dropDefault(this.schemaName, this.tableName, this.columnName, lowerer);\n }\n\n renderTypeScript(): string {\n const opts: string[] = [];\n if (this.schemaName !== UNBOUND_NAMESPACE_ID) {\n opts.push(`schema: ${jsonToTsSource(this.schemaName)}`);\n }\n opts.push(`table: ${jsonToTsSource(this.tableName)}`);\n opts.push(`column: ${jsonToTsSource(this.columnName)}`);\n return `this.dropDefault({ ${opts.join(', ')} })`;\n }\n\n override importRequirements(): readonly ImportRequirement[] {\n return [];\n }\n}\n\n// ============================================================================\n// NOT NULL column additions (planner-internal; no authored surface)\n// ============================================================================\n\n/**\n * Planner-internal call for adding a NOT NULL column (no contract default) to\n * a table that must be empty at migration time. Carries the typed `DdlColumn`\n * and lowers it to an ADD COLUMN execute step via the adapter at `toOp` time.\n *\n * No authored `PostgresMigration` method: this call is only emitted by the\n * planner, never hand-written by migration authors.\n */\nexport class AddNotNullColumnDirectCall extends PostgresOpFactoryCallNode {\n readonly factoryName = 'rawSql' as const;\n readonly operationClass = 'additive' as const;\n readonly schemaName: string;\n readonly tableName: string;\n readonly columnName: string;\n readonly column: DdlColumn;\n readonly label: string;\n\n constructor(schemaName: string, tableName: string, columnName: string, column: DdlColumn) {\n super();\n this.schemaName = schemaName;\n this.tableName = tableName;\n this.columnName = columnName;\n this.column = column;\n this.label = `Add column ${columnName} to ${tableName}`;\n this.freeze();\n }\n\n async toOp(lowerer?: ExecuteRequestLowerer): Promise<Op> {\n if (lowerer === undefined) {\n throw new Error(\n `AddNotNullColumnDirectCall.toOp: a lowerer is required on the Postgres planner path (column \"${this.columnName}\" on table \"${this.tableName}\"). Pass the control adapter to createPostgresMigrationPlanner.`,\n );\n }\n return addNotNullColumnDirect(this.schemaName, this.tableName, this.column, lowerer);\n }\n\n renderTypeScript(): string {\n return `rawSql(${jsonToTsSource({ id: `column.${this.tableName}.${this.columnName}`, label: this.label, operationClass: 'additive' })})`;\n }\n\n override importRequirements(): readonly ImportRequirement[] {\n return [];\n }\n}\n\n/**\n * Planner-internal call for adding a NOT NULL column (no contract default)\n * using a temporary default value for non-empty tables. Carries all parameters\n * needed for `buildAddNotNullColumnWithTemporaryDefaultOperation`; both the\n * typed ADD COLUMN execute step and the pre/postchecks are lowered via the\n * adapter at `toOp` time.\n *\n * No authored `PostgresMigration` method: this call is only emitted by the\n * planner, never hand-written by migration authors.\n */\nexport class AddNotNullColumnWithTempDefaultCall extends PostgresOpFactoryCallNode {\n readonly factoryName = 'rawSql' as const;\n readonly operationClass = 'additive' as const;\n readonly schemaName: string;\n readonly tableName: string;\n readonly columnName: string;\n readonly column: StorageColumn;\n readonly codecHooks: Map<string, CodecControlHooks>;\n readonly storageTypes: Record<string, StorageTypeInstance>;\n readonly temporaryDefault: string;\n readonly label: string;\n\n constructor(options: {\n readonly schemaName: string;\n readonly tableName: string;\n readonly columnName: string;\n readonly column: StorageColumn;\n readonly codecHooks: Map<string, CodecControlHooks>;\n readonly storageTypes: Record<string, StorageTypeInstance>;\n readonly temporaryDefault: string;\n }) {\n super();\n this.schemaName = options.schemaName;\n this.tableName = options.tableName;\n this.columnName = options.columnName;\n this.column = options.column;\n this.codecHooks = options.codecHooks;\n this.storageTypes = options.storageTypes;\n this.temporaryDefault = options.temporaryDefault;\n this.label = `Add column ${options.columnName} to ${options.tableName}`;\n this.freeze();\n }\n\n async toOp(lowerer?: ExecuteRequestLowerer): Promise<Op> {\n if (lowerer === undefined) {\n throw new Error(\n `AddNotNullColumnWithTempDefaultCall.toOp: a lowerer is required on the Postgres planner path (column \"${this.columnName}\" on table \"${this.tableName}\"). Pass the control adapter to createPostgresMigrationPlanner.`,\n );\n }\n return buildAddNotNullColumnWithTemporaryDefaultOperation({\n schema: this.schemaName,\n tableName: this.tableName,\n columnName: this.columnName,\n column: this.column,\n codecHooks: this.codecHooks,\n storageTypes: this.storageTypes,\n temporaryDefault: this.temporaryDefault,\n lowerer,\n });\n }\n\n renderTypeScript(): string {\n return `rawSql(${jsonToTsSource({ id: `column.${this.tableName}.${this.columnName}`, label: this.label, operationClass: 'additive' })})`;\n }\n\n override importRequirements(): readonly ImportRequirement[] {\n return [];\n }\n}\n\n// ============================================================================\n// Constraints\n// ============================================================================\n\nfunction constraintCallOptions(\n schemaName: string,\n tableName: string,\n constraintName: string,\n): string {\n const opts: string[] = [];\n if (schemaName !== UNBOUND_NAMESPACE_ID) {\n opts.push(`schema: ${jsonToTsSource(schemaName)}`);\n }\n opts.push(`table: ${jsonToTsSource(tableName)}`);\n opts.push(`constraint: ${jsonToTsSource(constraintName)}`);\n return opts.join(', ');\n}\n\nexport class AddPrimaryKeyCall extends PostgresOpFactoryCallNode {\n readonly factoryName = 'addPrimaryKey' as const;\n readonly operationClass = 'additive' as const;\n readonly schemaName: string;\n readonly tableName: string;\n readonly constraintName: string;\n readonly columns: readonly string[];\n readonly label: string;\n\n constructor(\n schemaName: string,\n tableName: string,\n constraintName: string,\n columns: readonly string[],\n ) {\n super();\n this.schemaName = schemaName;\n this.tableName = tableName;\n this.constraintName = constraintName;\n this.columns = columns;\n this.label = `Add primary key on \"${tableName}\"`;\n this.freeze();\n }\n\n async toOp(lowerer?: ExecuteRequestLowerer): Promise<Op> {\n if (lowerer === undefined) {\n throw new Error(\n `AddPrimaryKeyCall.toOp: a lowerer is required on the Postgres planner path (constraint \"${this.constraintName}\" on table \"${this.tableName}\"). Pass the control adapter to createPostgresMigrationPlanner.`,\n );\n }\n return addPrimaryKey(\n this.schemaName,\n this.tableName,\n this.constraintName,\n this.columns,\n lowerer,\n );\n }\n\n renderTypeScript(): string {\n return `this.addPrimaryKey({ ${constraintCallOptions(this.schemaName, this.tableName, this.constraintName)}, columns: ${jsonToTsSource(this.columns)} })`;\n }\n\n override importRequirements(): readonly ImportRequirement[] {\n return [];\n }\n}\n\nexport class AddUniqueCall extends PostgresOpFactoryCallNode {\n readonly factoryName = 'addUnique' as const;\n readonly operationClass = 'additive' as const;\n readonly schemaName: string;\n readonly tableName: string;\n readonly constraintName: string;\n readonly columns: readonly string[];\n readonly label: string;\n\n constructor(\n schemaName: string,\n tableName: string,\n constraintName: string,\n columns: readonly string[],\n ) {\n super();\n this.schemaName = schemaName;\n this.tableName = tableName;\n this.constraintName = constraintName;\n this.columns = columns;\n this.label = `Add unique constraint on \"${tableName}\" (${columns.join(', ')})`;\n this.freeze();\n }\n\n async toOp(lowerer?: ExecuteRequestLowerer): Promise<Op> {\n if (lowerer === undefined) {\n throw new Error(\n `AddUniqueCall.toOp: a lowerer is required on the Postgres planner path (constraint \"${this.constraintName}\" on table \"${this.tableName}\"). Pass the control adapter to createPostgresMigrationPlanner.`,\n );\n }\n return addUnique(this.schemaName, this.tableName, this.constraintName, this.columns, lowerer);\n }\n\n renderTypeScript(): string {\n return `this.addUnique({ ${constraintCallOptions(this.schemaName, this.tableName, this.constraintName)}, columns: ${jsonToTsSource(this.columns)} })`;\n }\n\n override importRequirements(): readonly ImportRequirement[] {\n return [];\n }\n}\n\nexport class AddForeignKeyCall extends PostgresOpFactoryCallNode {\n readonly factoryName = 'addForeignKey' as const;\n readonly operationClass = 'additive' as const;\n readonly schemaName: string;\n readonly tableName: string;\n readonly fk: ForeignKeySpec;\n readonly label: string;\n\n constructor(schemaName: string, tableName: string, fk: ForeignKeySpec) {\n super();\n this.schemaName = schemaName;\n this.tableName = tableName;\n this.fk = fk;\n this.label = `Add foreign key \"${fk.name}\" on \"${tableName}\"`;\n this.freeze();\n }\n\n async toOp(lowerer?: ExecuteRequestLowerer): Promise<Op> {\n if (lowerer === undefined) {\n throw new Error(\n `AddForeignKeyCall.toOp: a lowerer is required on the Postgres planner path (constraint \"${this.fk.name}\" on table \"${this.tableName}\"). Pass the control adapter to createPostgresMigrationPlanner.`,\n );\n }\n return addForeignKey(this.schemaName, this.tableName, this.fk, lowerer);\n }\n\n renderTypeScript(): string {\n const opts: string[] = [];\n if (this.schemaName !== UNBOUND_NAMESPACE_ID) {\n opts.push(`schema: ${jsonToTsSource(this.schemaName)}`);\n }\n opts.push(`table: ${jsonToTsSource(this.tableName)}`);\n opts.push(`foreignKey: ${jsonToTsSource(this.fk)}`);\n return `this.addForeignKey({ ${opts.join(', ')} })`;\n }\n\n override importRequirements(): readonly ImportRequirement[] {\n return [];\n }\n}\n\nexport class DropConstraintCall extends PostgresOpFactoryCallNode {\n readonly factoryName = 'dropConstraint' as const;\n readonly operationClass = 'destructive' as const;\n readonly schemaName: string;\n readonly tableName: string;\n readonly constraintName: string;\n readonly kind: 'foreignKey' | 'unique' | 'primaryKey';\n readonly label: string;\n\n constructor(\n schemaName: string,\n tableName: string,\n constraintName: string,\n kind: 'foreignKey' | 'unique' | 'primaryKey' = 'unique',\n ) {\n super();\n this.schemaName = schemaName;\n this.tableName = tableName;\n this.constraintName = constraintName;\n this.kind = kind;\n this.label = `Drop constraint \"${constraintName}\" on \"${tableName}\"`;\n this.freeze();\n }\n\n async toOp(lowerer?: ExecuteRequestLowerer): Promise<Op> {\n if (lowerer === undefined) {\n throw new Error(\n `DropConstraintCall.toOp: a lowerer is required on the Postgres planner path (constraint \"${this.constraintName}\" on table \"${this.tableName}\"). Pass the control adapter to createPostgresMigrationPlanner.`,\n );\n }\n return dropConstraint(this.schemaName, this.tableName, this.constraintName, lowerer, this.kind);\n }\n\n renderTypeScript(): string {\n const opts = [constraintCallOptions(this.schemaName, this.tableName, this.constraintName)];\n if (this.kind !== 'unique') {\n opts.push(`kind: ${jsonToTsSource(this.kind)}`);\n }\n return `this.dropConstraint({ ${opts.join(', ')} })`;\n }\n\n override importRequirements(): readonly ImportRequirement[] {\n return [];\n }\n}\n\nexport class AddCheckConstraintCall extends PostgresOpFactoryCallNode {\n readonly factoryName = 'addCheckConstraint' as const;\n readonly operationClass = 'additive' as const;\n readonly schemaName: string;\n readonly tableName: string;\n readonly constraintName: string;\n readonly column: string;\n readonly values: readonly string[];\n readonly label: string;\n\n constructor(\n schemaName: string,\n tableName: string,\n constraintName: string,\n column: string,\n values: readonly string[],\n ) {\n super();\n this.schemaName = schemaName;\n this.tableName = tableName;\n this.constraintName = constraintName;\n this.column = column;\n this.values = values;\n this.label = `Add check constraint \"${constraintName}\" on \"${tableName}\".\"${column}\"`;\n this.freeze();\n }\n\n async toOp(lowerer?: ExecuteRequestLowerer): Promise<Op> {\n if (lowerer === undefined) {\n throw new Error(\n `AddCheckConstraintCall.toOp: a lowerer is required on the Postgres planner path (constraint \"${this.constraintName}\" on table \"${this.tableName}\"). Pass the control adapter to createPostgresMigrationPlanner.`,\n );\n }\n return addCheckConstraint(\n this.schemaName,\n this.tableName,\n this.constraintName,\n this.column,\n this.values,\n lowerer,\n );\n }\n\n renderTypeScript(): string {\n return `this.addCheckConstraint({ ${constraintCallOptions(this.schemaName, this.tableName, this.constraintName)}, column: ${jsonToTsSource(this.column)}, values: ${jsonToTsSource(this.values)} })`;\n }\n\n override importRequirements(): readonly ImportRequirement[] {\n return [];\n }\n}\n\nexport class DropCheckConstraintCall extends PostgresOpFactoryCallNode {\n readonly factoryName = 'dropCheckConstraint' as const;\n readonly operationClass = 'destructive' as const;\n readonly schemaName: string;\n readonly tableName: string;\n readonly constraintName: string;\n readonly label: string;\n\n constructor(schemaName: string, tableName: string, constraintName: string) {\n super();\n this.schemaName = schemaName;\n this.tableName = tableName;\n this.constraintName = constraintName;\n this.label = `Drop check constraint \"${constraintName}\" on \"${tableName}\"`;\n this.freeze();\n }\n\n async toOp(lowerer?: ExecuteRequestLowerer): Promise<Op> {\n if (lowerer === undefined) {\n throw new Error(\n `DropCheckConstraintCall.toOp: a lowerer is required on the Postgres planner path (constraint \"${this.constraintName}\" on table \"${this.tableName}\"). Pass the control adapter to createPostgresMigrationPlanner.`,\n );\n }\n return dropCheckConstraint(this.schemaName, this.tableName, this.constraintName, lowerer);\n }\n\n renderTypeScript(): string {\n return `this.dropCheckConstraint({ ${constraintCallOptions(this.schemaName, this.tableName, this.constraintName)} })`;\n }\n\n override importRequirements(): readonly ImportRequirement[] {\n return [];\n }\n}\n\n// ============================================================================\n// Indexes\n// ============================================================================\n\nexport class CreateIndexCall extends PostgresOpFactoryCallNode {\n readonly factoryName = 'createIndex' as const;\n readonly operationClass = 'additive' as const;\n readonly schemaName: string;\n readonly tableName: string;\n readonly indexName: string;\n readonly columns: readonly string[];\n // Named indexType (not typeName): `locationForCall` in issue-planner.ts reads\n // a call's `typeName` as a CREATE TYPE target location, which an index is not.\n readonly indexType: string | undefined;\n readonly options: Record<string, unknown> | undefined;\n readonly label: string;\n\n constructor(\n schemaName: string,\n tableName: string,\n indexName: string,\n columns: readonly string[],\n extras?: { readonly type?: string; readonly options?: Record<string, unknown> },\n ) {\n super();\n this.schemaName = schemaName;\n this.tableName = tableName;\n this.indexName = indexName;\n this.columns = columns;\n this.indexType = extras?.type;\n this.options = extras?.options;\n this.label = `Create index \"${indexName}\" on \"${tableName}\"`;\n this.freeze();\n }\n\n async toOp(lowerer?: ExecuteRequestLowerer): Promise<Op> {\n if (lowerer === undefined) {\n throw new Error(\n `CreateIndexCall.toOp: a lowerer is required on the Postgres planner path (index \"${this.indexName}\" on table \"${this.tableName}\"). Pass the control adapter to createPostgresMigrationPlanner.`,\n );\n }\n const extras: { type?: string; options?: Record<string, unknown> } = {};\n if (this.indexType !== undefined) extras.type = this.indexType;\n if (this.options !== undefined) extras.options = this.options;\n return createIndex(\n this.schemaName,\n this.tableName,\n this.indexName,\n this.columns,\n lowerer,\n extras,\n );\n }\n\n renderTypeScript(): string {\n const opts: string[] = [];\n if (this.schemaName !== UNBOUND_NAMESPACE_ID) {\n opts.push(`schema: ${jsonToTsSource(this.schemaName)}`);\n }\n opts.push(`table: ${jsonToTsSource(this.tableName)}`);\n opts.push(`index: ${jsonToTsSource(this.indexName)}`);\n opts.push(`columns: ${jsonToTsSource(this.columns)}`);\n if (this.indexType !== undefined || this.options !== undefined) {\n const extrasParts: string[] = [];\n if (this.indexType !== undefined) extrasParts.push(`type: ${jsonToTsSource(this.indexType)}`);\n if (this.options !== undefined) extrasParts.push(`options: ${jsonToTsSource(this.options)}`);\n opts.push(`extras: { ${extrasParts.join(', ')} }`);\n }\n return `this.createIndex({ ${opts.join(', ')} })`;\n }\n\n override importRequirements(): readonly ImportRequirement[] {\n return [];\n }\n}\n\nexport class DropIndexCall extends PostgresOpFactoryCallNode {\n readonly factoryName = 'dropIndex' as const;\n readonly operationClass = 'destructive' as const;\n readonly schemaName: string;\n readonly tableName: string;\n readonly indexName: string;\n readonly label: string;\n\n constructor(schemaName: string, tableName: string, indexName: string) {\n super();\n this.schemaName = schemaName;\n this.tableName = tableName;\n this.indexName = indexName;\n this.label = `Drop index \"${indexName}\"`;\n this.freeze();\n }\n\n async toOp(lowerer?: ExecuteRequestLowerer): Promise<Op> {\n if (lowerer === undefined) {\n throw new Error(\n `DropIndexCall.toOp: a lowerer is required on the Postgres planner path (index \"${this.indexName}\" on table \"${this.tableName}\"). Pass the control adapter to createPostgresMigrationPlanner.`,\n );\n }\n return dropIndex(this.schemaName, this.tableName, this.indexName, lowerer);\n }\n\n renderTypeScript(): string {\n const opts: string[] = [];\n if (this.schemaName !== UNBOUND_NAMESPACE_ID) {\n opts.push(`schema: ${jsonToTsSource(this.schemaName)}`);\n }\n opts.push(`table: ${jsonToTsSource(this.tableName)}`);\n opts.push(`index: ${jsonToTsSource(this.indexName)}`);\n return `this.dropIndex({ ${opts.join(', ')} })`;\n }\n\n override importRequirements(): readonly ImportRequirement[] {\n return [];\n }\n}\n\n// ============================================================================\n// Raw SQL\n// ============================================================================\n\n/**\n * Laundered pre-built operation.\n *\n * Wraps an already-materialized `SqlMigrationPlanOperation` — typically one\n * produced by a SQL-family method or a codec control hook — so the planner\n * can carry it alongside IR nodes without reverse-engineering it into a\n * structured call class. Doubles as the user-facing escape hatch for raw\n * migrations: authors can pass a full op shape to `rawSql({...})`.\n *\n * `toOp()` returns the stored op unchanged. `renderTypeScript()` emits\n * `rawSql({...})` with the op serialized as a JSON literal — round-tripping\n * requires every field on the op to be JSON-serializable (no closures).\n */\nexport class RawSqlCall extends PostgresOpFactoryCallNode {\n readonly factoryName = 'rawSql' as const;\n readonly operationClass: MigrationOperationClass;\n readonly label: string;\n readonly op: Op;\n\n constructor(op: Op) {\n super();\n this.op = op;\n this.label = op.label;\n this.operationClass = op.operationClass;\n this.freeze();\n }\n\n toOp(): Op {\n return this.op;\n }\n\n renderTypeScript(): string {\n return `rawSql(${jsonToTsSource(this.op)})`;\n }\n}\n\n// ============================================================================\n// Database dependencies (structured DDL)\n// ============================================================================\n\nexport class CreateExtensionCall extends PostgresOpFactoryCallNode {\n readonly factoryName = 'createExtension' as const;\n readonly operationClass = 'additive' as const;\n readonly extensionName: string;\n readonly label: string;\n\n constructor(extensionName: string) {\n super();\n this.extensionName = extensionName;\n this.label = `Create extension \"${extensionName}\"`;\n this.freeze();\n }\n\n toOp(): Op {\n return createExtension(this.extensionName);\n }\n\n renderTypeScript(): string {\n return `createExtension(${jsonToTsSource(this.extensionName)})`;\n }\n}\n\nexport class CreateSchemaCall extends PostgresOpFactoryCallNode {\n readonly factoryName = 'createSchema' as const;\n readonly operationClass = 'additive' as const;\n readonly schemaName: string;\n readonly label: string;\n\n constructor(schemaName: string) {\n super();\n this.schemaName = schemaName;\n this.label = `Create schema \"${schemaName}\"`;\n this.freeze();\n }\n\n async toOp(lowerer?: ExecuteRequestLowerer): Promise<Op> {\n if (lowerer === undefined) {\n throw new Error(\n `CreateSchemaCall.toOp: a DDL lowerer is required on the Postgres planner path (schema \"${this.schemaName}\"). Pass the control adapter to createPostgresMigrationPlanner.`,\n );\n }\n const ddlNode = contractFreeDdl.createSchema({ schema: this.schemaName, ifNotExists: true });\n const statement = await lowerer.lowerToExecuteRequest(ddlNode);\n const schemaName = this.schemaName;\n return {\n id: `schema.${schemaName}`,\n label: `Create schema \"${schemaName}\"`,\n operationClass: 'additive',\n target: { id: 'postgres' },\n precheck: [],\n execute: [\n {\n description: `Create schema \"${schemaName}\"`,\n sql: statement.sql,\n params: statement.params ?? [],\n },\n ],\n postcheck: [],\n };\n }\n\n renderTypeScript(): string {\n return `this.createSchema({ schema: ${jsonToTsSource(this.schemaName)} })`;\n }\n\n override importRequirements(): readonly ImportRequirement[] {\n return [];\n }\n}\n\n// ============================================================================\n// Native enum types\n// ============================================================================\n\nexport class CreateNativeEnumTypeCall extends PostgresOpFactoryCallNode {\n readonly factoryName = 'createNativeEnumType' as const;\n readonly operationClass = 'additive' as const;\n readonly schemaName: string;\n readonly typeName: string;\n readonly members: readonly string[];\n readonly label: string;\n\n constructor(schemaName: string, typeName: string, members: readonly string[]) {\n super();\n this.schemaName = schemaName;\n this.typeName = typeName;\n this.members = Object.freeze([...members]);\n this.label = `Create enum type \"${typeName}\"`;\n this.freeze();\n }\n\n async toOp(lowerer?: ExecuteRequestLowerer): Promise<Op> {\n if (lowerer === undefined) {\n throw new Error(\n `CreateNativeEnumTypeCall.toOp: a DDL lowerer is required on the Postgres planner path (type \"${this.typeName}\"). Pass the control adapter to createPostgresMigrationPlanner.`,\n );\n }\n return createNativeEnumType(this.schemaName, this.typeName, this.members, lowerer);\n }\n\n renderTypeScript(): string {\n const opts = [\n `schema: ${jsonToTsSource(this.schemaName)}`,\n `typeName: ${jsonToTsSource(this.typeName)}`,\n `members: ${jsonToTsSource(this.members)}`,\n ];\n return `this.createNativeEnumType({ ${opts.join(', ')} })`;\n }\n\n override importRequirements(): readonly ImportRequirement[] {\n return [];\n }\n}\n\nexport class DropNativeEnumTypeCall extends PostgresOpFactoryCallNode {\n readonly factoryName = 'dropNativeEnumType' as const;\n readonly operationClass = 'destructive' as const;\n readonly schemaName: string;\n readonly typeName: string;\n readonly label: string;\n\n constructor(schemaName: string, typeName: string) {\n super();\n this.schemaName = schemaName;\n this.typeName = typeName;\n this.label = `Drop enum type \"${typeName}\"`;\n this.freeze();\n }\n\n async toOp(lowerer?: ExecuteRequestLowerer): Promise<Op> {\n if (lowerer === undefined) {\n throw new Error(\n `DropNativeEnumTypeCall.toOp: a DDL lowerer is required on the Postgres planner path (type \"${this.typeName}\"). Pass the control adapter to createPostgresMigrationPlanner.`,\n );\n }\n return dropNativeEnumType(this.schemaName, this.typeName, lowerer);\n }\n\n renderTypeScript(): string {\n const opts = [\n `schema: ${jsonToTsSource(this.schemaName)}`,\n `typeName: ${jsonToTsSource(this.typeName)}`,\n ];\n return `this.dropNativeEnumType({ ${opts.join(', ')} })`;\n }\n\n override importRequirements(): readonly ImportRequirement[] {\n return [];\n }\n}\n\n// ============================================================================\n// Data transform\n// ============================================================================\n\n/**\n * A planner-generated data-transform stub. `checkSlot` and `runSlot` name\n * the unfilled authoring slots that the rendered `migration.ts` will expose\n * to the user via `placeholder(\"…\")` calls. `toOp()` always throws\n * `PN-MIG-2001`: the planner cannot lower a stubbed transform to a runtime\n * op — the user must fill the rendered `migration.ts` and re-emit.\n */\nexport class DataTransformCall extends PostgresOpFactoryCallNode {\n readonly factoryName = 'dataTransform' as const;\n readonly operationClass: MigrationOperationClass;\n readonly label: string;\n readonly checkSlot: string;\n readonly runSlot: string;\n\n constructor(\n label: string,\n checkSlot: string,\n runSlot: string,\n operationClass: MigrationOperationClass = 'data',\n ) {\n super();\n this.label = label;\n this.checkSlot = checkSlot;\n this.runSlot = runSlot;\n this.operationClass = operationClass;\n this.freeze();\n }\n\n toOp(): Op {\n throw errorUnfilledPlaceholder(this.label);\n }\n\n renderTypeScript(): string {\n return [\n `this.dataTransform(endContract, ${jsonToTsSource(this.label)}, {`,\n ` check: () => placeholder(${jsonToTsSource(this.checkSlot)}),`,\n ` run: () => placeholder(${jsonToTsSource(this.runSlot)}),`,\n '})',\n ].join('\\n');\n }\n\n override importRequirements(): readonly ImportRequirement[] {\n return [\n { moduleSpecifier: POSTGRES_MIGRATION_FACADE, symbol: 'placeholder' },\n {\n moduleSpecifier: './end-contract.json',\n symbol: 'endContract',\n kind: 'default',\n attributes: { type: 'json' },\n },\n ];\n }\n}\n\nexport class CreatePostgresRlsPolicyCall extends PostgresOpFactoryCallNode {\n readonly factoryName = 'createRlsPolicy' as const;\n readonly operationClass = 'additive' as const;\n readonly schemaName: string;\n readonly tableName: string;\n readonly policy: PostgresRlsPolicy;\n readonly label: string;\n\n constructor(schemaName: string, tableName: string, policy: PostgresRlsPolicy) {\n super();\n this.schemaName = schemaName;\n this.tableName = tableName;\n this.policy = policy;\n this.label = `Create RLS policy \"${policy.name}\" on \"${tableName}\"`;\n this.freeze();\n }\n\n async toOp(lowerer?: ExecuteRequestLowerer): Promise<Op> {\n if (lowerer === undefined) {\n throw new Error(\n `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.`,\n );\n }\n return createRlsPolicy(this.schemaName, this.tableName, this.policy, lowerer);\n }\n\n renderTypeScript(): string {\n return `createRlsPolicy(${jsonToTsSource(this.schemaName)}, ${jsonToTsSource(this.tableName)}, ${jsonToTsSource(this.policy)})`;\n }\n}\n\nexport class DropPostgresRlsPolicyCall extends PostgresOpFactoryCallNode {\n readonly factoryName = 'dropRlsPolicy' as const;\n readonly operationClass = 'destructive' as const;\n readonly schemaName: string;\n readonly tableName: string;\n readonly policyName: string;\n readonly label: string;\n\n constructor(schemaName: string, tableName: string, policyName: string) {\n super();\n this.schemaName = schemaName;\n this.tableName = tableName;\n this.policyName = policyName;\n this.label = `Drop RLS policy \"${policyName}\" on \"${tableName}\"`;\n this.freeze();\n }\n\n async toOp(lowerer?: ExecuteRequestLowerer): Promise<Op> {\n if (lowerer === undefined) {\n throw new Error(\n `DropPostgresRlsPolicyCall.toOp: a lowerer is required on the Postgres planner path (policy \"${this.policyName}\" on table \"${this.tableName}\"). Pass the control adapter to createPostgresMigrationPlanner.`,\n );\n }\n return dropRlsPolicy(this.schemaName, this.tableName, this.policyName, lowerer);\n }\n\n renderTypeScript(): string {\n return `dropRlsPolicy(${jsonToTsSource(this.schemaName)}, ${jsonToTsSource(this.tableName)}, ${jsonToTsSource(this.policyName)})`;\n }\n}\n\nexport class EnableRowLevelSecurityCall extends PostgresOpFactoryCallNode {\n readonly factoryName = 'enableRowLevelSecurity' as const;\n readonly operationClass = 'additive' as const;\n readonly schemaName: string;\n readonly tableName: string;\n readonly label: string;\n\n constructor(schemaName: string, tableName: string) {\n super();\n this.schemaName = schemaName;\n this.tableName = tableName;\n this.label = `Enable row-level security on \"${tableName}\"`;\n this.freeze();\n }\n\n async toOp(lowerer?: ExecuteRequestLowerer): Promise<Op> {\n if (lowerer === undefined) {\n throw new Error(\n `EnableRowLevelSecurityCall.toOp: a lowerer is required on the Postgres planner path (table \"${this.tableName}\"). Pass the control adapter to createPostgresMigrationPlanner.`,\n );\n }\n return enableRowLevelSecurity(this.schemaName, this.tableName, lowerer);\n }\n\n renderTypeScript(): string {\n return `enableRowLevelSecurity(${jsonToTsSource(this.schemaName)}, ${jsonToTsSource(this.tableName)})`;\n }\n}\n\nexport class DisableRowLevelSecurityCall extends PostgresOpFactoryCallNode {\n readonly factoryName = 'disableRowLevelSecurity' as const;\n readonly operationClass = 'destructive' as const;\n readonly schemaName: string;\n readonly tableName: string;\n readonly label: string;\n\n constructor(schemaName: string, tableName: string) {\n super();\n this.schemaName = schemaName;\n this.tableName = tableName;\n this.label = `Disable row-level security on \"${tableName}\"`;\n this.freeze();\n }\n\n async toOp(lowerer?: ExecuteRequestLowerer): Promise<Op> {\n if (lowerer === undefined) {\n throw new Error(\n `DisableRowLevelSecurityCall.toOp: a lowerer is required on the Postgres planner path (table \"${this.tableName}\"). Pass the control adapter to createPostgresMigrationPlanner.`,\n );\n }\n return disableRowLevelSecurity(this.schemaName, this.tableName, lowerer);\n }\n\n renderTypeScript(): string {\n return `disableRowLevelSecurity(${jsonToTsSource(this.schemaName)}, ${jsonToTsSource(this.tableName)})`;\n }\n}\n\nexport class RenamePostgresRlsPolicyCall extends PostgresOpFactoryCallNode {\n readonly factoryName = 'renameRlsPolicy' as const;\n // `widening` is chosen so the rename plans under every allowance set except\n // additive-only init — a rename is neither additive-creation nor\n // destructive, and the class vocabulary has no neutral middle class. It is\n // NOT that a rename widens anything; this is the accepted typology tradeoff.\n readonly operationClass = 'widening' as const;\n readonly schemaName: string;\n readonly tableName: string;\n readonly oldPolicyName: string;\n readonly newPolicyName: string;\n readonly label: string;\n\n constructor(schemaName: string, tableName: string, oldPolicyName: string, newPolicyName: string) {\n super();\n this.schemaName = schemaName;\n this.tableName = tableName;\n this.oldPolicyName = oldPolicyName;\n this.newPolicyName = newPolicyName;\n this.label = `Rename RLS policy \"${oldPolicyName}\" to \"${newPolicyName}\" on \"${tableName}\"`;\n this.freeze();\n }\n\n async toOp(lowerer?: ExecuteRequestLowerer): Promise<Op> {\n if (lowerer === undefined) {\n throw new Error(\n `RenamePostgresRlsPolicyCall.toOp: a lowerer is required on the Postgres planner path (policy \"${this.oldPolicyName}\" on table \"${this.tableName}\"). Pass the control adapter to createPostgresMigrationPlanner.`,\n );\n }\n return renameRlsPolicy(\n this.schemaName,\n this.tableName,\n this.oldPolicyName,\n this.newPolicyName,\n lowerer,\n );\n }\n\n renderTypeScript(): string {\n return `renameRlsPolicy(${jsonToTsSource(this.schemaName)}, ${jsonToTsSource(this.tableName)}, ${jsonToTsSource(this.oldPolicyName)}, ${jsonToTsSource(this.newPolicyName)})`;\n }\n}\n\nexport type PostgresOpFactoryCall =\n | CreateTableCall\n | DropTableCall\n | AddColumnCall\n | DropColumnCall\n | AlterColumnTypeCall\n | SetNotNullCall\n | DropNotNullCall\n | SetDefaultCall\n | DropDefaultCall\n | AddNotNullColumnDirectCall\n | AddNotNullColumnWithTempDefaultCall\n | AddPrimaryKeyCall\n | AddForeignKeyCall\n | AddUniqueCall\n | AddCheckConstraintCall\n | DropCheckConstraintCall\n | CreateIndexCall\n | DropIndexCall\n | DropConstraintCall\n | RawSqlCall\n | CreateExtensionCall\n | CreateSchemaCall\n | CreateNativeEnumTypeCall\n | DropNativeEnumTypeCall\n | CreatePostgresRlsPolicyCall\n | DropPostgresRlsPolicyCall\n | EnableRowLevelSecurityCall\n | DisableRowLevelSecurityCall\n | RenamePostgresRlsPolicyCall\n | DataTransformCall;\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-migration-DkmgGNcv.d.mts","names":[],"sources":["../src/core/migrations/operations/indexes.ts","../src/core/migrations/postgres-migration.ts"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-migration-fndp3Mbm.mjs","names":["SqlMigration","#endView","#startView"],"sources":["../src/core/migrations/postgres-migration.ts"],"sourcesContent":["import type { Contract } from '@prisma-next/contract/types';\nimport type { SqlMigrationPlanOperation } from '@prisma-next/family-sql/control';\nimport type { SqlControlAdapter } from '@prisma-next/family-sql/control-adapter';\nimport { Migration as SqlMigration } from '@prisma-next/family-sql/migration';\nimport type { ControlStack } from '@prisma-next/framework-components/control';\nimport { MigrationContractViews } from '@prisma-next/migration-tools/migration';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { DdlColumn, DdlTableConstraint } from '@prisma-next/sql-relational-core/ast';\nimport { errorPostgresMigrationStackMissing } from '../errors';\nimport { PostgresContractView } from '../postgres-contract-view';\nimport {\n AddCheckConstraintCall,\n AddColumnCall,\n AddForeignKeyCall,\n AddPrimaryKeyCall,\n AddUniqueCall,\n AlterColumnTypeCall,\n type AlterColumnTypeOptions,\n CreateIndexCall,\n CreateNativeEnumTypeCall,\n CreateSchemaCall,\n CreateTableCall,\n DropCheckConstraintCall,\n DropColumnCall,\n DropConstraintCall,\n DropDefaultCall,\n DropIndexCall,\n DropNativeEnumTypeCall,\n DropNotNullCall,\n DropTableCall,\n SetDefaultCall,\n SetNotNullCall,\n} from './op-factory-call';\nimport { type DataTransformOptions, dataTransform } from './operations/data-transform';\nimport { installExtension } from './operations/dependencies';\nimport type { CreateIndexExtras } from './operations/indexes';\nimport type { ForeignKeySpec } from './operations/shared';\nimport type { PostgresPlanTargetDetails } from './planner-target-details';\n\n/**\n * Target-owned base class for Postgres migrations.\n *\n * Fixes the `SqlMigration` generic to `PostgresPlanTargetDetails` and the\n * abstract `targetId` to the Postgres target-id string literal, so both\n * user-authored migrations and renderer-generated scaffolds (the output of\n * `renderCallsToTypeScript`) can extend `PostgresMigration` directly without\n * redeclaring target-local identity.\n *\n * Mirrors `MongoMigration` in `@prisma-next/family-mongo`: the renderer\n * emits `extends Migration` against a facade re-export of this class\n * from `@prisma-next/postgres/migration`, keeping the authoring surface\n * target-scoped rather than family-scoped.\n *\n * The constructor materializes a single Postgres `SqlControlAdapter` from\n * `stack.adapter.create(stack)` and stores it; the protected `dataTransform`\n * instance method forwards to the free `dataTransform` factory with that\n * stored adapter, so user migrations can write `this.dataTransform(...)`\n * without threading the adapter through every call.\n *\n * Every method requires an explicit `schema`. Postgres migrations name their\n * schema deliberately — there is no default and no `search_path`-relative\n * option. A migration that left the schema unspecified would resolve against\n * whatever `search_path` the connection happened to carry, and that ambiguity\n * is an antipattern in a migration. (The unbound/unspecified namespace concept\n * remains for SQLite, which has no schemas, and for Mongo's connection `db`.)\n */\nexport abstract class PostgresMigration<\n Start extends Contract<SqlStorage> = Contract<SqlStorage>,\n End extends Contract<SqlStorage> = Contract<SqlStorage>,\n> extends SqlMigration<PostgresPlanTargetDetails, 'postgres', Start, End> {\n readonly targetId = 'postgres' as const;\n\n /**\n * Materialized Postgres control adapter, created once per migration\n * instance from the injected stack. `undefined` only when the migration\n * was instantiated without a stack (test fixtures); `controlAdapterFor`\n * throws a PN-MIG-2007 in that case to surface the misuse.\n */\n protected readonly controlAdapter: SqlControlAdapter<'postgres'> | undefined;\n\n #endView = new MigrationContractViews<PostgresContractView<End>>(\n this,\n 'PostgresMigration',\n (json) => PostgresContractView.fromJson<End>(json),\n );\n #startView = new MigrationContractViews<PostgresContractView<Start>>(\n this,\n 'PostgresMigration',\n (json) => PostgresContractView.fromJson<Start>(json),\n );\n\n constructor(stack?: ControlStack<'sql', 'postgres'>) {\n super(stack);\n // The descriptor `create()` is typed as the wider `ControlAdapterInstance`;\n // the Postgres descriptor concretely returns a `SqlControlAdapter<'postgres'>`,\n // so the cast holds for any Postgres-target stack assembled at runtime.\n this.controlAdapter = stack?.adapter\n ? (stack.adapter.create(stack) as SqlControlAdapter<'postgres'>)\n : undefined;\n }\n\n /**\n * Returns the materialized control adapter, or throws a PN-MIG-2007 naming\n * `operation` when the migration was constructed without a `ControlStack`.\n * Single home for the null-check that every DDL/DML method shares.\n */\n private controlAdapterFor(operation: string): SqlControlAdapter<'postgres'> {\n if (!this.controlAdapter) {\n throw errorPostgresMigrationStackMissing(operation);\n }\n return this.controlAdapter;\n }\n\n /**\n * The typed, schema-qualified Postgres view over this migration's end-state\n * contract — `this.endContract.namespace.<schema>.table.<name>`, etc. Throws\n * if no `endContractJson` was provided.\n */\n get endContract(): PostgresContractView<End> {\n return this.#endView.endContract;\n }\n\n /**\n * The typed Postgres view over this migration's start-state contract, or\n * `null` for a baseline migration (no `startContractJson`).\n */\n get startContract(): PostgresContractView<Start> | null {\n return this.#startView.startContract;\n }\n\n /**\n * Instance-method wrapper around the free `dataTransform` factory that\n * supplies the stored control adapter. Authors call this from inside\n * `get operations()`; the adapter argument is hidden from the call site.\n */\n protected dataTransform<TContract extends Contract<SqlStorage>>(\n contract: TContract,\n name: string,\n options: DataTransformOptions,\n ): Promise<SqlMigrationPlanOperation<PostgresPlanTargetDetails>> {\n return dataTransform(contract, name, options, this.controlAdapterFor('dataTransform'));\n }\n\n /**\n * Emit a `CREATE TABLE` migration operation. Builds a typed DDL node from\n * the supplied options and lowers it through the stored control adapter.\n * Throws if no adapter is present (i.e. migration instantiated without a stack).\n */\n protected createTable(options: {\n readonly schema: string;\n readonly table: string;\n readonly ifNotExists?: boolean;\n readonly columns: readonly DdlColumn[];\n readonly constraints?: readonly DdlTableConstraint[];\n }): Promise<SqlMigrationPlanOperation<PostgresPlanTargetDetails>> {\n return new CreateTableCall(\n options.schema,\n options.table,\n options.columns,\n options.constraints,\n ).toOp(this.controlAdapterFor('createTable'));\n }\n\n /**\n * Emit a `CREATE SCHEMA` migration operation. Builds a typed DDL node from\n * the supplied options and lowers it through the stored control adapter.\n * Throws if no adapter is present (i.e. migration instantiated without a stack).\n */\n protected createSchema(options: {\n readonly schema: string;\n readonly ifNotExists?: boolean;\n }): Promise<SqlMigrationPlanOperation<PostgresPlanTargetDetails>> {\n return new CreateSchemaCall(options.schema).toOp(this.controlAdapterFor('createSchema'));\n }\n\n /**\n * Emit a `CREATE TYPE ... AS ENUM (...)` migration operation for a managed\n * native enum. Builds a typed DDL node and lowers it through the stored\n * control adapter (members render in declaration order). Throws if no adapter\n * is present.\n */\n protected createNativeEnumType(options: {\n readonly schema: string;\n readonly typeName: string;\n readonly members: readonly string[];\n }): Promise<SqlMigrationPlanOperation<PostgresPlanTargetDetails>> {\n return new CreateNativeEnumTypeCall(options.schema, options.typeName, options.members).toOp(\n this.controlAdapterFor('createNativeEnumType'),\n );\n }\n\n /**\n * Emit a `DROP TYPE` migration operation for a managed native enum, lowered\n * through the stored control adapter. Throws if no adapter is present.\n */\n protected dropNativeEnumType(options: {\n readonly schema: string;\n readonly typeName: string;\n }): Promise<SqlMigrationPlanOperation<PostgresPlanTargetDetails>> {\n return new DropNativeEnumTypeCall(options.schema, options.typeName).toOp(\n this.controlAdapterFor('dropNativeEnumType'),\n );\n }\n\n protected addColumn(options: {\n readonly schema: string;\n readonly table: string;\n readonly column: DdlColumn;\n }): Promise<SqlMigrationPlanOperation<PostgresPlanTargetDetails>> {\n return new AddColumnCall(options.schema, options.table, options.column).toOp(\n this.controlAdapterFor('addColumn'),\n );\n }\n\n protected addPrimaryKey(options: {\n readonly schema: string;\n readonly table: string;\n readonly constraint: string;\n readonly columns: readonly string[];\n }): Promise<SqlMigrationPlanOperation<PostgresPlanTargetDetails>> {\n return new AddPrimaryKeyCall(\n options.schema,\n options.table,\n options.constraint,\n options.columns,\n ).toOp(this.controlAdapterFor('addPrimaryKey'));\n }\n\n protected addUnique(options: {\n readonly schema: string;\n readonly table: string;\n readonly constraint: string;\n readonly columns: readonly string[];\n }): Promise<SqlMigrationPlanOperation<PostgresPlanTargetDetails>> {\n return new AddUniqueCall(\n options.schema,\n options.table,\n options.constraint,\n options.columns,\n ).toOp(this.controlAdapterFor('addUnique'));\n }\n\n protected addForeignKey(options: {\n readonly schema: string;\n readonly table: string;\n readonly foreignKey: ForeignKeySpec;\n }): Promise<SqlMigrationPlanOperation<PostgresPlanTargetDetails>> {\n return new AddForeignKeyCall(options.schema, options.table, options.foreignKey).toOp(\n this.controlAdapterFor('addForeignKey'),\n );\n }\n\n protected addCheckConstraint(options: {\n readonly schema: string;\n readonly table: string;\n readonly constraint: string;\n readonly column: string;\n readonly values: readonly string[];\n }): Promise<SqlMigrationPlanOperation<PostgresPlanTargetDetails>> {\n return new AddCheckConstraintCall(\n options.schema,\n options.table,\n options.constraint,\n options.column,\n options.values,\n ).toOp(this.controlAdapterFor('addCheckConstraint'));\n }\n\n protected dropCheckConstraint(options: {\n readonly schema: string;\n readonly table: string;\n readonly constraint: string;\n }): Promise<SqlMigrationPlanOperation<PostgresPlanTargetDetails>> {\n return new DropCheckConstraintCall(options.schema, options.table, options.constraint).toOp(\n this.controlAdapterFor('dropCheckConstraint'),\n );\n }\n\n protected dropConstraint(options: {\n readonly schema: string;\n readonly table: string;\n readonly constraint: string;\n readonly kind?: 'foreignKey' | 'unique' | 'primaryKey';\n }): Promise<SqlMigrationPlanOperation<PostgresPlanTargetDetails>> {\n return new DropConstraintCall(\n options.schema,\n options.table,\n options.constraint,\n options.kind ?? 'unique',\n ).toOp(this.controlAdapterFor('dropConstraint'));\n }\n\n protected dropTable(options: {\n readonly schema: string;\n readonly table: string;\n }): Promise<SqlMigrationPlanOperation<PostgresPlanTargetDetails>> {\n return new DropTableCall(options.schema, options.table).toOp(\n this.controlAdapterFor('dropTable'),\n );\n }\n\n protected dropColumn(options: {\n readonly schema: string;\n readonly table: string;\n readonly column: string;\n }): Promise<SqlMigrationPlanOperation<PostgresPlanTargetDetails>> {\n return new DropColumnCall(options.schema, options.table, options.column).toOp(\n this.controlAdapterFor('dropColumn'),\n );\n }\n\n protected alterColumnType(options: {\n readonly schema: string;\n readonly table: string;\n readonly column: string;\n readonly options: AlterColumnTypeOptions;\n }): Promise<SqlMigrationPlanOperation<PostgresPlanTargetDetails>> {\n return new AlterColumnTypeCall(\n options.schema,\n options.table,\n options.column,\n options.options,\n ).toOp(this.controlAdapterFor('alterColumnType'));\n }\n\n protected setNotNull(options: {\n readonly schema: string;\n readonly table: string;\n readonly column: string;\n }): Promise<SqlMigrationPlanOperation<PostgresPlanTargetDetails>> {\n return new SetNotNullCall(options.schema, options.table, options.column).toOp(\n this.controlAdapterFor('setNotNull'),\n );\n }\n\n protected dropNotNull(options: {\n readonly schema: string;\n readonly table: string;\n readonly column: string;\n }): Promise<SqlMigrationPlanOperation<PostgresPlanTargetDetails>> {\n return new DropNotNullCall(options.schema, options.table, options.column).toOp(\n this.controlAdapterFor('dropNotNull'),\n );\n }\n\n protected setDefault(options: {\n readonly schema: string;\n readonly table: string;\n readonly column: string;\n readonly defaultSql: string;\n readonly operationClass?: 'additive' | 'widening';\n }): Promise<SqlMigrationPlanOperation<PostgresPlanTargetDetails>> {\n return new SetDefaultCall(\n options.schema,\n options.table,\n options.column,\n options.defaultSql,\n options.operationClass,\n ).toOp(this.controlAdapterFor('setDefault'));\n }\n\n protected dropDefault(options: {\n readonly schema: string;\n readonly table: string;\n readonly column: string;\n }): Promise<SqlMigrationPlanOperation<PostgresPlanTargetDetails>> {\n return new DropDefaultCall(options.schema, options.table, options.column).toOp(\n this.controlAdapterFor('dropDefault'),\n );\n }\n\n protected createIndex(options: {\n readonly schema: string;\n readonly table: string;\n readonly index: string;\n readonly columns: readonly string[];\n readonly extras?: CreateIndexExtras;\n }): Promise<SqlMigrationPlanOperation<PostgresPlanTargetDetails>> {\n return new CreateIndexCall(\n options.schema,\n options.table,\n options.index,\n options.columns,\n options.extras,\n ).toOp(this.controlAdapterFor('createIndex'));\n }\n\n protected dropIndex(options: {\n readonly schema: string;\n readonly table: string;\n readonly index: string;\n }): Promise<SqlMigrationPlanOperation<PostgresPlanTargetDetails>> {\n return new DropIndexCall(options.schema, options.table, options.index).toOp(\n this.controlAdapterFor('dropIndex'),\n );\n }\n\n protected installExtension(options: {\n readonly extensionName: string;\n readonly invariantId: string;\n readonly id: string;\n readonly label?: string;\n }): Promise<SqlMigrationPlanOperation<PostgresPlanTargetDetails>> {\n return installExtension(options, this.controlAdapterFor('installExtension'));\n }\n}\n"],"mappings":"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"}
|