orchid-orm 1.64.10 → 1.65.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"node-postgres.js","sources":["../../src/migrations/generate/generators/generators.utils.ts","../../src/migrations/generate/generators/schemas.generator.ts","../../src/migrations/generate/generators/extensions.generator.ts","../../src/migrations/generate/generators/columns.generator.ts","../../src/migrations/generate/generators/domains.generator.ts","../../src/migrations/generate/generators/enums.generator.ts","../../src/migrations/generate/generators/primaryKey.generator.ts","../../src/migrations/generate/generators/indexesAndExcludes.generator.ts","../../src/migrations/generate/generators/foreignKeys.generator.ts","../../src/migrations/generate/generators/checks.generator.ts","../../src/migrations/generate/generators/tables.generator.ts","../../src/migrations/generate/generators/roles.generator.ts","../../src/migrations/generate/generators/default-privilege.generator.ts","../../src/migrations/generate/composeMigration.ts","../../src/migrations/generate/verify-migration.ts","../../src/migrations/generate/reportGeneratedMigration.ts","../../src/migrations/generate/generate.ts","../../src/migrations/pull/appCodeGenerators/tables.appCodeGenerator.ts","../../src/migrations/pull/appCodeGenerators/dbFile.appCodeGenerator.ts","../../src/migrations/pull/pull.ts","../../src/migrations/patchRakeDb.ts"],"sourcesContent":["import { RakeDbAst, promptSelect } from 'rake-db';\nimport { RawSqlBase, QueryResult, AdapterBase, colors } from 'pqb';\nimport { AbortSignal } from '../generate';\n\nexport interface CompareExpression {\n compare: {\n inDb: string;\n inCode: (string | RawSqlBase)[];\n }[];\n\n handle(i?: number): void;\n}\n\nexport interface TableExpression extends CompareExpression {\n source: string;\n}\n\nexport const compareSqlExpressions = async (\n tableExpressions: TableExpression[],\n adapter: AdapterBase,\n) => {\n if (!tableExpressions.length) return;\n\n let id = 1;\n for (const { source, compare, handle } of tableExpressions) {\n const viewName = `orchidTmpView${id++}`;\n const values: unknown[] = [];\n\n // It is important to run `CREATE TEMPORARY VIEW` and `DROP VIEW` on the same db connection,\n // that's why SQLs are combined into a single query.\n const combinedQueries = [\n `CREATE TEMPORARY VIEW ${viewName} AS (SELECT ${compare\n .map(\n ({ inDb, inCode }, i): string =>\n `${inDb} AS \"*inDb-${i}*\", ${inCode\n .map(\n (s, j) =>\n `(${\n typeof s === 'string' ? s : s.toSQL({ values })\n }) \"*inCode-${i}-${j}*\"`,\n )\n .join(', ')}`,\n )\n .join(', ')} FROM ${source})`,\n `SELECT pg_get_viewdef('${viewName}') v`,\n `DROP VIEW ${viewName}`,\n ].join('; ');\n\n const result = await adapter.query(combinedQueries, values, viewName).then(\n (res) => (res as unknown as QueryResult[])[1],\n async (err) => {\n // ignore the \"type ... does not exist\" because the type may be added in the same migration,\n // but throw on other errors\n if (err.code !== '42704') {\n throw err;\n }\n },\n );\n\n if (!result) {\n handle();\n return;\n }\n\n const match = compareSqlExpressionResult(\n result.rows[0].v,\n compare[0].inCode,\n );\n handle(match);\n }\n};\n\nexport const compareSqlExpressionResult = (\n resultSql: string,\n inCode: unknown[],\n) => {\n let pos = 7;\n const rgx = /\\s+AS\\s+\"\\*(inDb-\\d+|inCode-\\d+-\\d+)\\*\",?/g;\n let match;\n let inDb = '';\n let codeI = 0;\n const matches = inCode.map(() => true);\n while ((match = rgx.exec(resultSql))) {\n const sql = resultSql.slice(pos, rgx.lastIndex - match[0].length).trim();\n const arr = match[1].split('-');\n if (arr.length === 2) {\n inDb = sql;\n codeI = 0;\n } else {\n if (\n inDb !== sql &&\n // Comparing `(sql) = sql` and `sql = (sql)` below.\n // Could not reproduce this case in integration tests, but it was reported in #494.\n !(\n inDb.startsWith('(') &&\n inDb.endsWith(')') &&\n inDb.slice(1, -1) === sql\n ) &&\n !(sql.startsWith('(') && sql.endsWith(')') && sql.slice(1, -1) === inDb)\n ) {\n matches[codeI] = false;\n }\n codeI++;\n }\n pos = rgx.lastIndex;\n }\n\n const firstMatching = matches.indexOf(true);\n return firstMatching === -1 ? undefined : firstMatching;\n};\n\nexport const promptCreateOrRename = (\n kind: string,\n name: string,\n drop: string[],\n verifying: boolean | undefined,\n): Promise<number> => {\n if (verifying) throw new AbortSignal();\n\n let hintPos = name.length + 4;\n for (const from of drop) {\n const value = from.length + 8 + name.length;\n if (value > hintPos) hintPos = value;\n }\n\n let max = 0;\n const add = name.length + 3;\n for (const name of drop) {\n if (name.length + add > max) {\n max = name.length + add;\n }\n }\n\n const renameMessage = `rename ${kind}`;\n\n return promptSelect({\n message: `Create or rename ${colors.blueBold(\n name,\n )} ${kind} from another ${kind}?`,\n options: [\n `${colors.greenBold('+')} ${name} ${colors.pale(\n `create ${kind}`.padStart(\n hintPos + renameMessage.length - name.length - 4,\n ' ',\n ),\n )}`,\n ...drop.map(\n (d) =>\n `${colors.yellowBold('~')} ${d} ${colors.yellowBold(\n '=>',\n )} ${name} ${colors.pale(\n renameMessage.padStart(\n hintPos + renameMessage.length - d.length - name.length - 8,\n ' ',\n ),\n )}`,\n ),\n ],\n });\n};\n\nexport const checkForColumnAddOrDrop = (\n shape: RakeDbAst.ChangeTableShape,\n key: string,\n) => {\n const item = shape[key];\n if (item) {\n return (\n item &&\n (Array.isArray(item) || item.type === 'add' || item.type === 'drop')\n );\n }\n\n for (const k in shape) {\n const item = shape[k];\n if (\n Array.isArray(item)\n ? item.some(\n (item) =>\n (item.type === 'add' || item.type === 'drop') &&\n item.item.data.name === key,\n )\n : (item.type === 'add' || item.type === 'drop') &&\n item.item.data.name === key\n ) {\n return true;\n }\n }\n\n return false;\n};\n","import { RakeDbAst, IntrospectedStructure } from 'rake-db';\nimport { promptCreateOrRename } from './generators.utils';\nimport { ComposeMigrationParams } from '../composeMigration';\n\nexport const processSchemas = async (\n ast: RakeDbAst[],\n dbStructure: IntrospectedStructure,\n {\n codeItems: { schemas },\n verifying,\n internal: { generatorIgnore },\n currentSchema,\n }: ComposeMigrationParams,\n): Promise<void> => {\n const createSchemas: string[] = [];\n const dropSchemas: string[] = [];\n\n for (const schema of schemas) {\n if (!dbStructure.schemas.includes(schema)) {\n createSchemas.push(schema);\n }\n }\n\n for (const schema of dbStructure.schemas) {\n if (\n !schemas.has(schema) &&\n schema !== 'public' &&\n schema !== currentSchema &&\n !generatorIgnore?.schemas?.includes(schema)\n ) {\n dropSchemas.push(schema);\n }\n }\n\n for (const schema of createSchemas) {\n if (dropSchemas.length) {\n const i = await promptCreateOrRename(\n 'schema',\n schema,\n dropSchemas,\n verifying,\n );\n if (i) {\n const from = dropSchemas[i - 1];\n dropSchemas.splice(i - 1, 1);\n\n renameSchemaInStructures(dbStructure.tables, from, schema);\n renameSchemaInStructures(dbStructure.views, from, schema);\n renameSchemaInStructures(dbStructure.indexes, from, schema);\n renameSchemaInStructures(dbStructure.excludes, from, schema);\n renameSchemaInStructures(dbStructure.constraints, from, schema);\n renameSchemaInStructures(dbStructure.triggers, from, schema);\n renameSchemaInStructures(dbStructure.enums, from, schema);\n renameSchemaInStructures(dbStructure.domains, from, schema);\n renameSchemaInStructures(dbStructure.collations, from, schema);\n\n for (const table of dbStructure.tables) {\n for (const column of table.columns) {\n if (column.typeSchema === from) {\n column.typeSchema = schema;\n }\n }\n }\n\n ast.push({\n type: 'renameSchema',\n from,\n to: schema,\n });\n continue;\n }\n }\n\n ast.push({\n type: 'schema',\n action: 'create',\n name: schema,\n });\n }\n\n for (const schema of dropSchemas) {\n ast.push({\n type: 'schema',\n action: 'drop',\n name: schema,\n });\n }\n};\n\nconst renameSchemaInStructures = (\n items: { schemaName: string }[],\n from: string,\n to: string,\n) => {\n for (const item of items) {\n if (item.schemaName === from) {\n item.schemaName = to;\n }\n }\n};\n","import {\n RakeDbAst,\n IntrospectedStructure,\n getSchemaAndTableFromName,\n} from 'rake-db';\nimport { ComposeMigrationParams } from '../composeMigration';\n\ninterface Extension {\n schema?: string;\n name: string;\n version?: string;\n}\n\nexport const processExtensions = (\n ast: RakeDbAst[],\n dbStructure: IntrospectedStructure,\n {\n currentSchema,\n internal: { extensions, generatorIgnore },\n }: ComposeMigrationParams,\n) => {\n const codeExtensions = extensions?.map((ext): Extension => {\n const [schema, name] = getSchemaAndTableFromName(currentSchema, ext.name);\n return { schema, name, version: ext.version };\n });\n\n for (const dbExt of dbStructure.extensions) {\n if (\n generatorIgnore?.schemas?.includes(dbExt.schemaName) ||\n generatorIgnore?.extensions?.includes(dbExt.name)\n ) {\n continue;\n }\n\n if (codeExtensions) {\n let found = false;\n for (let i = 0; i < codeExtensions.length; i++) {\n const codeExt = codeExtensions[i];\n if (\n dbExt.name === codeExt.name &&\n dbExt.schemaName === (codeExt.schema ?? currentSchema) &&\n (!codeExt.version || codeExt.version === dbExt.version)\n ) {\n found = true;\n codeExtensions.splice(i, 1);\n break;\n }\n }\n\n if (found) continue;\n }\n\n ast.push({\n type: 'extension',\n action: 'drop',\n schema: dbExt.schemaName === currentSchema ? undefined : dbExt.schemaName,\n name: dbExt.name,\n version: dbExt.version,\n });\n }\n\n if (codeExtensions?.length) {\n ast.push(\n ...codeExtensions.map((ext) => ({\n type: 'extension' as const,\n action: 'create' as const,\n ...ext,\n })),\n );\n }\n};\n","import {\n RakeDbAst,\n dbColumnToAst,\n getDbTableColumnsChecks,\n instantiateDbColumn,\n StructureToAstCtx,\n DbStructure,\n IntrospectedStructure,\n encodeColumnDefault,\n concatSchemaAndName,\n getSchemaAndTableFromName,\n promptSelect,\n RakeDbConfig,\n} from 'rake-db';\nimport {\n ArrayColumn,\n Column,\n DbStructureDomainsMap,\n EnumColumn,\n getColumnBaseType,\n deepCompare,\n RecordUnknown,\n toSnakeCase,\n AdapterBase,\n colors,\n} from 'pqb';\nimport { promptCreateOrRename } from './generators.utils';\nimport { ChangeTableData, CompareSql } from './tables.generator';\nimport { AbortSignal } from '../generate';\n\nexport interface TypeCastsCache {\n value?: Map<string, Set<string>>;\n}\n\ntype ColumnsToChange = Map<\n string,\n { key: string; dbName: string; column: Column }\n>;\n\nexport const processColumns = async (\n adapter: AdapterBase,\n config: RakeDbConfig,\n structureToAstCtx: StructureToAstCtx,\n dbStructure: IntrospectedStructure,\n domainsMap: DbStructureDomainsMap,\n changeTableData: ChangeTableData,\n ast: RakeDbAst[],\n currentSchema: string,\n compareSql: CompareSql,\n typeCastsCache: TypeCastsCache,\n verifying: boolean | undefined,\n) => {\n const { dbTable } = changeTableData;\n const dbColumns = Object.fromEntries(\n dbTable.columns.map((column) => [column.name, column]),\n );\n\n const { columnsToAdd, columnsToDrop, columnsToChange } = groupColumns(\n structureToAstCtx,\n dbStructure,\n domainsMap,\n dbColumns,\n changeTableData,\n );\n\n await addOrRenameColumns(\n config,\n dbStructure,\n changeTableData,\n columnsToAdd,\n columnsToDrop,\n columnsToChange,\n verifying,\n );\n\n await changeColumns(\n adapter,\n config,\n structureToAstCtx,\n dbStructure,\n domainsMap,\n ast,\n currentSchema,\n dbColumns,\n columnsToChange,\n compareSql,\n changeTableData,\n typeCastsCache,\n verifying,\n );\n\n dropColumns(changeTableData, columnsToDrop);\n};\n\ntype KeyAndColumn = { key: string; column: Column };\n\nconst groupColumns = (\n structureToAstCtx: StructureToAstCtx,\n dbStructure: IntrospectedStructure,\n domainsMap: DbStructureDomainsMap,\n dbColumns: { [K: string]: DbStructure.Column },\n changeTableData: ChangeTableData,\n): {\n columnsToAdd: KeyAndColumn[];\n columnsToDrop: KeyAndColumn[];\n columnsToChange: ColumnsToChange;\n} => {\n const columnsToAdd: { key: string; column: Column }[] = [];\n const columnsToDrop: { key: string; column: Column }[] = [];\n const columnsToChange: ColumnsToChange = new Map();\n const columnsToChangeByDbName = new Map<string, true>();\n\n const { codeTable, dbTable, dbTableData } = changeTableData;\n const checks = getDbTableColumnsChecks(changeTableData.dbTableData);\n\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as Column;\n // skip virtual columns\n if (!column.dataType) continue;\n\n const name = column.data.name ?? key;\n if (dbColumns[name]) {\n columnsToChange.set(key, { key, dbName: name, column });\n columnsToChangeByDbName.set(name, true);\n } else {\n columnsToAdd.push({ key, column });\n }\n }\n\n for (const name in dbColumns) {\n if (columnsToChangeByDbName.has(name)) continue;\n\n const [key, column] = dbColumnToAst(\n structureToAstCtx,\n dbStructure,\n domainsMap,\n dbTable.name,\n dbColumns[name],\n dbTable,\n dbTableData,\n checks,\n );\n\n columnsToDrop.push({ key, column });\n }\n\n return {\n columnsToAdd,\n columnsToDrop,\n columnsToChange,\n };\n};\n\nconst addOrRenameColumns = async (\n config: RakeDbConfig,\n dbStructure: IntrospectedStructure,\n {\n dbTableData,\n schema,\n changeTableAst: { name: tableName, shape },\n }: ChangeTableData,\n columnsToAdd: KeyAndColumn[],\n columnsToDrop: KeyAndColumn[],\n columnsToChange: ColumnsToChange,\n verifying: boolean | undefined,\n) => {\n for (const { key, column } of columnsToAdd) {\n if (columnsToDrop.length) {\n const codeName = column.data.name ?? key;\n const i = await promptCreateOrRename(\n 'column',\n codeName,\n columnsToDrop.map((x) => x.key),\n verifying,\n );\n if (i) {\n const drop = columnsToDrop[i - 1];\n columnsToDrop.splice(i - 1, 1);\n\n const from = drop.column.data.name ?? drop.key;\n columnsToChange.set(from, {\n key,\n dbName: from,\n column: column.name(codeName),\n });\n\n const to = config.snakeCase ? toSnakeCase(key) : key;\n\n if (dbTableData.primaryKey) {\n renameColumn(dbTableData.primaryKey.columns, from, to);\n }\n\n for (const index of dbTableData.indexes) {\n for (const column of index.columns) {\n if ('column' in column && column.column === from) {\n column.column = to;\n }\n }\n }\n\n for (const exclude of dbTableData.excludes) {\n for (const column of exclude.columns) {\n if ('column' in column && column.column === from) {\n column.column = to;\n }\n }\n }\n\n for (const c of dbTableData.constraints) {\n if (c.check?.columns) {\n renameColumn(c.check.columns, from, to);\n }\n if (c.references) {\n renameColumn(c.references.columns, from, to);\n }\n }\n\n for (const c of dbStructure.constraints) {\n if (\n c.references &&\n c.references.foreignSchema === schema &&\n c.references.foreignTable === tableName\n ) {\n renameColumn(c.references.foreignColumns, from, to);\n }\n }\n\n continue;\n }\n }\n\n shape[key] = {\n type: 'add',\n item: column,\n };\n }\n};\n\nconst dropColumns = (\n { changeTableAst: { shape } }: ChangeTableData,\n columnsToDrop: KeyAndColumn[],\n) => {\n for (const { key, column } of columnsToDrop) {\n shape[key] = {\n type: 'drop',\n item: column,\n };\n }\n};\n\nconst changeColumns = async (\n adapter: AdapterBase,\n config: RakeDbConfig,\n structureToAstCtx: StructureToAstCtx,\n dbStructure: IntrospectedStructure,\n domainsMap: DbStructureDomainsMap,\n ast: RakeDbAst[],\n currentSchema: string,\n dbColumns: { [K: string]: DbStructure.Column },\n columnsToChange: ColumnsToChange,\n compareSql: CompareSql,\n changeTableData: ChangeTableData,\n typeCastsCache: TypeCastsCache,\n verifying: boolean | undefined,\n) => {\n for (const [\n key,\n { key: codeKey, dbName, column: codeColumn },\n ] of columnsToChange) {\n const dbColumnStructure = dbColumns[dbName];\n\n const dbColumn = instantiateDbColumn(\n structureToAstCtx,\n dbStructure,\n domainsMap,\n dbColumnStructure,\n );\n\n const action = await compareColumns(\n adapter,\n domainsMap,\n ast,\n currentSchema,\n compareSql,\n changeTableData,\n typeCastsCache,\n verifying,\n key,\n dbName,\n dbColumn,\n codeColumn,\n );\n\n if (action === 'change') {\n changeColumn(changeTableData, key, dbName, dbColumn, codeColumn);\n } else if (action === 'recreate') {\n changeTableData.changeTableAst.shape[key] = [\n {\n type: 'drop',\n item: dbColumn,\n },\n {\n type: 'add',\n item: codeColumn,\n },\n ];\n } else if (action !== 'recreate') {\n const to = codeColumn.data.name ?? codeKey;\n if (dbName !== to) {\n changeTableData.changeTableAst.shape[\n config.snakeCase\n ? dbName === toSnakeCase(codeKey)\n ? codeKey\n : dbName\n : dbName\n ] = {\n type: 'rename',\n name: config.snakeCase\n ? to === toSnakeCase(codeKey)\n ? codeKey\n : to\n : to,\n };\n }\n }\n }\n};\n\nconst compareColumns = async (\n adapter: AdapterBase,\n domainsMap: DbStructureDomainsMap,\n ast: RakeDbAst[],\n currentSchema: string,\n compareSql: CompareSql,\n changeTableData: ChangeTableData,\n typeCastsCache: TypeCastsCache,\n verifying: boolean | undefined,\n key: string,\n dbName: string,\n dbColumn: Column,\n codeColumn: Column,\n): Promise<'change' | 'recreate' | undefined> => {\n if (dbColumn instanceof ArrayColumn && codeColumn instanceof ArrayColumn) {\n dbColumn = dbColumn.data.item;\n codeColumn = codeColumn.data.item;\n }\n\n const dbType = getColumnDbType(dbColumn, currentSchema);\n const codeType = getColumnDbType(codeColumn, currentSchema);\n\n if (dbType !== codeType) {\n const typeCasts = await getTypeCasts(adapter, typeCastsCache);\n\n const dbBaseType = getColumnBaseType(dbColumn, domainsMap, dbType);\n const codeBaseType = getColumnBaseType(codeColumn, domainsMap, codeType);\n\n if (!typeCasts.get(dbBaseType)?.has(codeBaseType)) {\n if (\n !(dbColumn instanceof EnumColumn) ||\n !(codeColumn instanceof EnumColumn) ||\n !deepCompare(dbColumn.options, codeColumn.options)\n ) {\n if (verifying) throw new AbortSignal();\n\n const tableName = concatSchemaAndName(changeTableData.changeTableAst);\n const abort = await promptSelect({\n message: `Cannot cast type of ${tableName}'s column ${key} from ${dbType} to ${codeType}`,\n options: [\n `${colors.yellowBold(\n `-/+`,\n )} recreate the column, existing data will be ${colors.red(\n 'lost',\n )}`,\n `write migration manually`,\n ],\n });\n if (abort) {\n throw new AbortSignal();\n }\n\n dbColumn.data.name = codeColumn.data.name;\n return 'recreate';\n }\n }\n\n return 'change';\n }\n\n const dbData = dbColumn.data as unknown as RecordUnknown;\n const codeData = codeColumn.data as unknown as RecordUnknown;\n\n for (const key of ['isNullable', 'comment']) {\n if (dbData[key] !== codeData[key]) {\n return 'change';\n }\n }\n\n for (const key of [\n 'maxChars',\n 'collation',\n 'compression',\n 'numericPrecision',\n 'numericScale',\n 'dateTimePrecision',\n ]) {\n // Check if key in codeData so that default precision/scale values for such columns as integer aren't counted.\n // If column supports precision/scale, it should have it listed in the data, even if it's undefined.\n if (key in codeData && dbData[key] !== codeData[key]) {\n return 'change';\n }\n }\n\n if (dbColumn.data.isOfCustomType) {\n const { typmod } = dbColumn.data;\n if (typmod !== undefined && typmod !== -1) {\n const i = codeColumn.dataType.indexOf('(');\n if (i === -1 || codeColumn.dataType.slice(i + 1, -1) !== `${typmod}`) {\n return 'change';\n }\n }\n }\n\n if (\n !deepCompare(\n dbData.identity,\n codeData.identity\n ? {\n always: false,\n start: 1,\n increment: 1,\n cache: 1,\n cycle: false,\n ...(codeData.identity ?? {}),\n }\n : undefined,\n )\n ) {\n return 'change';\n }\n\n if (dbData.default !== undefined && codeData.default !== undefined) {\n const valuesBeforeLen = compareSql.values.length;\n const dbDefault = encodeColumnDefault(\n dbData.default,\n compareSql.values,\n dbColumn,\n ) as string;\n const dbValues = compareSql.values.slice(valuesBeforeLen);\n\n const codeDefault = encodeColumnDefault(\n codeData.default,\n compareSql.values,\n codeColumn,\n );\n const codeValues = compareSql.values.slice(valuesBeforeLen);\n\n if (\n dbValues.length !== codeValues.length ||\n (dbValues.length &&\n JSON.stringify(dbValues) !== JSON.stringify(codeValues))\n ) {\n compareSql.values.length = valuesBeforeLen;\n return 'change';\n } else if (dbDefault !== codeDefault && dbDefault !== `(${codeDefault})`) {\n const change = () => {\n changeColumn(changeTableData, key, dbName, dbColumn, codeColumn);\n if (!changeTableData.pushedAst) {\n changeTableData.pushedAst = true;\n ast.push(changeTableData.changeTableAst);\n }\n };\n\n compareSql.expressions.push({\n inDb: dbDefault,\n inCode: codeDefault,\n change,\n });\n }\n }\n\n return;\n};\n\nconst getTypeCasts = async (\n adapter: AdapterBase,\n typeCastsCache: TypeCastsCache,\n) => {\n let typeCasts = typeCastsCache.value;\n if (!typeCasts) {\n const { rows } = await adapter.arrays(`SELECT s.typname, t.typname\nFROM pg_cast\nJOIN pg_type AS s ON s.oid = castsource\nJOIN pg_type AS t ON t.oid = casttarget`);\n\n const directTypeCasts = new Map<string, Set<string>>();\n for (const [source, target] of rows) {\n const set = directTypeCasts.get(source);\n if (set) {\n set.add(target);\n } else {\n directTypeCasts.set(source, new Set([target]));\n }\n }\n\n typeCasts = new Map<string, Set<string>>();\n for (const [type, directSet] of directTypeCasts.entries()) {\n const set = new Set<string>(directSet);\n typeCasts.set(type, set);\n\n for (const subtype of directSet) {\n const subset = directTypeCasts.get(subtype);\n if (subset) {\n for (const type of subset) {\n set.add(type);\n }\n }\n }\n }\n\n typeCastsCache.value = typeCasts;\n }\n\n return typeCasts;\n};\n\nconst changeColumn = (\n changeTableData: ChangeTableData,\n key: string,\n dbName: string,\n dbColumn: Column,\n codeColumn: Column,\n) => {\n dbColumn.data.as = codeColumn.data.as = undefined;\n\n const simpleCodeColumn = Object.create(codeColumn);\n simpleCodeColumn.data = {\n ...codeColumn.data,\n primaryKey: undefined,\n indexes: undefined,\n excludes: undefined,\n foreignKeys: undefined,\n check: undefined,\n };\n\n changeTableData.changingColumns[dbName] = {\n from: dbColumn,\n to: simpleCodeColumn,\n };\n\n changeTableData.changeTableAst.shape[key] = {\n type: 'change',\n from: { column: dbColumn },\n to: { column: simpleCodeColumn },\n };\n};\n\nexport const getColumnDbType = (\n column: Column.Pick.DataAndDataType,\n currentSchema: string,\n) => {\n if (column instanceof EnumColumn) {\n const [schema = currentSchema, name] = getSchemaAndTableFromName(\n currentSchema,\n column.enumName,\n );\n return `${schema}.${name}`;\n } else if (column instanceof ArrayColumn) {\n const { item } = column.data;\n let type = item instanceof EnumColumn ? item.enumName : item.dataType;\n\n type = type.startsWith(currentSchema + '.')\n ? type.slice(currentSchema.length + 1)\n : type;\n\n return type + '[]'.repeat(column.data.arrayDims);\n } else if (column.data.isOfCustomType) {\n let type = column.dataType;\n\n const i = type.indexOf('(');\n if (i !== -1) {\n type = type.slice(0, i);\n }\n\n return type.includes('.') ? type : currentSchema + '.' + type;\n } else {\n return column.dataType;\n }\n};\n\nconst renameColumn = (columns: string[], from: string, to: string) => {\n for (let i = 0; i < columns.length; i++) {\n if (columns[i] === from) {\n columns[i] = to;\n }\n }\n};\n","import {\n ArrayColumn,\n Column,\n DbStructureDomainsMap,\n RawSql,\n AdapterBase,\n deepCompare,\n emptyArray,\n TemplateLiteralArgs,\n} from 'pqb';\nimport {\n RakeDbAst,\n getSchemaAndTableFromName,\n DbStructure,\n IntrospectedStructure,\n instantiateDbColumn,\n} from 'rake-db';\nimport { getColumnDbType } from './columns.generator';\nimport {\n CompareExpression,\n compareSqlExpressions,\n TableExpression,\n} from './generators.utils';\nimport { ComposeMigrationParams, PendingDbTypes } from '../composeMigration';\n\ninterface ComparableDomainCompare\n extends Omit<DbStructure.Domain, 'schemaName' | 'name'> {\n hasDefault: boolean;\n hasChecks: boolean;\n}\n\ninterface ComparableDomain {\n schemaName: string;\n name: string;\n column: Column;\n compare: ComparableDomainCompare;\n}\n\nexport interface CodeDomain {\n schemaName: string;\n name: string;\n column: Column;\n}\n\nexport const processDomains = async (\n ast: RakeDbAst[],\n adapter: AdapterBase,\n domainsMap: DbStructureDomainsMap,\n dbStructure: IntrospectedStructure,\n {\n codeItems: { domains },\n structureToAstCtx,\n currentSchema,\n internal: { generatorIgnore },\n }: ComposeMigrationParams,\n pendingDbTypes: PendingDbTypes,\n) => {\n const codeDomains: ComparableDomain[] = [];\n if (domains) {\n for (const { schemaName, name, column } of domains) {\n codeDomains.push(\n makeComparableDomain(currentSchema, schemaName, name, column),\n );\n }\n }\n\n const tableExpressions: TableExpression[] = [];\n const holdCodeDomains = new Set<ComparableDomain>();\n\n for (const domain of dbStructure.domains) {\n if (\n generatorIgnore?.schemas?.includes(domain.schemaName) ||\n generatorIgnore?.domains?.includes(domain.name)\n ) {\n continue;\n }\n\n const dbColumn = instantiateDbColumn(\n structureToAstCtx,\n dbStructure,\n domainsMap,\n {\n // not destructuring `domain` because need to ignore `numericPrecision`, `numericScale`, etc.,\n // that are loaded from db, but not defined in the code\n schemaName: domain.typeSchema,\n tableName: 'N/A',\n name: domain.name,\n typeSchema: domain.typeSchema,\n type: domain.type,\n arrayDims: domain.arrayDims,\n default: domain.default,\n isNullable: domain.isNullable,\n collate: domain.collate,\n maxChars: domain.maxChars,\n typmod: -1,\n },\n );\n\n if (domain.checks) {\n dbColumn.data.checks = domain.checks.map((check) => ({\n sql: new RawSql([[check]] as unknown as TemplateLiteralArgs),\n }));\n }\n\n const dbDomain = makeComparableDomain(\n currentSchema,\n domain.schemaName,\n domain.name,\n dbColumn,\n );\n\n const found = codeDomains.filter((codeDomain) =>\n deepCompare(dbDomain.compare, codeDomain.compare),\n );\n\n if ((domain.default || domain.checks?.length) && found.length) {\n for (const codeDomain of found) {\n holdCodeDomains.add(codeDomain);\n }\n\n const compare: CompareExpression['compare'] = [];\n pushCompareDefault(compare, domain, found);\n pushCompareChecks(compare, domain, found);\n\n const source = `(VALUES (NULL::${getColumnDbType(\n dbColumn,\n currentSchema,\n )})) t(value)`;\n\n tableExpressions.push({\n compare,\n source,\n handle(i) {\n const codeDomain = i === undefined ? undefined : found[i];\n if (!codeDomain) {\n ast.push(dropAst(dbDomain));\n } else {\n holdCodeDomains.delete(codeDomain);\n }\n },\n });\n } else if (found.length) {\n let i = codeDomains.findIndex(\n (codeDomain) =>\n codeDomain.name === dbDomain.name &&\n codeDomain.schemaName === dbDomain.schemaName,\n );\n if (i === -1) {\n i = 0;\n const first = found[0];\n ast.push({\n type: 'renameType',\n kind: 'DOMAIN',\n fromSchema: dbDomain.schemaName,\n from: dbDomain.name,\n toSchema: first.schemaName,\n to: first.name,\n });\n pendingDbTypes.add(first.schemaName, first.name);\n }\n\n codeDomains.splice(i, 1);\n } else {\n ast.push(dropAst(dbDomain));\n }\n }\n\n for (const codeDomain of codeDomains) {\n if (!holdCodeDomains.has(codeDomain)) {\n ast.push(createAst(codeDomain));\n pendingDbTypes.add(codeDomain.schemaName, codeDomain.name);\n }\n }\n\n if (tableExpressions.length) {\n await compareSqlExpressions(tableExpressions, adapter);\n\n if (holdCodeDomains.size) {\n for (const codeDomain of holdCodeDomains.keys()) {\n ast.push(createAst(codeDomain));\n pendingDbTypes.add(codeDomain.schemaName, codeDomain.name);\n }\n }\n }\n};\n\nconst makeComparableDomain = (\n currentSchema: string,\n schemaName: string,\n name: string,\n column: Column,\n): ComparableDomain => {\n let arrayDims = 0;\n const isNullable = column.data.isNullable ?? false;\n let inner = column;\n while (inner instanceof ArrayColumn) {\n inner = inner.data.item;\n arrayDims++;\n }\n const fullType = getColumnDbType(inner, currentSchema);\n const [typeSchema = 'pg_catalog', type] = getSchemaAndTableFromName(\n currentSchema,\n fullType,\n );\n\n return {\n schemaName,\n name,\n column,\n compare: {\n type,\n typeSchema,\n arrayDims,\n isNullable,\n maxChars: inner.data.maxChars,\n numericPrecision: inner.data.numericPrecision,\n numericScale: inner.data.numericScale,\n dateTimePrecision: inner.data.dateTimePrecision,\n collate: column.data.collate,\n hasDefault: column.data.default !== undefined,\n hasChecks: !!column.data.checks?.length,\n },\n };\n};\n\nconst pushCompareDefault = (\n compare: CompareExpression['compare'],\n domain: DbStructure.Domain,\n found: ComparableDomain[],\n) => {\n if (domain.default) {\n compare.push({\n inDb: domain.default,\n inCode: found.map((codeDomain) => {\n const value = codeDomain.column.data.default;\n if ('sql' in (value as Column.Data.Check)) {\n return (value as Column.Data.Check).sql;\n }\n return value as string;\n }),\n });\n }\n};\n\nconst pushCompareChecks = (\n compare: CompareExpression['compare'],\n domain: DbStructure.Domain,\n found: ComparableDomain[],\n) => {\n if (domain.checks?.length) {\n const inCode = found.flatMap(\n (codeDomain) =>\n codeDomain.column.data.checks?.map((check) =>\n typeof check === 'string' ? check : check.sql,\n ) || emptyArray,\n );\n\n compare.push(\n ...domain.checks.map((check) => ({\n inDb: check,\n inCode,\n })),\n );\n }\n};\n\nconst dropAst = (dbDomain: ComparableDomain): RakeDbAst.Domain => ({\n type: 'domain',\n action: 'drop',\n schema: dbDomain.schemaName,\n name: dbDomain.name,\n baseType: dbDomain.column,\n});\n\nconst createAst = (codeDomain: ComparableDomain): RakeDbAst.Domain => ({\n type: 'domain',\n action: 'create',\n schema: codeDomain.schemaName,\n name: codeDomain.name,\n baseType: codeDomain.column,\n});\n","import { DbStructure, IntrospectedStructure, RakeDbAst } from 'rake-db';\nimport { promptCreateOrRename } from './generators.utils';\nimport { ComposeMigrationParams, PendingDbTypes } from '../composeMigration';\n\nexport interface EnumItem {\n schema?: string;\n name: string;\n values: [string, ...string[]];\n}\n\nexport const processEnums = async (\n ast: RakeDbAst[],\n dbStructure: IntrospectedStructure,\n {\n codeItems: { enums },\n currentSchema,\n verifying,\n internal: { generatorIgnore },\n }: ComposeMigrationParams,\n pendingDbTypes: PendingDbTypes,\n): Promise<void> => {\n const createEnums: EnumItem[] = [];\n const dropEnums: DbStructure.Enum[] = [];\n\n for (const [, codeEnum] of enums) {\n const { schema = currentSchema, name } = codeEnum;\n const dbEnum = dbStructure.enums.find(\n (x) => x.schemaName === schema && x.name === name,\n );\n if (!dbEnum) {\n createEnums.push(codeEnum);\n }\n }\n\n for (const dbEnum of dbStructure.enums) {\n if (\n generatorIgnore?.schemas?.includes(dbEnum.schemaName) ||\n generatorIgnore?.enums?.includes(dbEnum.name)\n ) {\n continue;\n }\n\n const codeEnum = enums.get(`${dbEnum.schemaName}.${dbEnum.name}`);\n if (codeEnum) {\n changeEnum(ast, dbEnum, codeEnum, pendingDbTypes);\n continue;\n }\n\n const i = createEnums.findIndex((x) => x.name === dbEnum.name);\n if (i !== -1) {\n const codeEnum = createEnums[i];\n createEnums.splice(i, 1);\n const fromSchema = dbEnum.schemaName;\n const toSchema = codeEnum.schema ?? currentSchema;\n\n renameColumnsTypeSchema(dbStructure, fromSchema, toSchema);\n\n ast.push({\n type: 'renameType',\n kind: 'TYPE',\n fromSchema,\n from: dbEnum.name,\n toSchema,\n to: dbEnum.name,\n });\n pendingDbTypes.add(toSchema, dbEnum.name);\n\n changeEnum(ast, dbEnum, codeEnum, pendingDbTypes);\n\n continue;\n }\n\n dropEnums.push(dbEnum);\n }\n\n for (const codeEnum of createEnums) {\n if (dropEnums.length) {\n const i = await promptCreateOrRename(\n 'enum',\n codeEnum.name,\n dropEnums.map((x) => x.name),\n verifying,\n );\n if (i) {\n const dbEnum = dropEnums[i - 1];\n dropEnums.splice(i - 1, 1);\n\n const fromSchema = dbEnum.schemaName;\n const from = dbEnum.name;\n const toSchema = codeEnum.schema ?? currentSchema;\n const to = codeEnum.name;\n\n if (fromSchema !== toSchema) {\n renameColumnsTypeSchema(dbStructure, fromSchema, toSchema);\n }\n\n for (const table of dbStructure.tables) {\n for (const column of table.columns) {\n if (column.type === from) {\n column.type = to;\n }\n }\n }\n\n ast.push({\n type: 'renameType',\n kind: 'TYPE',\n fromSchema,\n from,\n toSchema,\n to,\n });\n pendingDbTypes.add(toSchema, to);\n\n changeEnum(ast, dbEnum, codeEnum, pendingDbTypes);\n\n continue;\n }\n }\n\n ast.push({\n type: 'enum',\n action: 'create',\n ...codeEnum,\n });\n pendingDbTypes.add(codeEnum.schema, codeEnum.name);\n }\n\n for (const dbEnum of dropEnums) {\n ast.push({\n type: 'enum',\n action: 'drop',\n schema: dbEnum.schemaName,\n name: dbEnum.name,\n values: dbEnum.values,\n });\n }\n};\n\nconst changeEnum = (\n ast: RakeDbAst[],\n dbEnum: DbStructure.Enum,\n codeEnum: EnumItem,\n pendingDbTypes: PendingDbTypes,\n) => {\n const { values: dbValues } = dbEnum;\n const { values: codeValues, schema, name } = codeEnum;\n\n if (dbValues.length < codeValues.length) {\n if (!dbValues.some((value) => !codeValues.includes(value))) {\n ast.push({\n type: 'enumValues',\n action: 'add',\n schema,\n name,\n values: codeValues.filter((value) => !dbValues.includes(value)),\n });\n pendingDbTypes.add(schema, name);\n return;\n }\n } else if (dbValues.length > codeValues.length) {\n if (!codeValues.some((value) => !dbValues.includes(value))) {\n ast.push({\n type: 'enumValues',\n action: 'drop',\n schema,\n name,\n values: dbValues.filter((value) => !codeValues.includes(value)),\n });\n pendingDbTypes.add(schema, name);\n return;\n }\n } else if (!dbValues.some((value) => !codeValues.includes(value))) {\n return;\n }\n\n ast.push({\n type: 'changeEnumValues',\n schema,\n name,\n fromValues: dbValues,\n toValues: codeValues,\n });\n pendingDbTypes.add(schema, name);\n};\n\nconst renameColumnsTypeSchema = (\n dbStructure: IntrospectedStructure,\n from: string,\n to: string,\n) => {\n for (const table of dbStructure.tables) {\n for (const column of table.columns) {\n if (column.typeSchema === from) {\n column.typeSchema = to;\n }\n }\n }\n};\n","import { Column, toArray, toSnakeCase } from 'pqb';\nimport { ChangeTableData } from './tables.generator';\nimport { checkForColumnAddOrDrop } from './generators.utils';\nimport { RakeDbConfig } from 'rake-db';\n\nexport const processPrimaryKey = (\n config: RakeDbConfig,\n changeTableData: ChangeTableData,\n) => {\n const { codeTable } = changeTableData;\n\n const columnsPrimaryKey: { key: string; name: string }[] = [];\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as Column;\n if (column.data.primaryKey) {\n columnsPrimaryKey.push({ key, name: column.data.name ?? key });\n }\n }\n\n changePrimaryKey(config, columnsPrimaryKey, changeTableData);\n renamePrimaryKey(changeTableData);\n};\n\nconst changePrimaryKey = (\n config: RakeDbConfig,\n columnsPrimaryKey: { key: string; name: string }[],\n {\n codeTable,\n dbTableData: { primaryKey: dbPrimaryKey },\n changeTableAst: { shape, add, drop },\n changingColumns,\n }: ChangeTableData,\n) => {\n const tablePrimaryKey = codeTable.internal.tableData.primaryKey;\n const primaryKey = [\n ...new Set([\n ...columnsPrimaryKey,\n ...((config.snakeCase\n ? tablePrimaryKey?.columns.map((key) => ({\n key,\n name: toSnakeCase(key),\n }))\n : tablePrimaryKey?.columns.map((key) => ({ key, name: key }))) ?? []),\n ]),\n ];\n\n if (\n dbPrimaryKey &&\n primaryKey.length === dbPrimaryKey.columns.length &&\n !primaryKey.some(\n ({ name }) => !dbPrimaryKey.columns.some((dbName) => name === dbName),\n )\n ) {\n if (primaryKey.length === 1) {\n const { key } = primaryKey[0];\n const changes = shape[key] && toArray(shape[key]);\n if (changes) {\n for (const change of changes) {\n if (change.type !== 'change') continue;\n\n if (change.from.column) {\n change.from.column.data.primaryKey = undefined;\n }\n\n if (change.to.column) {\n const column = Object.create(change.to.column);\n column.data = { ...column.data, primaryKey: undefined };\n change.to.column = column;\n }\n }\n }\n }\n return;\n }\n\n const toDrop = dbPrimaryKey?.columns.filter(\n (key) => !checkForColumnAddOrDrop(shape, key),\n );\n if (toDrop?.length) {\n if (toDrop.length === 1 && changingColumns[toDrop[0]]) {\n const column = changingColumns[toDrop[0]];\n column.from.data.primaryKey =\n dbPrimaryKey?.name ?? (true as unknown as string);\n } else {\n drop.primaryKey = { columns: toDrop, name: dbPrimaryKey?.name };\n }\n }\n\n const toAdd = primaryKey.filter(\n ({ key }) => !checkForColumnAddOrDrop(shape, key),\n );\n if (toAdd.length) {\n if (toAdd.length === 1 && changingColumns[toAdd[0].name]) {\n const column = changingColumns[toAdd[0].name];\n column.to.data.primaryKey =\n tablePrimaryKey?.name ?? (true as unknown as string);\n } else {\n add.primaryKey = {\n columns: toAdd.map((c) => c.key),\n name: tablePrimaryKey?.name,\n };\n }\n }\n};\n\nconst renamePrimaryKey = ({\n codeTable,\n dbTableData: { primaryKey: dbPrimaryKey },\n schema,\n delayedAst,\n}: ChangeTableData) => {\n const tablePrimaryKey = codeTable.internal.tableData.primaryKey;\n if (\n dbPrimaryKey &&\n tablePrimaryKey &&\n dbPrimaryKey?.name !== tablePrimaryKey?.name\n ) {\n delayedAst.push({\n type: 'renameTableItem',\n kind: 'CONSTRAINT',\n tableSchema: schema,\n tableName: codeTable.table,\n from: dbPrimaryKey.name ?? `${codeTable.table}_pkey`,\n to: tablePrimaryKey.name ?? `${codeTable}_pkey`,\n });\n }\n};\n","import {\n RakeDbAst,\n getIndexName,\n DbStructure,\n getExcludeName,\n RakeDbConfig,\n} from 'rake-db';\nimport {\n Column,\n TableData,\n deepCompare,\n MaybeArray,\n RecordUnknown,\n toArray,\n toSnakeCase,\n SearchWeight,\n} from 'pqb';\nimport { ChangeTableData } from './tables.generator';\nimport { checkForColumnAddOrDrop, CompareExpression } from './generators.utils';\nimport { CodeTable } from '../generate';\n\ninterface CodeItem {\n columnKeys: TableData.Index.ColumnOrExpressionOptions[];\n includeKeys?: MaybeArray<string>;\n}\n\ninterface CodeIndex extends TableData.Index, CodeItem {}\ninterface CodeExclude extends TableData.Exclude, CodeItem {}\n\ninterface CodeItems {\n indexes: CodeIndex[];\n excludes: CodeExclude[];\n}\n\ninterface ComparableIndexColumn {\n column?: string;\n collate?: string;\n opclass?: string;\n order?: string;\n weight?: SearchWeight;\n hasExpression: boolean;\n}\n\ninterface ComparableIndex {\n name?: string;\n using?: string;\n unique?: boolean;\n include?: string[];\n nullsNotDistinct?: boolean;\n tablespace?: string;\n tsVector?: boolean;\n language?: string;\n languageColumn?: string;\n columns: ComparableIndexColumn[];\n hasWith: boolean;\n hasWhere: boolean;\n hasExpression: boolean;\n columnKeys?: string[];\n includeKeys?: string[];\n}\n\ninterface ComparableExcludeColumn extends ComparableIndexColumn {\n with: string;\n}\n\ninterface ComparableExclude extends ComparableIndex {\n columns: ComparableExcludeColumn[];\n}\n\ninterface ComparableItems {\n indexes: ComparableIndex[];\n excludes: ComparableExclude[];\n}\n\ninterface SkipCodeItems {\n indexes: Map<number, boolean>;\n excludes: Map<number, boolean>;\n}\n\ninterface HoldCodeItems {\n indexes: Map<TableData.Index, boolean>;\n excludes: Map<TableData.Exclude, boolean>;\n}\n\ninterface Wait {\n indexes: number;\n excludes: number;\n}\n\ninterface ProcessParams {\n config: RakeDbConfig;\n changeTableData: ChangeTableData;\n codeComparableItems: ComparableItems;\n codeItems: CodeItems;\n skipCodeItems: SkipCodeItems;\n holdCodeItems: HoldCodeItems;\n wait: Wait;\n ast: RakeDbAst[];\n compareExpressions: CompareExpression[];\n}\n\nexport const processIndexesAndExcludes = (\n config: RakeDbConfig,\n changeTableData: ChangeTableData,\n ast: RakeDbAst[],\n compareExpressions: CompareExpression[],\n) => {\n const codeItems = collectCodeIndexes(config, changeTableData);\n const codeComparableItems = collectCodeComparableItems(config, codeItems);\n\n // to skip indexes without SQL from being added when they are matched with already existing indexes\n const skipCodeItems: SkipCodeItems = {\n indexes: new Map(),\n excludes: new Map(),\n };\n\n // to skip indexes with SQL from being added while their SQL is being asynchronously compared with existing indexes\n const holdCodeItems: HoldCodeItems = {\n indexes: new Map(),\n excludes: new Map(),\n };\n\n const processParams: ProcessParams = {\n config,\n changeTableData,\n codeComparableItems,\n codeItems,\n skipCodeItems,\n holdCodeItems,\n // counter for async SQL comparisons that are in progress\n wait: { indexes: 0, excludes: 0 },\n ast,\n compareExpressions,\n };\n\n processItems(processParams, 'indexes');\n processItems(processParams, 'excludes');\n\n addMainItems(\n changeTableData,\n codeItems,\n skipCodeItems,\n holdCodeItems,\n 'indexes',\n );\n addMainItems(\n changeTableData,\n codeItems,\n skipCodeItems,\n holdCodeItems,\n 'excludes',\n );\n};\n\nconst processItems = (\n {\n config,\n changeTableData,\n codeComparableItems,\n codeItems,\n skipCodeItems,\n holdCodeItems,\n wait,\n ast,\n compareExpressions,\n }: ProcessParams,\n key: 'indexes' | 'excludes',\n) => {\n const {\n changeTableAst: { shape },\n } = changeTableData;\n\n const dbItems = changeTableData.dbTableData[key];\n\n for (const dbItem of dbItems) {\n const hasAddedOrDroppedColumn = dbItem.columns.some(\n (column) =>\n 'column' in column && checkForColumnAddOrDrop(shape, column.column),\n );\n if (hasAddedOrDroppedColumn) continue;\n\n normalizeItem(dbItem);\n\n const { found, rename, foundAndHasSql } = findMatchingItem(\n dbItem,\n codeComparableItems,\n codeItems,\n skipCodeItems,\n changeTableData.codeTable.table,\n config,\n key,\n );\n\n const { columns: dbColumns } = dbItem;\n\n if (!foundAndHasSql) {\n handleItemChange(\n changeTableData,\n dbItem,\n dbColumns,\n found[0],\n rename[0],\n key,\n );\n continue;\n }\n\n for (const codeItem of found) {\n holdCodeItems[key].set(codeItem as never, true);\n }\n\n const compare: CompareExpression['compare'] = [];\n for (let i = 0; i < dbItem.columns.length; i++) {\n const column = dbItem.columns[i];\n if (!('expression' in column)) continue;\n\n compare.push({\n inDb: column.expression,\n inCode: found.map(\n (x) => (x.columns[i] as { expression: string }).expression,\n ),\n });\n }\n\n if (dbItem.with) {\n compare.push({\n inDb: dbItem.with,\n inCode: found.map((x) => x.options.with as string),\n });\n }\n\n if (dbItem.where) {\n compare.push({\n inDb: dbItem.where,\n inCode: found.map((x) => x.options.where as string),\n });\n }\n\n wait[key]++;\n compareExpressions.push({\n compare,\n handle(i) {\n const codeItem = i === undefined ? undefined : found[i];\n\n handleItemChange(\n changeTableData,\n dbItem,\n dbColumns,\n codeItem,\n i === undefined ? undefined : rename[i],\n key,\n );\n\n if (codeItem) {\n holdCodeItems[key].delete(codeItem as never);\n }\n\n if (!--wait[key] && holdCodeItems[key].size) {\n addItems(changeTableData, [...holdCodeItems[key].keys()], key);\n\n if (!changeTableData.pushedAst) {\n changeTableData.pushedAst = true;\n ast.push(changeTableData.changeTableAst);\n }\n }\n },\n });\n }\n};\n\nconst collectCodeIndexes = (\n config: RakeDbConfig,\n { codeTable, changeTableAst: { shape } }: ChangeTableData,\n): CodeItems => {\n const codeItems: CodeItems = { indexes: [], excludes: [] };\n\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as Column;\n if (!column.data.indexes && !column.data.excludes) continue;\n\n const name = column.data.name ?? key;\n if (checkForColumnAddOrDrop(shape, name)) continue;\n\n pushCodeColumnItems(config, codeItems, key, name, column, 'indexes');\n pushCodeColumnItems(config, codeItems, key, name, column, 'excludes');\n }\n\n pushCodeCompositeItems(config, codeTable, codeItems, 'indexes');\n pushCodeCompositeItems(config, codeTable, codeItems, 'excludes');\n\n return codeItems;\n};\n\nconst pushCodeColumnItems = (\n config: RakeDbConfig,\n codeItems: CodeItems,\n columnKey: string,\n name: string,\n column: Column,\n key: 'indexes' | 'excludes',\n) => {\n const items = column.data[key];\n if (!items) return;\n\n codeItems[key].push(\n ...(items as TableData.ColumnExclude[]).map(\n ({\n options: { collate, opclass, order, weight, ...options },\n with: wi,\n ...index\n }) => {\n const w = key === 'excludes' ? wi : (undefined as never);\n return {\n columns: [\n {\n collate,\n opclass,\n order,\n weight,\n column: name,\n with: w,\n },\n ],\n ...index,\n options: options.include\n ? config.snakeCase\n ? {\n ...options,\n include: toArray(options.include).map(toSnakeCase),\n }\n : options\n : options,\n columnKeys: [\n {\n collate,\n opclass,\n order,\n weight,\n column: columnKey,\n with: w,\n },\n ],\n includeKeys: options.include,\n };\n },\n ),\n );\n};\n\nconst pushCodeCompositeItems = (\n config: RakeDbConfig,\n codeTable: CodeTable,\n codeItems: CodeItems,\n key: 'indexes' | 'excludes',\n) => {\n const items = codeTable.internal.tableData[key];\n if (!items) return;\n\n codeItems[key].push(\n ...(items as TableData.Exclude[]).map((x) => ({\n ...x,\n columns: config.snakeCase\n ? x.columns.map((c) =>\n 'column' in c ? { ...c, column: toSnakeCase(c.column) } : c,\n )\n : x.columns,\n columnKeys: x.columns,\n options:\n x.options.include && config.snakeCase\n ? {\n ...x.options,\n include: toArray(x.options.include).map(toSnakeCase),\n }\n : x.options,\n includeKeys: x.options.include,\n })),\n );\n};\n\nconst collectCodeComparableItems = (\n config: RakeDbConfig,\n codeItems: CodeItems,\n): ComparableItems => {\n return {\n indexes: collectCodeComparableItemsType(config, codeItems, 'indexes'),\n excludes: collectCodeComparableItemsType(config, codeItems, 'excludes'),\n };\n};\n\nconst collectCodeComparableItemsType = (\n config: RakeDbConfig,\n codeItems: CodeItems,\n key: 'indexes' | 'excludes',\n): ComparableExclude[] => {\n return codeItems[key].map((codeItem) => {\n normalizeItem(codeItem.options as never);\n\n return itemToComparable({\n ...codeItem.options,\n include:\n codeItem.options.include === undefined\n ? undefined\n : config.snakeCase\n ? toArray(codeItem.options.include).map(toSnakeCase)\n : toArray(codeItem.options.include),\n columns: codeItem.columns,\n name: codeItem.options.name,\n columnKeys: codeItem.columnKeys,\n includeKeys: codeItem.includeKeys,\n });\n }) as never;\n};\n\nconst normalizeItem = (item: {\n using?: string;\n unique?: boolean;\n nullsNotDistinct?: boolean;\n columns: RecordUnknown[];\n exclude?: string[];\n}) => {\n if (item.using) item.using = item.using.toLowerCase();\n if (item.using === 'btree') item.using = undefined;\n if (!item.unique) item.unique = undefined;\n if (item.nullsNotDistinct === false) item.nullsNotDistinct = undefined;\n if (item.exclude) {\n for (let i = 0; i < item.columns.length; i++) {\n item.columns[i].with = item.exclude[i];\n }\n }\n};\n\nconst itemToComparable = (\n index: TableData.Index.Options & {\n columns: DbStructure.Index['columns'];\n name?: string;\n columnKeys?: TableData.Index.ColumnOrExpressionOptions[];\n includeKeys?: MaybeArray<string>;\n },\n) => {\n let hasExpression = false;\n const columns = index.columns.map((column) => {\n const result = {\n ...column,\n expression: undefined,\n hasExpression: 'expression' in column,\n };\n if (result.hasExpression) hasExpression = true;\n return result;\n });\n\n return {\n ...index,\n schemaName: undefined,\n tableName: undefined,\n with: undefined,\n hasWith: !!index.with,\n where: undefined,\n hasWhere: !!index.where,\n columns,\n hasExpression,\n } as ComparableIndex;\n};\n\ninterface ItemChange {\n found: TableData.Index[] | TableData.Exclude[];\n rename: (string | undefined)[];\n}\n\nconst findMatchingItem = (\n dbItem: DbStructure.Index | DbStructure.Exclude,\n codeComparableItems: ComparableItems,\n codeItems: CodeItems,\n skipCodeItems: SkipCodeItems,\n tableName: string,\n config: RakeDbConfig,\n key: 'indexes' | 'excludes',\n) => {\n const dbComparableItem = itemToComparable(\n key === 'indexes'\n ? dbItem\n : {\n ...dbItem,\n exclude: undefined as never,\n columns: dbItem.columns.map((column, i) => ({\n ...column,\n with: (dbItem as DbStructure.Exclude).exclude[i],\n })),\n },\n );\n\n const { found, rename } = findMatchingItemWithoutSql(\n dbComparableItem,\n codeComparableItems,\n codeItems,\n skipCodeItems,\n tableName,\n config,\n key,\n );\n\n const foundAndHasSql = found.length && checkIfItemHasSql(dbComparableItem);\n\n return { found, rename, foundAndHasSql };\n};\n\nconst findMatchingItemWithoutSql = (\n dbItem: ComparableIndex | ComparableExclude,\n codeComparableItems: ComparableItems,\n codeItems: CodeItems,\n skipCodeItems: SkipCodeItems,\n tableName: string,\n config: RakeDbConfig,\n key: 'indexes' | 'excludes',\n): ItemChange => {\n const found: (TableData.Index | TableData.Exclude)[] = [];\n const rename: (string | undefined)[] = [];\n\n const { columns: dbColumns, ...dbItemWithoutColumns } = dbItem;\n\n for (let i = 0; i < codeComparableItems[key].length; i++) {\n if (skipCodeItems[key].has(i)) continue;\n\n const { columns: codeColumns, ...codeItem } = codeComparableItems[key][i];\n if (\n dbColumns.length === codeColumns.length &&\n !dbColumns.some((dbColumn, i) => !deepCompare(dbColumn, codeColumns[i]))\n ) {\n let a: RecordUnknown = dbItemWithoutColumns;\n let b = codeItem;\n const codeName =\n b.name ??\n (key === 'indexes' ? getIndexName : getExcludeName)(\n tableName,\n dbColumns,\n );\n if (a.name !== b.name) {\n a = { ...a, name: undefined };\n b = {\n ...b,\n name: undefined,\n columnKeys: undefined,\n includeKeys: undefined,\n };\n if (a.language && !b.language) {\n b.language = config.language ?? 'english';\n }\n\n if (deepCompare(a, b)) {\n found.push(codeItems[key][i]);\n rename.push(\n dbItemWithoutColumns.name !== codeName ? codeName : undefined,\n );\n }\n } else {\n const {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n columnKeys,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n includeKeys,\n ...codeItemWithoutKeys\n } = codeItem;\n\n if (deepCompare(dbItemWithoutColumns, codeItemWithoutKeys)) {\n found.push(codeItems[key][i]);\n rename.push(undefined);\n }\n }\n\n if (found.length && !checkIfItemHasSql(codeItem)) {\n skipCodeItems[key].set(i, true);\n }\n }\n }\n\n return { found, rename };\n};\n\nconst checkIfItemHasSql = (\n x: Pick<ComparableIndex, 'hasWith' | 'hasWhere' | 'hasExpression'>,\n) => x.hasWith || x.hasWhere || x.hasExpression;\n\nconst handleItemChange = (\n {\n changeTableAst,\n schema,\n codeTable,\n changingColumns,\n delayedAst,\n }: ChangeTableData,\n dbItem: DbStructure.Index | DbStructure.Exclude,\n dbColumns: DbStructure.Index['columns'],\n found: TableData.Index | TableData.Exclude | undefined,\n rename: string | undefined,\n key: 'indexes' | 'excludes',\n) => {\n if (!found) {\n const name =\n dbItem.name ===\n (key === 'indexes' ? getIndexName : getExcludeName)(\n changeTableAst.name,\n dbColumns,\n )\n ? undefined\n : dbItem.name;\n\n if (dbColumns.length === 1 && 'column' in dbColumns[0]) {\n const dbColumn = dbColumns[0];\n const column = changingColumns[dbColumn.column];\n if (column) {\n (column.from.data[key] ??= []).push({\n options: { ...dbItem, name },\n with: (key === 'indexes'\n ? undefined\n : (dbColumn as unknown as { with: string }).with) as never,\n });\n return;\n }\n }\n\n (changeTableAst.drop[key] ??= []).push({\n columns: dbColumns,\n options: { ...dbItem, name },\n });\n } else if (rename) {\n delayedAst.push({\n type: 'renameTableItem',\n kind: key === 'indexes' ? 'INDEX' : 'CONSTRAINT',\n tableSchema: schema,\n tableName: codeTable.table,\n from: dbItem.name,\n to: rename,\n });\n }\n};\n\ninterface IndexWithMaybeColumnNames extends TableData.Index {\n columnNames?: TableData.Index.ColumnOrExpressionOptions[];\n}\n\nconst addMainItems = (\n changeTableData: ChangeTableData,\n codeItems: CodeItems,\n skipCodeItems: SkipCodeItems,\n holdCodeItems: HoldCodeItems,\n key: 'indexes' | 'excludes',\n) => {\n const itemsToAdd = codeItems[key].filter(\n (item, i) =>\n !skipCodeItems[key].has(i) && !holdCodeItems[key].has(item as never),\n );\n if (itemsToAdd.length) {\n addItems(\n changeTableData,\n itemsToAdd.map((x) => ({\n ...x,\n columns: x.columnKeys,\n columnNames: x.columns,\n options: x.options.include\n ? { ...x.options, include: x.includeKeys }\n : x.options,\n })),\n key,\n );\n }\n};\n\nconst addItems = (\n { changeTableAst, changingColumns }: ChangeTableData,\n add: IndexWithMaybeColumnNames[],\n key: 'indexes' | 'excludes',\n) => {\n const items = (changeTableAst.add[key] ??= []);\n for (const item of add) {\n if (item.columns.length === 1 && 'column' in item.columns[0]) {\n const column =\n changingColumns[\n ((item.columnNames || item.columns)[0] as { column: string }).column\n ];\n if (column) {\n (column.to.data[key] ??= []).push(\n key === 'indexes'\n ? item\n : ({\n ...item,\n with: (item as TableData.Exclude).columns[0].with,\n } as never),\n );\n continue;\n }\n }\n\n items.push(item);\n }\n};\n","import {\n RakeDbAst,\n DbStructure,\n concatSchemaAndName,\n getSchemaAndTableFromName,\n getConstraintName,\n RakeDbConfig,\n} from 'rake-db';\nimport { Column, TableData, deepCompare, toSnakeCase } from 'pqb';\nimport { ChangeTableData, TableShapes } from './tables.generator';\nimport { checkForColumnAddOrDrop } from './generators.utils';\n\ninterface Constraint extends TableData.Constraint {\n references: TableData.References;\n}\n\ninterface CodeForeignKey {\n references: DbStructure.References;\n codeConstraint: Constraint;\n}\n\ninterface ReferencesWithStringTable extends TableData.References {\n fnOrTable: string;\n}\n\nconst mapMatchToDb: {\n [K in TableData.References.Match]: DbStructure.ForeignKeyMatch;\n} = {\n FULL: 'f',\n PARTIAL: 'p',\n SIMPLE: 's',\n};\n\nconst mapMatchToCode = {} as {\n [K in DbStructure.ForeignKeyMatch]: TableData.References.Match;\n};\nfor (const key in mapMatchToDb) {\n mapMatchToCode[\n mapMatchToDb[\n key as TableData.References.Match\n ] as DbStructure.ForeignKeyMatch\n ] = key as TableData.References.Match;\n}\n\nconst mapActionToDb: {\n [K in TableData.References.Action]: DbStructure.ForeignKeyAction;\n} = {\n 'NO ACTION': 'a',\n RESTRICT: 'r',\n CASCADE: 'c',\n 'SET NULL': 'n',\n 'SET DEFAULT': 'd',\n};\n\nconst mapActionToCode = {} as {\n [K in DbStructure.ForeignKeyAction]: TableData.References.Action;\n};\nfor (const key in mapActionToDb) {\n mapActionToCode[\n mapActionToDb[\n key as TableData.References.Action\n ] as DbStructure.ForeignKeyAction\n ] = key as TableData.References.Action;\n}\n\nexport const processForeignKeys = (\n config: RakeDbConfig,\n ast: RakeDbAst[],\n changeTables: ChangeTableData[],\n currentSchema: string,\n tableShapes: TableShapes,\n): void => {\n for (const changeTableData of changeTables) {\n const codeForeignKeys = collectCodeFkeys(\n config,\n changeTableData,\n currentSchema,\n );\n\n const { codeTable, dbTableData, changeTableAst, schema, changingColumns } =\n changeTableData;\n const { shape, add, drop } = changeTableAst;\n let changed = false;\n\n for (const dbConstraint of dbTableData.constraints) {\n const { references: dbReferences } = dbConstraint;\n if (!dbReferences) continue;\n\n const hasChangedColumn = dbReferences.columns.some((column) =>\n checkForColumnAddOrDrop(shape, column),\n );\n if (hasChangedColumn) continue;\n\n const foreignShape =\n tableShapes[\n `${dbReferences.foreignSchema}.${dbReferences.foreignTable}`\n ];\n const hasForeignChangedColumn =\n foreignShape &&\n dbReferences.foreignColumns.some((column) => {\n const res = checkForColumnAddOrDrop(foreignShape, column);\n // console.log(res, column);\n return res;\n });\n if (hasForeignChangedColumn) continue;\n\n let found = false;\n let rename: string | undefined;\n for (let i = 0; i < codeForeignKeys.length; i++) {\n const codeForeignKey = codeForeignKeys[i];\n const codeReferences = codeForeignKey.references;\n if (deepCompare(dbReferences, codeReferences)) {\n found = true;\n codeForeignKeys.splice(i, 1);\n\n const codeName =\n codeForeignKey.codeConstraint.name ??\n getConstraintName(\n codeTable.table,\n codeForeignKey,\n config.snakeCase,\n );\n if (codeName !== dbConstraint.name) {\n rename = codeName;\n }\n }\n }\n\n if (!found) {\n const foreignKey = dbForeignKeyToCodeForeignKey(\n config,\n dbConstraint,\n dbReferences,\n );\n\n if (\n dbReferences.columns.length === 1 &&\n changingColumns[dbReferences.columns[0]]\n ) {\n const column = changingColumns[dbReferences.columns[0]];\n (column.from.data.foreignKeys ??= []).push({\n fnOrTable: foreignKey.references.fnOrTable,\n foreignColumns: foreignKey.references.foreignColumns,\n options: foreignKey.references.options,\n });\n } else {\n (drop.constraints ??= []).push(foreignKey);\n }\n\n changed = true;\n } else if (rename) {\n ast.push({\n type: 'renameTableItem',\n kind: 'CONSTRAINT',\n tableSchema: schema,\n tableName: codeTable.table,\n from: dbConstraint.name,\n to: rename,\n });\n }\n }\n\n if (codeForeignKeys.length) {\n const constraints = (add.constraints ??= []);\n for (const { codeConstraint, references } of codeForeignKeys) {\n if (\n references.columns.length === 1 &&\n changingColumns[references.columns[0]]\n ) {\n const column = changingColumns[references.columns[0]];\n (column.to.data.foreignKeys ??= []).push({\n fnOrTable: references.foreignTable,\n foreignColumns: codeConstraint.references.foreignColumns,\n options: codeConstraint.references.options,\n });\n } else {\n constraints.push(codeConstraint);\n }\n }\n\n changed = true;\n }\n\n if (changed && !changeTableData.pushedAst) {\n changeTableData.pushedAst = true;\n ast.push(changeTableData.changeTableAst);\n }\n }\n};\n\nconst collectCodeFkeys = (\n config: RakeDbConfig,\n { codeTable, changeTableAst: { shape } }: ChangeTableData,\n currentSchema: string,\n): CodeForeignKey[] => {\n const codeForeignKeys: CodeForeignKey[] = [];\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as Column;\n if (!column.data.foreignKeys) continue;\n\n const name = column.data.name ?? key;\n if (checkForColumnAddOrDrop(shape, name)) continue;\n\n codeForeignKeys.push(\n ...column.data.foreignKeys.map((x) => {\n const columns = [name];\n\n const fnOrTable = fnOrTableToString(x.fnOrTable);\n\n return parseForeignKey(\n config,\n {\n name: x.options?.name,\n references: {\n columns: [name],\n fnOrTable,\n foreignColumns: x.foreignColumns,\n options: x.options,\n },\n },\n {\n columns,\n fnOrTable,\n foreignColumns: x.foreignColumns,\n options: x.options,\n },\n currentSchema,\n );\n }),\n );\n }\n\n if (codeTable.internal.tableData.constraints) {\n for (const tableConstraint of codeTable.internal.tableData.constraints) {\n const { references: refs } = tableConstraint;\n if (!refs) continue;\n\n const fnOrTable = fnOrTableToString(refs.fnOrTable);\n\n codeForeignKeys.push(\n parseForeignKey(\n config,\n {\n ...tableConstraint,\n references: {\n ...refs,\n fnOrTable,\n },\n },\n {\n ...refs,\n fnOrTable,\n columns: config.snakeCase\n ? refs.columns.map(toSnakeCase)\n : refs.columns,\n foreignColumns: config.snakeCase\n ? refs.foreignColumns.map(toSnakeCase)\n : refs.foreignColumns,\n },\n currentSchema,\n ),\n );\n }\n }\n\n return codeForeignKeys;\n};\n\nexport const fnOrTableToString = (\n fnOrTable: TableData.References['fnOrTable'],\n) => {\n if (typeof fnOrTable !== 'string') {\n const { schema, table } = new (fnOrTable())();\n fnOrTable = concatSchemaAndName({ schema, name: table });\n }\n return fnOrTable;\n};\n\nconst parseForeignKey = (\n config: RakeDbConfig,\n codeConstraint: Constraint,\n references: ReferencesWithStringTable,\n currentSchema: string,\n): CodeForeignKey => {\n const { fnOrTable, columns, foreignColumns, options } = references;\n const [schema, table] = getSchemaAndTableFromName(currentSchema, fnOrTable);\n\n return {\n references: {\n foreignSchema: schema ?? currentSchema,\n foreignTable: table,\n columns,\n foreignColumns: config.snakeCase\n ? foreignColumns.map(toSnakeCase)\n : foreignColumns,\n match: mapMatchToDb[options?.match || 'SIMPLE'],\n onUpdate: mapActionToDb[options?.onUpdate || 'NO ACTION'],\n onDelete: mapActionToDb[options?.onDelete || 'NO ACTION'],\n },\n codeConstraint,\n };\n};\n\nconst dbForeignKeyToCodeForeignKey = (\n config: RakeDbConfig,\n dbConstraint: DbStructure.Constraint,\n dbReferences: DbStructure.References,\n): { name?: string; references: TableData.References } => ({\n name:\n dbConstraint.name ===\n getConstraintName(\n dbConstraint.tableName,\n { references: dbReferences },\n config.snakeCase,\n )\n ? undefined\n : dbConstraint.name,\n references: {\n columns: dbReferences.columns,\n fnOrTable: `${dbReferences.foreignSchema}.${dbReferences.foreignTable}`,\n foreignColumns: dbReferences.foreignColumns,\n options: {\n match:\n dbReferences.match === 's'\n ? undefined\n : mapMatchToCode[dbReferences.match],\n onUpdate:\n dbReferences.onUpdate === 'a'\n ? undefined\n : mapActionToCode[dbReferences.onUpdate],\n onDelete:\n dbReferences.onDelete === 'a'\n ? undefined\n : mapActionToCode[dbReferences.onDelete],\n },\n },\n});\n","import {\n getFreeSetAlias,\n TemplateLiteralArgs,\n Column,\n RawSql,\n TableData,\n} from 'pqb';\nimport { DbStructure, RakeDbAst } from 'rake-db';\nimport { ChangeTableData } from './tables.generator';\nimport { checkForColumnAddOrDrop, CompareExpression } from './generators.utils';\n\ninterface CodeCheck {\n check: Column.Data.Check;\n name: string;\n column?: string;\n}\n\nexport const processChecks = (\n ast: RakeDbAst[],\n changeTableData: ChangeTableData,\n compareExpressions: CompareExpression[],\n): void => {\n const codeChecks = collectCodeChecks(changeTableData);\n const {\n dbTableData,\n changeTableAst: { add, shape },\n } = changeTableData;\n\n const hasDbChecks = dbTableData.constraints.some((c) => c.check);\n if (!hasDbChecks) {\n if (codeChecks.length) {\n const constraints = (add.constraints ??= []);\n for (const codeCheck of codeChecks) {\n if (\n !codeCheck.column ||\n !changeTableData.changingColumns[codeCheck.column]\n ) {\n constraints.push({\n check: codeCheck.check.sql,\n name: codeCheck.name,\n });\n }\n }\n }\n return;\n }\n\n let wait = 0;\n const foundCodeChecks = new Set<number>();\n for (const dbConstraint of dbTableData.constraints) {\n const { check: dbCheck, name } = dbConstraint;\n if (!dbCheck) continue;\n\n const hasChangedColumn = dbCheck.columns?.some((column) =>\n checkForColumnAddOrDrop(shape, column),\n );\n if (hasChangedColumn) continue;\n\n if (codeChecks.length) {\n wait++;\n compareExpressions.push({\n compare: [\n {\n inDb: dbCheck.expression,\n inCode: codeChecks.map(({ check }) => check.sql),\n },\n ],\n handle(i) {\n if (i !== undefined) {\n foundCodeChecks.add(i);\n } else {\n dropCheck(changeTableData, dbCheck, name);\n }\n\n if (--wait !== 0) return;\n\n const checksToAdd: TableData.Constraint[] = [];\n\n codeChecks.forEach((check, i) => {\n if (foundCodeChecks.has(i)) {\n if (!check.column) return;\n\n const change = changeTableData.changingColumns[check.column];\n if (!change) return;\n\n const columnChecks = change.to.data.checks;\n if (!columnChecks) return;\n\n const i = columnChecks.indexOf(check.check);\n if (i !== -1) {\n columnChecks.splice(i, 1);\n }\n return;\n }\n\n checksToAdd.push({\n name: check.name,\n check: check.check.sql,\n });\n });\n\n if (checksToAdd.length) {\n (add.constraints ??= []).push(...checksToAdd);\n }\n\n if (\n !changeTableData.pushedAst &&\n (changeTableData.changeTableAst.drop.constraints?.length ||\n add.constraints?.length)\n ) {\n changeTableData.pushedAst = true;\n ast.push(changeTableData.changeTableAst);\n }\n },\n });\n } else {\n dropCheck(changeTableData, dbCheck, name);\n }\n }\n};\n\nconst collectCodeChecks = ({\n codeTable,\n changeTableAst: { shape },\n}: ChangeTableData): CodeCheck[] => {\n const names = new Set<string>();\n\n const codeChecks: CodeCheck[] = [];\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as Column;\n if (!column.data.checks) continue;\n\n const columnName = column.data.name ?? key;\n if (checkForColumnAddOrDrop(shape, columnName)) continue;\n\n const baseName = `${codeTable.table}_${columnName}_check`;\n\n codeChecks.push(\n ...column.data.checks.map((check) => {\n const name = check.name || getFreeSetAlias(names, baseName, 1);\n names.add(name);\n\n return {\n check,\n name,\n column: columnName,\n };\n }),\n );\n }\n\n if (codeTable.internal.tableData.constraints) {\n for (const constraint of codeTable.internal.tableData.constraints) {\n const { check } = constraint;\n if (check) {\n const baseName = `${codeTable.table}_check`;\n const name = constraint.name || getFreeSetAlias(names, baseName, 1);\n names.add(name);\n\n codeChecks.push({\n check: { sql: check, name: constraint.name },\n name,\n });\n }\n }\n }\n\n return codeChecks;\n};\n\nconst dropCheck = (\n { changeTableAst: { drop }, changingColumns }: ChangeTableData,\n dbCheck: DbStructure.Check,\n name: string,\n) => {\n const sql = new RawSql([\n [dbCheck.expression],\n ] as unknown as TemplateLiteralArgs);\n\n if (dbCheck.columns?.length === 1 && changingColumns[dbCheck.columns[0]]) {\n const column = changingColumns[dbCheck.columns[0]];\n column.from.data.name = 'i_d';\n (column.from.data.checks ??= []).push({\n name,\n sql,\n });\n } else {\n (drop.constraints ??= []).push({\n name,\n check: sql,\n });\n }\n};\n","import {\n ColumnsShape,\n Column,\n GeneratorIgnore,\n VirtualColumn,\n DbStructureDomainsMap,\n AdapterBase,\n EnumColumn,\n ArrayColumn,\n} from 'pqb';\nimport {\n DbStructure,\n IntrospectedStructure,\n RakeDbAst,\n getDbStructureTableData,\n StructureToAstCtx,\n StructureToAstTableData,\n tableToAst,\n getSchemaAndTableFromName,\n getMigrationsSchemaAndTable,\n RakeDbConfig,\n} from 'rake-db';\nimport {\n CompareExpression,\n compareSqlExpressions,\n promptCreateOrRename,\n TableExpression,\n} from './generators.utils';\nimport { processPrimaryKey } from './primaryKey.generator';\nimport { processIndexesAndExcludes } from './indexesAndExcludes.generator';\nimport { processColumns, TypeCastsCache } from './columns.generator';\nimport { processForeignKeys } from './foreignKeys.generator';\nimport { processChecks } from './checks.generator';\nimport { CodeTable } from '../generate';\nimport { ComposeMigrationParams, PendingDbTypes } from '../composeMigration';\n\nexport interface CompareSql {\n values: unknown[];\n expressions: {\n inDb: string;\n inCode: string | null;\n change(): void;\n }[];\n}\n\nexport interface ChangeTableSchemaData {\n codeTable: CodeTable;\n dbTable: DbStructure.Table;\n}\n\nexport interface ChangeTableData extends ChangeTableSchemaData {\n dbTableData: StructureToAstTableData;\n schema: string;\n changeTableAst: RakeDbAst.ChangeTable;\n pushedAst: boolean;\n changingColumns: ChangingColumns;\n delayedAst: RakeDbAst[];\n}\n\ninterface ChangingColumns {\n [dbName: string]: ChangingColumnsPair;\n}\n\nexport interface ChangingColumnsPair {\n from: Column;\n to: Column;\n}\n\nexport interface TableShapes {\n [K: string]: RakeDbAst.ChangeTableShape;\n}\n\nexport const processTables = async (\n ast: RakeDbAst[],\n domainsMap: DbStructureDomainsMap,\n adapter: AdapterBase,\n dbStructure: IntrospectedStructure,\n config: RakeDbConfig,\n {\n structureToAstCtx,\n codeItems: { tables },\n currentSchema,\n internal: { generatorIgnore },\n verifying,\n }: ComposeMigrationParams,\n pendingDbTypes: PendingDbTypes,\n): Promise<void> => {\n const createTables: CodeTable[] = collectCreateTables(\n tables,\n dbStructure,\n currentSchema,\n );\n const compareSql: CompareSql = { values: [], expressions: [] };\n const tableExpressions: TableExpression[] = [];\n const { changeTables, changeTableSchemas, dropTables, tableShapes } =\n collectChangeAndDropTables(\n adapter,\n config,\n tables,\n dbStructure,\n currentSchema,\n createTables,\n generatorIgnore,\n );\n\n applyChangeTableSchemas(changeTableSchemas, currentSchema, ast);\n\n await applyCreateOrRenameTables(\n dbStructure,\n createTables,\n dropTables,\n changeTables,\n tableShapes,\n currentSchema,\n ast,\n verifying,\n );\n\n await applyChangeTables(\n adapter,\n changeTables,\n structureToAstCtx,\n dbStructure,\n domainsMap,\n ast,\n currentSchema,\n config,\n compareSql,\n tableExpressions,\n verifying,\n pendingDbTypes,\n );\n\n processForeignKeys(config, ast, changeTables, currentSchema, tableShapes);\n\n await Promise.all([\n applyCompareSql(compareSql, adapter),\n compareSqlExpressions(tableExpressions, adapter),\n ]);\n\n for (const dbTable of dropTables) {\n ast.push(\n tableToAst(structureToAstCtx, dbStructure, dbTable, 'drop', domainsMap),\n );\n }\n};\n\nconst collectCreateTables = (\n tables: CodeTable[],\n dbStructure: IntrospectedStructure,\n currentSchema: string,\n): CodeTable[] => {\n return tables.reduce<CodeTable[]>((acc, codeTable) => {\n const tableSchema = codeTable.q.schema ?? currentSchema;\n const hasDbTable = dbStructure.tables.some(\n (t) => t.name === codeTable.table && t.schemaName === tableSchema,\n );\n if (!hasDbTable) {\n acc.push(codeTable);\n }\n return acc;\n }, []);\n};\n\nconst collectChangeAndDropTables = (\n adapter: AdapterBase,\n config: RakeDbConfig,\n tables: CodeTable[],\n dbStructure: IntrospectedStructure,\n currentSchema: string,\n createTables: CodeTable[],\n generatorIgnore: GeneratorIgnore | undefined,\n): {\n changeTables: ChangeTableData[];\n changeTableSchemas: ChangeTableSchemaData[];\n dropTables: DbStructure.Table[];\n tableShapes: TableShapes;\n} => {\n const changeTables: ChangeTableData[] = [];\n const changeTableSchemas: ChangeTableSchemaData[] = [];\n const dropTables: DbStructure.Table[] = [];\n const tableShapes: TableShapes = {};\n const ignoreTables = generatorIgnore?.tables?.map((name) => {\n const [schema = currentSchema, table] = getSchemaAndTableFromName(\n currentSchema,\n name,\n );\n return { schema, table };\n });\n\n const { schema: migrationsSchema = 'public', table: migrationsTable } =\n getMigrationsSchemaAndTable(adapter, config);\n for (const dbTable of dbStructure.tables) {\n if (\n (dbTable.name === migrationsTable &&\n dbTable.schemaName === migrationsSchema) ||\n generatorIgnore?.schemas?.includes(dbTable.schemaName) ||\n ignoreTables?.some(\n ({ schema, table }) =>\n table === dbTable.name && schema === dbTable.schemaName,\n )\n )\n continue;\n\n const codeTable = tables.find(\n (t) =>\n t.table === dbTable.name &&\n (t.q.schema ?? currentSchema) === dbTable.schemaName,\n );\n if (codeTable) {\n addChangeTable(\n dbStructure,\n changeTables,\n tableShapes,\n currentSchema,\n dbTable,\n codeTable,\n );\n continue;\n }\n\n const i = createTables.findIndex((t) => t.table === dbTable.name);\n if (i !== -1) {\n const codeTable = createTables[i];\n createTables.splice(i, 1);\n changeTableSchemas.push({ codeTable, dbTable });\n continue;\n }\n\n dropTables.push(dbTable);\n }\n\n return { changeTables, changeTableSchemas, dropTables, tableShapes };\n};\n\nconst applyChangeTableSchemas = (\n changeTableSchemas: ChangeTableSchemaData[],\n currentSchema: string,\n ast: RakeDbAst[],\n) => {\n for (const { codeTable, dbTable } of changeTableSchemas) {\n const fromSchema = dbTable.schemaName;\n const toSchema = codeTable.q.schema ?? currentSchema;\n\n ast.push({\n type: 'renameType',\n kind: 'TABLE',\n fromSchema,\n from: dbTable.name,\n toSchema,\n to: dbTable.name,\n });\n }\n};\n\nconst applyChangeTables = async (\n adapter: AdapterBase,\n changeTables: ChangeTableData[],\n structureToAstCtx: StructureToAstCtx,\n dbStructure: IntrospectedStructure,\n domainsMap: DbStructureDomainsMap,\n ast: RakeDbAst[],\n currentSchema: string,\n config: RakeDbConfig,\n compareSql: CompareSql,\n tableExpressions: TableExpression[],\n verifying: boolean | undefined,\n pendingDbTypes: PendingDbTypes,\n): Promise<void> => {\n const compareExpressions: CompareExpression[] = [];\n const typeCastsCache: TypeCastsCache = {};\n\n for (const changeTableData of changeTables) {\n compareExpressions.length = 0;\n\n await processTableChange(\n adapter,\n structureToAstCtx,\n dbStructure,\n domainsMap,\n ast,\n currentSchema,\n config,\n changeTableData,\n compareSql,\n compareExpressions,\n typeCastsCache,\n verifying,\n );\n\n if (compareExpressions.length) {\n const { codeTable } = changeTableData;\n const names: string[] = [];\n const types: string[] = [];\n\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as Column;\n // skip virtual columns\n if (!column.dataType) continue;\n\n const name = column.data.name ?? key;\n const type = getColumnDbTypeForComparison(column, currentSchema);\n if (!pendingDbTypes.set.has(type)) {\n names.push(name);\n types.push(type);\n }\n }\n\n const tableName = codeTable.table;\n const source = `(VALUES (${types\n .map((x) => `NULL::${x}`)\n .join(', ')})) \"${tableName}\"(${names\n .map((x) => `\"${x}\"`)\n .join(', ')})`;\n\n tableExpressions.push(\n ...compareExpressions.map((x) => ({ ...x, source })),\n );\n }\n }\n};\n\nconst getColumnDbTypeForComparison = (\n column: Column.Pick.DataAndDataType,\n currentSchema: string,\n): string => {\n if (column instanceof ArrayColumn) {\n return (\n getColumnDbTypeForComparison(column.data.item, currentSchema) +\n '[]'.repeat(column.data.arrayDims)\n );\n }\n\n let type = column instanceof EnumColumn ? column.enumName : column.dataType;\n\n const i = type.indexOf('(');\n let append = '';\n if (i !== -1) {\n type = type.slice(0, i);\n append = type.slice(i);\n }\n\n const j = type.indexOf('.');\n if (j === -1) {\n let result = `\"${type}\"${append}`;\n if (column.data.isOfCustomType || column instanceof EnumColumn) {\n result = `\"${currentSchema}\".${result}`;\n }\n return result;\n } else {\n return `\"${type.slice(j)}\".\"${type.slice(0, j)}\"${append}`;\n }\n};\n\n// https://github.com/romeerez/orchid-orm/issues/647\n// two clock_timestamp() statements aren't equal to each other, confusing SQL comparator.\n// adding 0.1ms to keep clock_timestamp() different from now(), so user can migrate from now() to clock_timestamp().\nconst freezeSqlClock = (sql: string) =>\n sql.replaceAll('clock_timestamp()', `'0.1ms'::interval + now()`);\n\nconst applyCompareSql = async (\n compareSql: CompareSql,\n adapter: AdapterBase,\n) => {\n if (compareSql.expressions.length) {\n const {\n rows: [results],\n } = await adapter.arrays(\n 'SELECT ' +\n compareSql.expressions\n .map(\n (x) =>\n `${freezeSqlClock(x.inDb)} = (${\n x.inCode && freezeSqlClock(x.inCode)\n })`,\n )\n .join(', '),\n compareSql.values,\n );\n\n for (let i = 0; i < results.length; i++) {\n if (!results[i]) {\n compareSql.expressions[i].change();\n }\n }\n }\n};\n\nconst applyCreateOrRenameTables = async (\n dbStructure: IntrospectedStructure,\n createTables: CodeTable[],\n dropTables: DbStructure.Table[],\n changeTables: ChangeTableData[],\n tableShapes: TableShapes,\n currentSchema: string,\n ast: RakeDbAst[],\n verifying: boolean | undefined,\n) => {\n for (const codeTable of createTables) {\n if (dropTables.length) {\n const i = await promptCreateOrRename(\n 'table',\n codeTable.table,\n dropTables.map((x) => x.name),\n verifying,\n );\n if (i) {\n const dbTable = dropTables[i - 1];\n dropTables.splice(i - 1, 1);\n\n ast.push({\n type: 'renameType',\n kind: 'TABLE',\n fromSchema: dbTable.schemaName,\n from: dbTable.name,\n toSchema: codeTable.q.schema ?? currentSchema,\n to: codeTable.table,\n });\n\n addChangeTable(\n dbStructure,\n changeTables,\n tableShapes,\n currentSchema,\n dbTable,\n codeTable,\n );\n\n continue;\n }\n }\n\n ast.push(createTableAst(currentSchema, codeTable));\n }\n};\n\nconst addChangeTable = (\n dbStructure: IntrospectedStructure,\n changeTables: ChangeTableData[],\n tableShapes: TableShapes,\n currentSchema: string,\n dbTable: DbStructure.Table,\n codeTable: CodeTable,\n) => {\n const shape = {};\n const schema = codeTable.q.schema ?? currentSchema;\n\n changeTables.push({\n codeTable: cloneCodeTableForChange(codeTable),\n dbTable,\n dbTableData: getDbStructureTableData(dbStructure, dbTable),\n schema,\n changeTableAst: {\n type: 'changeTable',\n schema,\n name: codeTable.table,\n shape: shape,\n add: {},\n drop: {},\n },\n pushedAst: false,\n changingColumns: {},\n delayedAst: [],\n });\n\n tableShapes[`${schema}.${codeTable.table}`] = shape;\n};\n\nconst cloneCodeTableForChange = (codeTable: CodeTable) => ({\n ...codeTable,\n // codeTable is a class instance and not all props can be cloned with `...`\n table: codeTable.table,\n shape: Object.fromEntries(\n Object.entries(codeTable.shape).map(([key, column]) => {\n const cloned = Object.create(column as Column);\n cloned.data = {\n ...cloned.data,\n checks: cloned.data.checks && [...cloned.data.checks],\n };\n\n return [key, cloned];\n }),\n ),\n});\n\nconst createTableAst = (\n currentSchema: string,\n table: CodeTable,\n): RakeDbAst.Table => {\n return {\n type: 'table',\n action: 'create',\n schema: table.q.schema === currentSchema ? undefined : table.q.schema,\n comment: table.internal.comment,\n name: table.table,\n shape: makeTableShape(table),\n noPrimaryKey: table.internal.noPrimaryKey ? 'ignore' : 'error',\n ...table.internal.tableData,\n };\n};\n\nconst makeTableShape = (table: CodeTable): ColumnsShape => {\n const shape: ColumnsShape = {};\n for (const key in table.shape) {\n const column = table.shape[key];\n if (!(column instanceof VirtualColumn)) {\n shape[key] = column as Column;\n }\n }\n return shape;\n};\n\nconst processTableChange = async (\n adapter: AdapterBase,\n structureToAstCtx: StructureToAstCtx,\n dbStructure: IntrospectedStructure,\n domainsMap: DbStructureDomainsMap,\n ast: RakeDbAst[],\n currentSchema: string,\n config: RakeDbConfig,\n changeTableData: ChangeTableData,\n compareSql: CompareSql,\n compareExpressions: CompareExpression[],\n typeCastsCache: TypeCastsCache,\n verifying: boolean | undefined,\n) => {\n await processColumns(\n adapter,\n config,\n structureToAstCtx,\n dbStructure,\n domainsMap,\n changeTableData,\n ast,\n currentSchema,\n compareSql,\n typeCastsCache,\n verifying,\n );\n\n processPrimaryKey(config, changeTableData);\n\n processIndexesAndExcludes(config, changeTableData, ast, compareExpressions);\n\n processChecks(ast, changeTableData, compareExpressions);\n\n const { changeTableAst } = changeTableData;\n if (\n Object.keys(changeTableAst.shape).length ||\n Object.keys(changeTableAst.add).length ||\n Object.keys(changeTableAst.drop).length\n ) {\n changeTableData.pushedAst = true;\n ast.push(changeTableAst);\n }\n\n if (changeTableData.delayedAst.length) {\n ast.push(...changeTableData.delayedAst);\n }\n};\n","import { DbStructure, IntrospectedStructure, RakeDbAst } from 'rake-db';\nimport { ComposeMigrationParams } from '../composeMigration';\nimport { deepCompare } from 'pqb';\nimport { promptCreateOrRename } from './generators.utils';\n\nconst defaults = {\n super: false,\n inherit: false,\n createRole: false,\n createDb: false,\n canLogin: false,\n replication: false,\n connLimit: -1,\n bypassRls: false,\n};\n\nexport const processRoles = async (\n ast: RakeDbAst[],\n dbStructure: IntrospectedStructure,\n { verifying, internal: { roles } }: ComposeMigrationParams,\n) => {\n if (!dbStructure.roles || !roles) return;\n\n const codeRoles = roles.map((role): DbStructure.Role => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { defaultPrivileges: _, ...roleWithoutPrivileges } = role;\n return {\n ...defaults,\n ...roleWithoutPrivileges,\n };\n });\n\n const found = new Set<string>();\n const dropRoles: DbStructure.Role[] = [];\n\n for (const dbRole of dbStructure.roles) {\n // Strip defaultPrivileges from dbRole for comparison\n const {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n defaultPrivileges: _,\n ...dbRoleWithoutPrivileges\n } = dbRole as DbStructure.Role & { defaultPrivileges?: unknown };\n\n const codeRole = codeRoles.find(\n (codeRole) => dbRole.name === codeRole.name,\n );\n if (codeRole) {\n found.add(dbRole.name);\n\n if (!deepCompare(dbRoleWithoutPrivileges, codeRole)) {\n ast.push({\n type: 'changeRole',\n name: dbRole.name,\n from: dbRoleWithoutPrivileges,\n to: codeRole,\n });\n }\n\n continue;\n }\n\n dropRoles.push(dbRole);\n }\n\n for (const codeRole of codeRoles) {\n if (found.has(codeRole.name)) continue;\n\n if (dropRoles.length) {\n const i = await promptCreateOrRename(\n 'table',\n codeRole.name,\n dropRoles.map((x) => x.name),\n verifying,\n );\n if (i) {\n const dbRole = dropRoles[i - 1];\n dropRoles.splice(i - 1, 1);\n\n ast.push(makeRenameOrChangeAst(dbRole, codeRole));\n\n continue;\n }\n }\n\n ast.push({\n type: 'role',\n action: 'create',\n ...codeRole,\n });\n }\n\n for (const dbRole of dropRoles) {\n ast.push({\n type: 'role',\n action: 'drop',\n ...dbRole,\n });\n }\n};\n\nconst makeRenameOrChangeAst = (\n dbRole: DbStructure.Role,\n codeRole: DbStructure.Role,\n): RakeDbAst.RenameRole | RakeDbAst.ChangeRole => {\n const { name: dbRoleName, ...dbRoleRest } = dbRole;\n const { name: codeRoleName, ...codeRoleRest } = codeRole;\n if (deepCompare(dbRoleRest, codeRoleRest) && dbRoleName !== codeRoleName) {\n return {\n type: 'renameRole',\n from: dbRoleName,\n to: codeRoleName,\n };\n } else {\n return {\n type: 'changeRole',\n name: dbRole.name,\n from: dbRole,\n to: codeRole,\n };\n }\n};\n","import { DbStructure, IntrospectedStructure, RakeDbAst } from 'rake-db';\nimport { ComposeMigrationParams } from '../composeMigration';\nimport { getSupportedDefaultPrivileges, DefaultPrivileges } from 'pqb';\n\nconst ALL_OBJECT_TYPES: DbStructure.DefaultPrivilegeObjectConfig['object'][] = [\n 'TABLES',\n 'SEQUENCES',\n 'FUNCTIONS',\n 'TYPES',\n 'SCHEMAS',\n 'LARGE_OBJECTS',\n];\n\n// Create object configs for all object types with given isGrantable flag\nconst createAllObjectConfigs = (\n isGrantable: boolean,\n schema: string | undefined,\n supportedPrivileges: DefaultPrivileges.SupportedDefaultPrivileges,\n): DbStructure.DefaultPrivilegeObjectConfig[] => {\n let types: DbStructure.DefaultPrivilegeObjectConfig['object'][];\n if (schema) {\n types = ALL_OBJECT_TYPES.filter(\n (t) => t !== 'SCHEMAS' && t !== 'LARGE_OBJECTS',\n );\n } else {\n types = ALL_OBJECT_TYPES.filter((t) => {\n if (t === 'LARGE_OBJECTS') {\n return supportedPrivileges.PRIVILEGES.LARGE_OBJECT !== undefined;\n }\n return true;\n });\n }\n return types.map((object) => ({\n object,\n privilegeConfigs: [{ privilege: 'ALL', isGrantable }],\n }));\n};\n\n// Map object type to the corresponding grant/revoke key\nconst objectTypeToKey: Record<\n DbStructure.DefaultPrivilegeObjectConfig['object'],\n 'tables' | 'sequences' | 'functions' | 'types' | 'schemas' | 'largeObjects'\n> = {\n TABLES: 'tables',\n SEQUENCES: 'sequences',\n FUNCTIONS: 'functions',\n TYPES: 'types',\n SCHEMAS: 'schemas',\n LARGE_OBJECTS: 'largeObjects',\n};\n\n// Split privilege configs into regular and grantable privilege names\nconst splitPrivilegeConfigs = (\n configs: DbStructure.DefaultPrivilegeConfig[],\n): { regular: string[]; grantable: string[] } => {\n const regular: string[] = [];\n const grantable: string[] = [];\n for (const p of configs) {\n if (p.isGrantable) {\n grantable.push(p.privilege);\n } else {\n regular.push(p.privilege);\n }\n }\n return { regular, grantable };\n};\n\n// Create a setting object from regular and grantable privilege arrays\nconst createPrivilegeSetting = (\n regular: string[],\n grantable: string[],\n): { privileges?: string[]; grantablePrivileges?: string[] } => {\n const setting: { privileges?: string[]; grantablePrivileges?: string[] } = {};\n if (regular.length) setting.privileges = regular;\n if (grantable.length) setting.grantablePrivileges = grantable;\n return setting;\n};\n\n// Collapse privilege configs into ALL if all expected privileges are present.\n// Mutates newPrivilegeConfigs by pushing the result.\nconst collapsePrivileges = (\n privs: DbStructure.DefaultPrivilegeConfig[],\n newPrivilegeConfigs: DbStructure.DefaultPrivilegeConfig[],\n expectedPrivs: string[],\n isGrantable: boolean,\n): void => {\n const hasAll = privs.some((p) => p.privilege === 'ALL');\n const allPresent =\n hasAll ||\n (privs.length > 0 &&\n privs.length === expectedPrivs.length &&\n expectedPrivs.every((priv) => privs.some((p) => p.privilege === priv)));\n\n if (allPresent) {\n newPrivilegeConfigs.push({ privilege: 'ALL', isGrantable });\n } else if (privs.length > 0) {\n newPrivilegeConfigs.push(...privs);\n }\n};\n\n// Collapse privileges into ALL when all non-ALL privileges are present.\n// Returns a new DefaultPrivilege with collapsed privileges.\nconst collapsePrivilegesToAll = (\n privilege: DbStructure.DefaultPrivilege,\n objectTypeToAllPrivileges: Record<\n DbStructure.DefaultPrivilegeObjectConfig['object'],\n readonly string[]\n >,\n): DbStructure.DefaultPrivilege => {\n const collapsedObjectConfigs = privilege.objectConfigs.map(\n (objConfig): DbStructure.DefaultPrivilegeObjectConfig => {\n const allPrivileges = objectTypeToAllPrivileges[objConfig.object];\n const expectedPrivs = allPrivileges.filter((p) => p !== 'ALL');\n\n // Group privilege configs by isGrantable using imperative loop\n const regularPrivs: DbStructure.DefaultPrivilegeConfig[] = [];\n const grantablePrivs: DbStructure.DefaultPrivilegeConfig[] = [];\n for (const p of objConfig.privilegeConfigs) {\n if (p.isGrantable) {\n grantablePrivs.push(p);\n } else {\n regularPrivs.push(p);\n }\n }\n\n const newPrivilegeConfigs: DbStructure.DefaultPrivilegeConfig[] = [];\n\n // Collapse regular privileges to ALL if all are present\n collapsePrivileges(\n regularPrivs,\n newPrivilegeConfigs,\n expectedPrivs,\n false,\n );\n\n // Collapse grantable privileges to ALL if all are present\n collapsePrivileges(\n grantablePrivs,\n newPrivilegeConfigs,\n expectedPrivs,\n true,\n );\n\n return {\n object: objConfig.object,\n privilegeConfigs: newPrivilegeConfigs,\n };\n },\n );\n\n return {\n owner: privilege.owner,\n grantee: privilege.grantee,\n schema: privilege.schema,\n objectConfigs: collapsedObjectConfigs,\n };\n};\n\n// Check if two privilege configs match, considering ALL expansion\nconst privilegeConfigsMatch = (\n a: DbStructure.DefaultPrivilegeConfig,\n b: DbStructure.DefaultPrivilegeConfig,\n objectType: DbStructure.DefaultPrivilegeObjectConfig['object'],\n objectTypeToAllPrivileges: Record<\n DbStructure.DefaultPrivilegeObjectConfig['object'],\n readonly string[]\n >,\n): boolean => {\n // Exact match\n if (a.privilege === b.privilege && a.isGrantable === b.isGrantable) {\n return true;\n }\n\n const allPrivileges = objectTypeToAllPrivileges[objectType];\n const expectedPrivs = allPrivileges.filter((p) => p !== 'ALL');\n\n // Check if a is ALL and b has all expected privileges (or vice versa)\n if (a.privilege === 'ALL' && a.isGrantable === b.isGrantable) {\n // Check if b has all expected privileges\n return expectedPrivs.includes(b.privilege);\n }\n if (b.privilege === 'ALL' && a.isGrantable === b.isGrantable) {\n // Check if a has all expected privileges\n return expectedPrivs.includes(a.privilege);\n }\n\n return false;\n};\n\n// Normalize role name by stripping quotes that may come from database introspection\nconst normalizeRoleName = (name: string): string => {\n if (name.startsWith('\"') && name.endsWith('\"')) {\n return name.slice(1, -1);\n }\n return name;\n};\n\n// Process privilege config (tables, sequences, functions, types) into object configs\nconst processPrivilegeConfig = (\n config: { privileges?: string[]; grantablePrivileges?: string[] } | undefined,\n objectType: DbStructure.DefaultPrivilegeObjectConfig['object'],\n): DbStructure.DefaultPrivilegeObjectConfig | undefined => {\n if (!config) return;\n\n const privilegeConfigs: DbStructure.DefaultPrivilegeConfig[] = [];\n if (config.privileges) {\n for (const p of config.privileges) {\n privilegeConfigs.push({ privilege: p, isGrantable: false });\n }\n }\n if (config.grantablePrivileges) {\n for (const p of config.grantablePrivileges) {\n privilegeConfigs.push({ privilege: p, isGrantable: true });\n }\n }\n if (privilegeConfigs.length) {\n return { object: objectType, privilegeConfigs };\n }\n return;\n};\n\n// Check if a default privilege object config has any privileges set\nconst hasAnyPrivilege = (\n obj: RakeDbAst.DefaultPrivilegeObjectConfig | undefined,\n): boolean => {\n if (!obj) return false;\n for (const key of ALL_OBJECT_TYPES) {\n const setting = obj[objectTypeToKey[key]];\n if (setting?.privileges?.length || setting?.grantablePrivileges?.length) {\n return true;\n }\n }\n return false;\n};\n\nexport const processDefaultPrivileges = (\n ast: RakeDbAst[],\n dbStructure: IntrospectedStructure,\n { internal: { roles } }: ComposeMigrationParams,\n) => {\n if (!dbStructure.defaultPrivileges || !roles) return;\n\n const supportedPrivileges = getSupportedDefaultPrivileges(\n dbStructure.version,\n );\n\n const objectTypeToAllPrivileges: Record<\n DbStructure.DefaultPrivilegeObjectConfig['object'],\n readonly string[]\n > = {} as Record<\n DbStructure.DefaultPrivilegeObjectConfig['object'],\n readonly string[]\n >;\n\n objectTypeToAllPrivileges.TABLES = supportedPrivileges.PRIVILEGES.TABLE;\n objectTypeToAllPrivileges.SEQUENCES = supportedPrivileges.PRIVILEGES.SEQUENCE;\n objectTypeToAllPrivileges.FUNCTIONS = supportedPrivileges.PRIVILEGES.FUNCTION;\n objectTypeToAllPrivileges.TYPES = supportedPrivileges.PRIVILEGES.TYPE;\n objectTypeToAllPrivileges.SCHEMAS = supportedPrivileges.PRIVILEGES.SCHEMA;\n\n if (supportedPrivileges.PRIVILEGES.LARGE_OBJECT) {\n objectTypeToAllPrivileges.LARGE_OBJECTS =\n supportedPrivileges.PRIVILEGES.LARGE_OBJECT;\n }\n\n // Collect default privileges from code roles\n const codePrivileges: Map<string, DbStructure.DefaultPrivilege> = new Map();\n\n for (const role of roles) {\n if (!role.defaultPrivileges) continue;\n\n for (const privilege of role.defaultPrivileges) {\n const key = `${role.name}.${privilege.schema}`;\n\n const objectConfigs: DbStructure.DefaultPrivilegeObjectConfig[] = [];\n\n // Start with allGrantable or all base config\n if (privilege.allGrantable) {\n objectConfigs.push(\n ...createAllObjectConfigs(\n true,\n privilege.schema,\n supportedPrivileges,\n ),\n );\n } else if (privilege.all) {\n objectConfigs.push(\n ...createAllObjectConfigs(\n false,\n privilege.schema,\n supportedPrivileges,\n ),\n );\n }\n\n for (const objectType of ALL_OBJECT_TYPES) {\n if (\n privilege.schema &&\n (objectType === 'SCHEMAS' || objectType === 'LARGE_OBJECTS')\n ) {\n continue;\n }\n if (\n objectType === 'LARGE_OBJECTS' &&\n !supportedPrivileges.PRIVILEGES.LARGE_OBJECT\n ) {\n continue;\n }\n const key = objectTypeToKey[objectType];\n if (key in privilege) {\n const config = privilege[key as keyof typeof privilege];\n const processed = processPrivilegeConfig(config as never, objectType);\n if (processed) {\n const existingIndex = objectConfigs.findIndex(\n (o) => o.object === objectType,\n );\n if (existingIndex >= 0) {\n objectConfigs[existingIndex] = processed;\n } else {\n objectConfigs.push(processed);\n }\n }\n }\n }\n\n if (objectConfigs.length) {\n // Store code privileges as-is (don't collapse - preserve user intent)\n codePrivileges.set(key, {\n owner: undefined,\n grantee: role.name,\n schema: privilege.schema,\n objectConfigs,\n });\n }\n }\n }\n\n // Compare with database privileges and generate AST items\n const found = new Set<string>();\n\n for (const dbPrivilege of dbStructure.defaultPrivileges) {\n // Normalize grantee to handle quotes from database\n const grantee = normalizeRoleName(dbPrivilege.grantee);\n if (grantee === 'postgres') continue;\n\n const key = `${grantee}.${dbPrivilege.schema}`;\n const codePrivilege = codePrivileges.get(key);\n\n if (codePrivilege) {\n found.add(key);\n\n const grant: RakeDbAst.DefaultPrivilege['grant'] = {};\n const revoke: RakeDbAst.DefaultPrivilege['revoke'] = {};\n\n // Compare object configs for each object type\n for (const objectType of ALL_OBJECT_TYPES) {\n if (\n objectType === 'LARGE_OBJECTS' &&\n !supportedPrivileges.PRIVILEGES.LARGE_OBJECT\n ) {\n continue;\n }\n\n const dbObj = dbPrivilege.objectConfigs.find(\n (o) => o.object === objectType,\n );\n const codeObj = codePrivilege.objectConfigs.find(\n (o) => o.object === objectType,\n );\n\n const dbPrivs = dbObj?.privilegeConfigs ?? [];\n const codePrivs = codeObj?.privilegeConfigs ?? [];\n\n // Collapse db privileges for comparison (but keep original for output)\n const collapsedDbPrivilege: DbStructure.DefaultPrivilege = {\n owner: dbPrivilege.owner,\n grantee: dbPrivilege.grantee,\n schema: dbPrivilege.schema,\n objectConfigs: [{ object: objectType, privilegeConfigs: dbPrivs }],\n };\n const collapsedDbObj = collapsePrivilegesToAll(\n collapsedDbPrivilege,\n objectTypeToAllPrivileges,\n ).objectConfigs[0];\n const collapsedDbPrivs = collapsedDbObj?.privilegeConfigs ?? [];\n\n // Find privileges to grant (in code but not in collapsed db)\n const toGrant = codePrivs.filter(\n (cp) =>\n !collapsedDbPrivs.some((dp) =>\n privilegeConfigsMatch(\n cp,\n dp,\n objectType,\n objectTypeToAllPrivileges,\n ),\n ),\n );\n\n // Find privileges to revoke (in db but not in code)\n // Use original dbPrivs for output, but collapsed for comparison\n const toRevoke = dbPrivs.filter(\n (dp) =>\n !codePrivs.some((cp) =>\n privilegeConfigsMatch(\n cp,\n dp,\n objectType,\n objectTypeToAllPrivileges,\n ),\n ),\n );\n\n if (toGrant.length) {\n const { regular, grantable } = splitPrivilegeConfigs(toGrant);\n const setting = createPrivilegeSetting(regular, grantable);\n if (setting.privileges || setting.grantablePrivileges) {\n grant[objectTypeToKey[objectType]] = setting;\n }\n }\n\n if (toRevoke.length) {\n const { regular, grantable } = splitPrivilegeConfigs(toRevoke);\n const setting = createPrivilegeSetting(regular, grantable);\n if (setting.privileges || setting.grantablePrivileges) {\n revoke[objectTypeToKey[objectType]] = setting;\n }\n }\n }\n\n const hasGrant = hasAnyPrivilege(grant);\n const hasRevoke = hasAnyPrivilege(revoke);\n\n if (hasGrant || hasRevoke) {\n ast.push({\n type: 'defaultPrivilege',\n grantee: grantee,\n schema: dbPrivilege.schema,\n grant: hasGrant ? grant : undefined,\n revoke: hasRevoke ? revoke : undefined,\n });\n }\n } else {\n // Revoke all existing privileges\n const revoke: RakeDbAst.DefaultPrivilege['revoke'] = {};\n\n for (const obj of dbPrivilege.objectConfigs) {\n const { regular, grantable } = splitPrivilegeConfigs(\n obj.privilegeConfigs,\n );\n const setting = createPrivilegeSetting(regular, grantable);\n if (setting.privileges || setting.grantablePrivileges) {\n revoke[objectTypeToKey[obj.object]] = setting;\n }\n }\n\n if (hasAnyPrivilege(revoke)) {\n ast.push({\n type: 'defaultPrivilege',\n grantee: grantee,\n schema: dbPrivilege.schema,\n revoke,\n });\n }\n }\n }\n\n // Grant privileges that are in code but not in db\n for (const [key, codePrivilege] of codePrivileges) {\n if (found.has(key)) continue;\n\n const grant: RakeDbAst.DefaultPrivilege['grant'] = {};\n\n for (const obj of codePrivilege.objectConfigs) {\n const { regular, grantable } = splitPrivilegeConfigs(\n obj.privilegeConfigs,\n );\n const setting = createPrivilegeSetting(regular, grantable);\n if (setting.privileges || setting.grantablePrivileges) {\n grant[objectTypeToKey[obj.object]] = setting;\n }\n }\n\n if (hasAnyPrivilege(grant)) {\n ast.push({\n type: 'defaultPrivilege',\n grantee: codePrivilege.grantee,\n schema: codePrivilege.schema,\n grant,\n });\n }\n }\n};\n","import { QueryInternal, AdapterBase } from 'pqb';\nimport {\n RakeDbAst,\n IntrospectedStructure,\n makeDomainsMap,\n StructureToAstCtx,\n astToMigration,\n} from 'rake-db';\nimport { processSchemas } from './generators/schemas.generator';\nimport { processExtensions } from './generators/extensions.generator';\nimport { processDomains } from './generators/domains.generator';\nimport { processEnums } from './generators/enums.generator';\nimport { processTables } from './generators/tables.generator';\nimport { CodeItems } from './generate';\nimport { RakeDbConfig } from 'rake-db';\nimport { processRoles } from './generators/roles.generator';\nimport { processDefaultPrivileges } from './generators/default-privilege.generator';\n\nexport interface ComposeMigrationParams {\n structureToAstCtx: StructureToAstCtx;\n codeItems: CodeItems;\n currentSchema: string;\n internal: QueryInternal;\n verifying?: boolean;\n}\n\n/**\n * This is needed to compare SQLs of table expressions.\n * Need to exclude table columns of pending types, such as enums or domains,\n * that aren't created yet from the SQL comparison.\n * Otherwise, the comparison fails because of the unknown types.\n */\nexport class PendingDbTypes {\n set = new Set<string>();\n add(schemaName: string | undefined = 'public', name: string) {\n this.set.add(`\"${schemaName}\".\"${name}\"`);\n }\n}\n\nexport const composeMigration = async (\n adapter: AdapterBase,\n config: RakeDbConfig,\n ast: RakeDbAst[],\n dbStructure: IntrospectedStructure,\n params: ComposeMigrationParams,\n): Promise<string | undefined> => {\n const { structureToAstCtx, currentSchema } = params;\n\n await processRoles(ast, dbStructure, params);\n\n processDefaultPrivileges(ast, dbStructure, params);\n\n const domainsMap = makeDomainsMap(structureToAstCtx, dbStructure);\n\n await processSchemas(ast, dbStructure, params);\n processExtensions(ast, dbStructure, params);\n\n const pendingDbTypes = new PendingDbTypes();\n\n await processDomains(\n ast,\n adapter,\n domainsMap,\n dbStructure,\n params,\n pendingDbTypes,\n );\n await processEnums(ast, dbStructure, params, pendingDbTypes);\n\n await processTables(\n ast,\n domainsMap,\n adapter,\n dbStructure,\n config,\n params,\n pendingDbTypes,\n );\n\n return astToMigration(currentSchema, config, ast);\n};\n","import { AdapterBase } from 'pqb';\nimport {\n createMigrationInterface,\n ChangeCallback,\n introspectDbSchema,\n RakeDbConfig,\n} from 'rake-db';\nimport { composeMigration, ComposeMigrationParams } from './composeMigration';\nimport { AbortSignal } from './generate';\n\nconst rollbackErr = new Error('Rollback');\n\nexport const verifyMigration = async (\n adapter: AdapterBase,\n config: RakeDbConfig,\n migrationCode: string,\n generateMigrationParams: ComposeMigrationParams,\n roles?: { whereSql?: string },\n defaultPrivileges?: { loadDefaultPrivileges?: boolean },\n): Promise<string | false | undefined> => {\n const migrationFn = new Function('change', migrationCode);\n\n let code: string | false | undefined;\n\n try {\n await adapter.transaction(async (trx) => {\n const changeFns: ChangeCallback<unknown>[] = [];\n migrationFn((changeCb: ChangeCallback<unknown>) => {\n changeFns.push(changeCb);\n });\n\n const { log } = config;\n config.log = false;\n\n const db = createMigrationInterface(trx, true, config);\n\n config.log = log;\n\n for (const changeFn of changeFns) {\n await changeFn(db, true);\n }\n\n const dbStructure = await introspectDbSchema(trx, {\n roles,\n loadDefaultPrivileges: defaultPrivileges?.loadDefaultPrivileges,\n });\n generateMigrationParams.verifying = true;\n\n try {\n code = await composeMigration(\n trx,\n config,\n [],\n dbStructure,\n generateMigrationParams,\n );\n } catch (err) {\n if (err instanceof AbortSignal) {\n code = false;\n throw rollbackErr;\n }\n throw err;\n }\n\n throw rollbackErr;\n });\n } catch (err) {\n if (err !== rollbackErr) {\n throw err;\n }\n }\n\n return code;\n};\n","import { RakeDbConfig, RakeDbAst, getSchemaAndTableFromName } from 'rake-db';\nimport {\n exhaustive,\n pluralize,\n addCode,\n Code,\n codeToString,\n ColumnToCodeCtx,\n toArray,\n toCamelCase,\n colors,\n} from 'pqb';\nimport { getColumnDbType } from './generators/columns.generator';\nimport { fnOrTableToString } from './generators/foreignKeys.generator';\n\nexport const report = (\n ast: RakeDbAst[],\n config: RakeDbConfig,\n currentSchema: string,\n) => {\n if (!config.logger) return;\n\n const code: Code[] = [];\n\n let green, red, yellow, pale;\n if (typeof config.log === 'object' && config.log.colors === false) {\n green = red = yellow = pale = (s: string) => s;\n } else {\n ({ green, red, yellow, pale } = colors);\n }\n\n for (const a of ast) {\n switch (a.type) {\n case 'table': {\n let hasPrimaryKey = !!a.primaryKey;\n const counters = {\n column: 0,\n index: a.indexes?.length ?? 0,\n exclude: a.excludes?.length ?? 0,\n 'foreign key':\n a.constraints?.reduce<number>(\n (sum, c) => (c.references ? sum + 1 : sum),\n 0,\n ) ?? 0,\n check:\n a.constraints?.reduce<number>(\n (sum, c) => (c.check ? sum + 1 : sum),\n 0,\n ) ?? 0,\n };\n for (const key in a.shape) {\n counters.column++;\n\n const column = a.shape[key];\n if (column.data.primaryKey) {\n hasPrimaryKey = true;\n }\n\n if (column.data.indexes) {\n counters.index += column.data.indexes.length;\n }\n\n if (column.data.excludes) {\n counters.exclude += column.data.excludes.length;\n }\n\n if (column.data.foreignKeys) {\n counters['foreign key'] += column.data.foreignKeys.length;\n }\n\n if (column.data.checks) {\n counters.check += column.data.checks.length;\n }\n }\n\n const summary: string[] = [];\n\n for (const key in counters) {\n const value = counters[key as keyof typeof counters];\n if (value || key === 'column') {\n summary.push(\n `${value} ${pluralize(key, value, key === 'index' ? 'es' : 's')}`,\n );\n }\n }\n\n if (!hasPrimaryKey) {\n summary.push('no primary key');\n }\n\n code.push(\n `${\n a.action === 'create'\n ? green('+ create table')\n : red('- drop table')\n } ${dbItemName(a, currentSchema)} (${summary.join(', ')})`,\n );\n break;\n }\n case 'changeTable': {\n const inner: Code[] = [];\n\n const toCodeCtx: ColumnToCodeCtx = {\n t: 't',\n table: a.name,\n currentSchema,\n migration: true,\n snakeCase: config.snakeCase,\n };\n\n for (const key in a.shape) {\n const changes = toArray(a.shape[key]);\n for (const change of changes) {\n if (change.type === 'add' || change.type === 'drop') {\n const column = change.item;\n const { primaryKey, indexes, excludes, foreignKeys, checks } =\n column.data;\n\n inner.push(\n `${\n change.type === 'add'\n ? green('+ add column')\n : red('- drop column')\n } ${key} ${\n column.data.alias ?? getColumnDbType(column, currentSchema)\n }${column.data.isNullable ? ' nullable' : ''}${\n primaryKey ? ' primary key' : ''\n }${\n foreignKeys\n ? ` references ${foreignKeys\n .map((fk) => {\n return `${fnOrTableToString(\n fk.fnOrTable,\n )}(${fk.foreignColumns.join(', ')})`;\n })\n .join(', ')}`\n : ''\n }${\n indexes?.length\n ? indexes.length === 1\n ? ', has index'\n : `, has ${indexes.length} indexes`\n : ''\n }${\n excludes?.length\n ? excludes.length === 1\n ? ', has exclude'\n : `, has ${excludes.length} excludes`\n : ''\n }${\n checks?.length\n ? `, checks ${checks\n .map((check) => check.sql.toSQL({ values: [] }))\n .join(', ')}`\n : ''\n }`,\n );\n } else if (change.type === 'change') {\n let name = change.from.column?.data.name ?? key;\n if (config.snakeCase) name = toCamelCase(name);\n\n const changes: Code[] = [];\n inner.push(`${yellow('~ change column')} ${name}:`, changes);\n changes.push(`${yellow('from')}: `);\n\n const fromCode = change.from.column?.toCode(toCodeCtx, key);\n if (fromCode) {\n for (const code of fromCode) {\n addCode(changes, code);\n }\n }\n\n changes.push(` ${yellow('to')}: `);\n\n const toCode = change.to.column?.toCode(toCodeCtx, key);\n if (toCode) {\n for (const code of toCode) {\n addCode(changes, code);\n }\n }\n } else if (change.type === 'rename') {\n inner.push(\n `${yellow('~ rename column')} ${\n config.snakeCase ? toCamelCase(key) : key\n } ${yellow('=>')} ${change.name}`,\n );\n } else {\n exhaustive(change.type);\n }\n }\n }\n\n if (a.drop.primaryKey) {\n inner.push(\n `${red(`- drop primary key`)} on (${a.drop.primaryKey.columns.join(\n ', ',\n )})`,\n );\n }\n\n if (a.drop.indexes) {\n for (const index of a.drop.indexes) {\n inner.push(\n `${red(\n `- drop${index.options.unique ? ' unique' : ''} index`,\n )} on (${index.columns\n .map((c) => ('column' in c ? c.column : c.expression))\n .join(', ')})`,\n );\n }\n }\n\n if (a.drop.excludes) {\n for (const exclude of a.drop.excludes) {\n inner.push(\n `${red(`- drop exclude`)} on (${exclude.columns\n .map((c) => ('column' in c ? c.column : c.expression))\n .join(', ')})`,\n );\n }\n }\n\n if (a.drop.constraints) {\n for (const { references } of a.drop.constraints) {\n if (!references) continue;\n\n const [schema, name] = getSchemaAndTableFromName(\n currentSchema,\n references.fnOrTable as string,\n );\n\n inner.push(\n `${red(`- drop foreign key`)} on (${references.columns.join(\n ', ',\n )}) to ${dbItemName(\n {\n schema,\n name,\n },\n currentSchema,\n )}(${references.foreignColumns.join(', ')})`,\n );\n }\n\n for (const { check } of a.drop.constraints) {\n if (!check) continue;\n\n inner.push(`${red(`- drop check`)} ${check.toSQL({ values: [] })}`);\n }\n }\n\n if (a.add.primaryKey) {\n inner.push(\n `${green(`+ add primary key`)} on (${a.add.primaryKey.columns.join(\n ', ',\n )})`,\n );\n }\n\n if (a.add.indexes) {\n for (const index of a.add.indexes) {\n inner.push(\n `${green(\n `+ add${index.options.unique ? ' unique' : ''} index`,\n )} on (${index.columns\n .map((c) => ('column' in c ? c.column : c.expression))\n .join(', ')})`,\n );\n }\n }\n\n if (a.add.excludes) {\n for (const exclude of a.add.excludes) {\n inner.push(\n `${green(`+ add exclude`)} on (${exclude.columns\n .map((c) => ('column' in c ? c.column : c.expression))\n .join(', ')})`,\n );\n }\n }\n\n if (a.add.constraints) {\n for (const { references } of a.add.constraints) {\n if (!references) continue;\n\n inner.push(\n `${green(`+ add foreign key`)} on (${references.columns.join(\n ', ',\n )}) to ${\n references.fnOrTable as string\n }(${references.foreignColumns.join(', ')})`,\n );\n }\n\n for (const { check } of a.add.constraints) {\n if (!check) continue;\n\n inner.push(\n `${green(`+ add check`)} ${check.toSQL({ values: [] })}`,\n );\n }\n }\n\n code.push(\n `${yellow('~ change table')} ${dbItemName(a, currentSchema)}${\n inner.length ? ':' : ''\n }`,\n );\n\n if (inner.length) {\n code.push(inner);\n }\n\n break;\n }\n case 'schema': {\n code.push(\n `${\n a.action === 'create'\n ? green('+ create schema')\n : red('- drop schema')\n } ${a.name}`,\n );\n break;\n }\n case 'renameSchema': {\n code.push(\n `${yellow('~ rename schema')} ${a.from} ${yellow('=>')} ${a.to}`,\n );\n break;\n }\n case 'renameType': {\n code.push(\n `${yellow(\n `~ ${\n a.fromSchema !== a.toSchema\n ? a.from !== a.to\n ? 'change schema and rename'\n : 'change schema of'\n : 'rename'\n } ${a.kind.toLowerCase()}`,\n )} ${dbItemName(\n {\n schema: a.fromSchema,\n name: a.from,\n },\n currentSchema,\n )} ${yellow('=>')} ${dbItemName(\n {\n schema: a.toSchema,\n name: a.to,\n },\n currentSchema,\n )}`,\n );\n break;\n }\n case 'extension': {\n code.push(\n `${\n a.action === 'create'\n ? green('+ create extension')\n : red('- drop extension')\n } ${dbItemName(a, currentSchema)}${\n a.version ? ` ${pale(a.version)}` : ''\n }`,\n );\n break;\n }\n case 'enum': {\n code.push(\n `${\n a.action === 'create' ? green('+ create enum') : red('- drop enum')\n } ${dbItemName(a, currentSchema)}: (${a.values.join(', ')})`,\n );\n break;\n }\n case 'enumValues': {\n code.push(\n `${\n a.action === 'add'\n ? green('+ add values to enum')\n : red('- remove values from enum')\n } ${dbItemName(a, currentSchema)}: ${a.values.join(', ')}`,\n );\n break;\n }\n case 'changeEnumValues': {\n if (a.fromValues) {\n code.push(\n `${red('- remove values from enum')} ${dbItemName(\n a,\n currentSchema,\n )}: ${a.fromValues.join(', ')}`,\n );\n }\n if (a.toValues) {\n code.push(\n `${green('+ add values to enum')} ${dbItemName(\n a,\n currentSchema,\n )}: ${a.toValues.join(', ')}`,\n );\n }\n break;\n }\n case 'domain': {\n code.push(\n `${\n a.action === 'create'\n ? green('+ create domain')\n : red('- drop domain')\n } ${dbItemName(a, currentSchema)}`,\n );\n break;\n }\n case 'view':\n case 'collation':\n case 'renameEnumValues':\n case 'constraint':\n break;\n case 'renameTableItem': {\n code.push(\n `${yellow(`~ rename ${a.kind.toLowerCase()}`)} on table ${dbItemName(\n { schema: a.tableSchema, name: a.tableName },\n currentSchema,\n )}: ${a.from} ${yellow('=>')} ${a.to}`,\n );\n break;\n }\n case 'role':\n code.push(\n `${\n a.action === 'create' ? green('+ create role') : red('- drop role')\n } ${a.name}`,\n );\n break;\n case 'renameRole':\n case 'changeRole': {\n if (a.type === 'renameRole') {\n code.push(\n `${yellow('~ rename role')} ${a.from} ${yellow('=>')} ${a.to}`,\n );\n } else {\n code.push(`${yellow('~ change role')} ${a.name}`);\n }\n break;\n }\n case 'defaultPrivilege': {\n // Map privilege names for display (e.g., 'ALL' -> 'ALL PRIVILEGES')\n const mapPrivilege = (p: string) =>\n p === 'ALL' ? 'ALL PRIVILEGES' : p;\n\n const schema = a.schema\n ? ` in schema ${colors.pale(a.schema)}`\n : ` ${colors.pale('in all schemas')}`;\n\n // Report grant and revoke of default privileges\n const parts: string[] = [];\n if (a.grant) {\n for (const [objType, config] of Object.entries(a.grant)) {\n if (!config) continue;\n\n const type = objType.replace(/([A-Z])/g, ' $1').toLowerCase();\n\n // Report regular privileges separately\n if (config.privileges?.length) {\n parts.push(\n `${green('+ grant default privileges')} ${config.privileges\n .map(mapPrivilege)\n .join(', ')} on ${type} to ${a.grantee}${schema}`,\n );\n }\n\n // Report grantable privileges separately with \"with grant option\"\n if (config.grantablePrivileges?.length) {\n parts.push(\n `${green(\n '+ grant default privileges',\n )} ${config.grantablePrivileges\n .map(mapPrivilege)\n .join(', ')} on ${type} with grant option to ${\n a.grantee\n }${schema}`,\n );\n }\n }\n }\n if (a.revoke) {\n for (const [objType, config] of Object.entries(a.revoke)) {\n if (!config) continue;\n\n const type = objType.replace(/([A-Z])/g, ' $1').toLowerCase();\n\n // Report regular privileges separately\n if (config.privileges?.length) {\n parts.push(\n `${red('- revoke default privileges')} ${config.privileges\n .map(mapPrivilege)\n .join(', ')} on ${type} from ${a.grantee}${schema}`,\n );\n }\n\n // Report grantable privileges separately with \"with grant option\"\n if (config.grantablePrivileges?.length) {\n parts.push(\n `${red(\n '- revoke default privileges',\n )} ${config.grantablePrivileges\n .map(mapPrivilege)\n .join(', ')} on ${type} with grant option from ${\n a.grantee\n }${schema}`,\n );\n }\n }\n }\n if (parts.length) {\n code.push(parts.join('\\n'));\n }\n break;\n }\n default:\n exhaustive(a);\n }\n }\n\n const result = codeToString(code, '', ' ');\n config.logger.log(result);\n};\n\nconst dbItemName = (\n { schema, name }: { schema?: string; name: string },\n currentSchema: string,\n) => {\n return schema && schema !== currentSchema ? `${schema}.${name}` : name;\n};\n","import {\n AdapterBase,\n PickQueryShape,\n toCamelCase,\n ArrayColumn,\n ColumnsShape,\n Column,\n defaultSchemaConfig,\n DomainColumn,\n PickQueryInternal,\n Query,\n QueryInternal,\n UnknownColumn,\n getQuerySchema,\n emptyObject,\n} from 'pqb';\nimport {\n concatSchemaAndName,\n getDbVersion,\n getSchemaAndTableFromName,\n introspectDbSchema,\n IntrospectedStructure,\n makeFileVersion,\n makeStructureToAstCtx,\n migrate,\n migrateAndClose,\n RakeDbAst,\n RakeDbConfig,\n writeMigrationFile,\n} from 'rake-db';\nimport { EnumItem } from './generators/enums.generator';\nimport { CodeDomain } from './generators/domains.generator';\nimport { composeMigration, ComposeMigrationParams } from './composeMigration';\nimport { verifyMigration } from './verify-migration';\nimport { report } from './reportGeneratedMigration';\nimport path from 'node:path';\nimport { pathToFileURL } from 'url';\n\nexport interface CodeTable extends PickQueryShape, PickQueryInternal {\n table: string;\n q: CodeTableQueryData;\n}\n\nexport interface CodeTableQueryData {\n schema?: string;\n}\n\nexport interface CodeItems {\n schemas: Set<string>;\n enums: Map<string, EnumItem>;\n tables: CodeTable[];\n domains: CodeDomain[];\n}\n\ninterface AfterPull {\n adapter: AdapterBase;\n version: string;\n}\n\nexport interface DbInstance {\n $qb: Query;\n}\n\nexport class AbortSignal extends Error {}\n\nexport const generate = async (\n adapters: AdapterBase[],\n config: RakeDbConfig,\n args: string[],\n afterPull?: AfterPull,\n): Promise<void> => {\n let { dbPath } = config;\n if (!dbPath || !config.baseTable) throw invalidConfig(config);\n if (!adapters.length) throw new Error(`Database options must not be empty`);\n\n if (!dbPath.endsWith('.ts')) dbPath += '.ts';\n\n let migrationName = args[0] ?? 'generated';\n let up: boolean;\n if (migrationName === 'up') {\n up = true;\n migrationName = 'generated';\n } else {\n up = args[1] === 'up';\n }\n\n if (afterPull) {\n adapters = [afterPull.adapter];\n }\n\n const db = await getDbFromConfig(config, dbPath);\n const { columnTypes, internal } = db.$qb;\n\n const rolesDbStructureParam = internal.roles\n ? internal.managedRolesSql\n ? { whereSql: internal.managedRolesSql }\n : emptyObject\n : undefined;\n\n const { dbStructure } = await migrateAndPullStructures(\n adapters,\n config,\n rolesDbStructureParam,\n internal.roles ? { loadDefaultPrivileges: true } : undefined,\n afterPull,\n );\n\n const [adapter] = adapters;\n const adapterSchema = adapter.getSchema();\n const currentSchema =\n (typeof adapterSchema === 'function' ? adapterSchema() : adapterSchema) ??\n 'public';\n\n const codeItems = await getActualItems(\n db,\n currentSchema,\n internal,\n columnTypes,\n );\n\n const structureToAstCtx = makeStructureToAstCtx(config, currentSchema);\n\n const generateMigrationParams: ComposeMigrationParams = {\n structureToAstCtx,\n codeItems,\n currentSchema,\n internal,\n };\n\n const ast: RakeDbAst[] = [];\n\n let migrationCode;\n try {\n migrationCode = await composeMigration(\n adapter,\n config,\n ast,\n dbStructure,\n generateMigrationParams,\n );\n } catch (err) {\n if (err instanceof AbortSignal) {\n await closeAdapters(adapters);\n return;\n }\n throw err;\n }\n\n if (migrationCode && !afterPull) {\n const result = await verifyMigration(\n adapter,\n config,\n migrationCode,\n generateMigrationParams,\n rolesDbStructureParam,\n internal.roles ? { loadDefaultPrivileges: true } : undefined,\n );\n\n if (result !== undefined) {\n throw new Error(\n `Failed to verify generated migration: some of database changes were not applied properly. This is a bug, please open an issue, attach the following migration code:\\n${migrationCode}${\n result === false ? '' : `\\nAfter applying:\\n${result}`\n }`,\n );\n }\n }\n\n const { logger } = config;\n\n if ((!up || !migrationCode) && !afterPull) await closeAdapters(adapters);\n\n if (!migrationCode) {\n logger?.log('No changes were detected');\n return;\n }\n\n const version = afterPull?.version ?? (await makeFileVersion({}, config));\n\n const delayLog: string[] = [];\n await writeMigrationFile(\n {\n ...config,\n logger: logger ? { ...logger, log: (msg) => delayLog.push(msg) } : logger,\n },\n version,\n migrationName,\n migrationCode,\n );\n\n report(ast, config, currentSchema);\n\n if (logger) {\n for (const msg of delayLog) {\n logger.log(`\\n${msg}`);\n }\n }\n\n if (up) {\n for (const adapter of adapters) {\n await migrateAndClose(adapter, config);\n }\n } else if (!afterPull) {\n await closeAdapters(adapters);\n }\n};\n\nconst invalidConfig = (config: RakeDbConfig) =>\n new Error(\n `\\`${\n config.dbPath ? 'baseTable' : 'dbPath'\n }\\` setting must be set in the migrations config for the generator to work`,\n );\n\nconst getDbFromConfig = async (\n config: RakeDbConfig,\n dbPath: string,\n): Promise<DbInstance> => {\n const module = await config.import(\n pathToFileURL(path.resolve(config.basePath, dbPath)).toString(),\n );\n const db = (module as { [K: string]: DbInstance })[\n config.dbExportedAs ?? 'db'\n ];\n if (!db?.$qb) {\n throw new Error(\n `Unable to import OrchidORM instance as ${\n config.dbExportedAs ?? 'db'\n } from ${config.dbPath}`,\n );\n }\n return db;\n};\n\nconst migrateAndPullStructures = async (\n adapters: AdapterBase[],\n config: RakeDbConfig,\n roles?: { whereSql?: string },\n defaultPrivileges?: { loadDefaultPrivileges?: boolean },\n afterPull?: AfterPull,\n): Promise<{\n dbStructure: IntrospectedStructure;\n}> => {\n if (afterPull) {\n const version = await getDbVersion(adapters[0]);\n\n return {\n dbStructure: {\n version,\n schemas: [],\n tables: [],\n views: [],\n indexes: [],\n excludes: [],\n constraints: [],\n triggers: [],\n extensions: [],\n enums: [],\n domains: [],\n collations: [],\n },\n };\n }\n\n for (const adapter of adapters) {\n await migrate(adapter, config);\n }\n\n const dbStructures = await Promise.all(\n adapters.map((adapter) =>\n introspectDbSchema(adapter, {\n roles,\n loadDefaultPrivileges: defaultPrivileges?.loadDefaultPrivileges,\n }),\n ),\n );\n\n const dbStructure = dbStructures[0];\n for (let i = 1; i < dbStructures.length; i++) {\n compareDbStructures(dbStructure, dbStructures[i], i);\n }\n\n return { dbStructure };\n};\n\nconst compareDbStructures = (\n a: unknown,\n b: unknown,\n i: number,\n path?: string,\n) => {\n let err: true | undefined;\n if (typeof a !== typeof b) {\n err = true;\n }\n\n if (!a || typeof a !== 'object') {\n if (a !== b) {\n err = true;\n }\n } else {\n if (Array.isArray(a)) {\n for (let n = 0, len = a.length; n < len; n++) {\n compareDbStructures(\n a[n],\n (b as unknown[])[n],\n i,\n path ? `${path}[${n}]` : String(n),\n );\n }\n } else {\n for (const key in a) {\n compareDbStructures(\n a[key as keyof typeof a],\n (b as Record<string, unknown>)[key],\n i,\n path ? `${path}.${key}` : key,\n );\n }\n }\n }\n\n if (err) {\n throw new Error(`${path} in the db 0 does not match db ${i}`);\n }\n};\n\nconst getActualItems = async (\n db: DbInstance,\n currentSchema: string,\n internal: QueryInternal,\n columnTypes: unknown,\n): Promise<CodeItems> => {\n const tableNames = new Set<string>();\n const habtmTables = new Map<string, CodeTable>();\n\n const codeItems: CodeItems = {\n schemas: new Set(undefined),\n enums: new Map(),\n tables: [],\n domains: [],\n };\n\n codeItems.schemas.add(currentSchema);\n\n const domains = new Map<string, CodeDomain>();\n\n for (const key in db) {\n if (key[0] === '$') continue;\n\n const table = db[key as keyof typeof db] as Query;\n\n if (!table.table) {\n throw new Error(`Table ${key} is missing table property`);\n }\n\n const schema = getQuerySchema(table);\n const name = concatSchemaAndName({ schema, name: table.table });\n if (tableNames.has(name)) {\n throw new Error(`Table ${name} is defined more than once`);\n }\n\n tableNames.add(name);\n\n if (schema) codeItems.schemas.add(schema);\n\n codeItems.tables.push({\n table: table.table as string,\n shape: table.shape,\n internal: table.internal,\n q: {\n schema: getQuerySchema(table),\n },\n });\n\n for (const key in table.relations) {\n const column = table.shape[key];\n // column won't be set for has and belongs to many\n if (column && 'joinTable' in column) {\n processHasAndBelongsToManyColumn(column, habtmTables, codeItems);\n }\n }\n\n for (const key in table.shape) {\n const column = table.shape[key] as Column;\n // remove computed columns from the shape\n if (column.data.computed) {\n delete table.shape[key];\n } else if (column instanceof DomainColumn) {\n const [schemaName = currentSchema, name] = getSchemaAndTableFromName(\n currentSchema,\n column.dataType,\n );\n domains.set(column.dataType, {\n schemaName,\n name,\n column: (column.data.as ??\n new UnknownColumn(defaultSchemaConfig)) as Column,\n });\n } else {\n const en =\n column.dataType === 'enum'\n ? column\n : column instanceof ArrayColumn &&\n column.data.item.dataType === 'enum'\n ? column.data.item\n : undefined;\n\n if (en) {\n processEnumColumn(en, currentSchema, codeItems);\n }\n }\n }\n }\n\n if (internal.extensions) {\n for (const extension of internal.extensions) {\n const [schema] = getSchemaAndTableFromName(currentSchema, extension.name);\n if (schema) codeItems.schemas.add(schema);\n }\n }\n\n if (internal.domains) {\n for (const key in internal.domains) {\n const [schemaName = currentSchema, name] = getSchemaAndTableFromName(\n currentSchema,\n key,\n );\n const column = internal.domains[key](columnTypes);\n\n domains.set(key, {\n schemaName,\n name,\n column,\n });\n }\n }\n\n for (const domain of domains.values()) {\n codeItems.schemas.add(domain.schemaName);\n codeItems.domains.push(domain);\n }\n\n // Add schemas from role default privileges to prevent them from being dropped\n if (internal.roles) {\n for (const role of internal.roles) {\n if (role.defaultPrivileges) {\n for (const privilege of role.defaultPrivileges) {\n if (privilege.schema) codeItems.schemas.add(privilege.schema);\n }\n }\n }\n }\n\n return codeItems;\n};\n\nconst processEnumColumn = (\n column: Column.Pick.QueryColumn,\n currentSchema: string,\n codeItems: CodeItems,\n) => {\n const { enumName, options } = column as unknown as {\n enumName: string;\n options: [string, ...string[]];\n };\n\n const [schema, name] = getSchemaAndTableFromName(currentSchema, enumName);\n const enumSchema = schema ?? currentSchema;\n\n codeItems.enums.set(`${enumSchema}.${name}`, {\n schema: enumSchema,\n name,\n values: options,\n });\n if (schema) codeItems.schemas.add(schema);\n};\n\nconst processHasAndBelongsToManyColumn = (\n column: Column.Pick.QueryColumn & { joinTable: unknown },\n habtmTables: Map<string, CodeTable>,\n codeItems: CodeItems,\n) => {\n const q = (column as { joinTable: CodeTable }).joinTable;\n const prev = habtmTables.get(q.table);\n if (prev) {\n for (const key in q.shape) {\n if (q.shape[key].dataType !== prev.shape[key]?.dataType) {\n throw new Error(\n `Column ${key} in ${q.table} in hasAndBelongsToMany relation does not match with the relation on the other side`,\n );\n }\n }\n return;\n }\n habtmTables.set(q.table, q);\n\n const joinTable = Object.create(q);\n\n const shape: ColumnsShape = {};\n for (const key in joinTable.shape) {\n const column = Object.create(joinTable.shape[key]);\n column.data = {\n ...column.data,\n name: column.data.name ?? key,\n identity: undefined,\n primaryKey: undefined,\n default: undefined,\n };\n shape[toCamelCase(key)] = column;\n }\n joinTable.shape = shape;\n joinTable.internal = {\n ...joinTable.internal,\n tableData: {\n ...joinTable.internal.tableData,\n primaryKey: {\n columns: Object.keys(shape),\n },\n },\n noPrimaryKey: false,\n };\n\n codeItems.tables.push(joinTable);\n\n return;\n};\n\nconst closeAdapters = (adapters: AdapterBase[]) => {\n return Promise.all(adapters.map((x) => x.close()));\n};\n","import {\n columnsShapeToCode,\n pushTableDataCode,\n TableData,\n Code,\n codeToString,\n getImportPath,\n RecordString,\n singleQuote,\n toCamelCase,\n toPascalCase,\n} from 'pqb';\nimport { RakeDbAst, RakeDbConfig } from 'rake-db';\nimport path from 'node:path';\n\ninterface TableInfo {\n key: string;\n dbTableName: string;\n name: string;\n className: string;\n path: string;\n}\n\ninterface TableInfos {\n [dbTableName: string]: TableInfo;\n}\n\nexport interface AppCodeGenTable extends TableInfo {\n content: string;\n}\n\nexport interface AppCodeGenTables {\n [K: string]: AppCodeGenTable;\n}\n\ninterface FKeys {\n [K: string]: { table: TableInfo; references: TableData.References }[];\n}\n\nexport const getTableInfosAndFKeys = (\n asts: RakeDbAst[],\n config: RakeDbConfig,\n): { tableInfos: TableInfos; fkeys: FKeys } => {\n const generateTableTo =\n config.generateTableTo ?? ((name: string) => `./tables/${name}.table.ts`);\n\n const tableInfos: TableInfos = {};\n const fkeys: FKeys = {};\n for (const ast of asts) {\n if (ast.type === 'table') {\n const tableKey = toCamelCase(ast.name);\n const dbTableName = ast.schema ? `${ast.schema}.${ast.name}` : ast.name;\n let tablePath = path.resolve(config.basePath, generateTableTo(tableKey));\n if (!tablePath.endsWith('.ts')) tablePath += '.ts';\n\n const name = toPascalCase(ast.name);\n\n const info: TableInfo = {\n dbTableName,\n key: tableKey,\n path: tablePath,\n name,\n className: `${name}Table`,\n };\n\n tableInfos[dbTableName] = info;\n\n if (ast.constraints) {\n for (const { references } of ast.constraints) {\n if (!references) continue;\n\n (fkeys[references.fnOrTable as string] ??= []).push({\n table: info,\n references,\n });\n }\n }\n }\n }\n\n return { tableInfos, fkeys };\n};\n\nexport const appCodeGenTable = (\n tableInfos: TableInfos,\n fkeys: FKeys,\n ast: RakeDbAst.Table,\n baseTablePath: string,\n baseTableExportedAs: string,\n currentSchema: string,\n): AppCodeGenTable => {\n const tableInfo =\n tableInfos[ast.schema ? `${ast.schema}.${ast.name}` : ast.name];\n\n const imports: RecordString = {\n 'orchid-orm': 'Selectable, Insertable, Updatable',\n [getImportPath(tableInfo.path, baseTablePath)]: baseTableExportedAs,\n };\n\n const props: Code[] = [];\n\n if (ast.schema) {\n props.push(`schema = ${singleQuote(ast.schema)};`);\n }\n\n props.push(`readonly table = ${singleQuote(ast.name)};`);\n\n if (ast.comment) {\n props.push(`comment = ${singleQuote(ast.comment)};`);\n }\n\n if (ast.noPrimaryKey === 'ignore') {\n props.push('noPrimaryKey = true;');\n }\n\n const hasTableData = Boolean(\n ast.primaryKey ||\n ast.indexes?.length ||\n ast.excludes?.length ||\n ast.constraints?.length,\n );\n\n const shapeCode = columnsShapeToCode(\n { t: 't', table: ast.name, currentSchema },\n ast.shape,\n );\n\n props.push(\n `columns = this.setColumns(${hasTableData ? '\\n ' : ''}(t) => ({`,\n hasTableData ? [shapeCode] : shapeCode,\n hasTableData ? ' }),' : '}));',\n );\n\n if (hasTableData) {\n props.push(pushTableDataCode([], ast), ');');\n }\n\n const relations: Code[] = [];\n\n const fullTableName = ast.schema ? `${ast.schema}.${ast.name}` : ast.name;\n const belongsTo = fkeys[fullTableName];\n if (belongsTo) {\n for (const { table, references } of belongsTo) {\n imports[getImportPath(tableInfo.path, table.path)] = table.className;\n\n relations.push(\n `${table.key}: this.belongsTo(() => ${table.className}, {`,\n [\n `columns: [${references.foreignColumns\n .map(singleQuote)\n .join(', ')}],`,\n `references: [${references.columns.map(singleQuote).join(', ')}],`,\n ],\n '}),',\n );\n }\n }\n\n if (ast.constraints) {\n for (const { references } of ast.constraints) {\n if (!references) continue;\n\n const table = tableInfos[references.fnOrTable as string];\n imports[getImportPath(tableInfo.path, table.path)] = table.className;\n\n relations.push(\n `${table.key}: this.hasMany(() => ${table.className}, {`,\n [\n `columns: [${references.columns.map(singleQuote).join(', ')}],`,\n `references: [${references.foreignColumns\n .map(singleQuote)\n .join(', ')}],`,\n ],\n '}),',\n );\n }\n }\n\n if (relations.length) {\n props.push('', 'relations = {', relations, '};');\n }\n\n const importsCode = importsToCode(imports);\n\n const { name, className } = tableInfo;\n const code: Code[] = [\n `export type ${name} = Selectable<${className}>;\nexport type ${name}New = Insertable<${className}>;\nexport type ${name}Update = Updatable<${className}>;\n\nexport class ${className} extends ${baseTableExportedAs} {`,\n props,\n '}\\n',\n ];\n\n return {\n ...tableInfo,\n content: importsCode + '\\n\\n' + codeToString(code, '', ' '),\n };\n};\n\nfunction importsToCode(imports: Record<string, string>): string {\n return Object.entries(imports)\n .map(([from, name]) => `import { ${name} } from '${from}';`)\n .join('\\n');\n}\n","import fs from 'fs/promises';\nimport {\n CallExpression,\n Expression,\n ImportDeclaration,\n NamedImports,\n NodeArray,\n ObjectLiteralExpression,\n Statement,\n VariableStatement,\n} from 'typescript';\nimport { AppCodeGenTables } from './tables.appCodeGenerator';\nimport { DbExtension, getImportPath, quoteObjectKey, singleQuote } from 'pqb';\nimport { RakeDbAst } from 'rake-db';\n\n// importing directly won't work after compiling\nimport typescript from 'typescript';\nconst { createSourceFile, ScriptTarget, SyntaxKind } = typescript;\n\ntype Change = [from: number, to: number] | string;\n\nexport const appCodeGenUpdateDbFile = async (\n dbPath: string,\n tables: AppCodeGenTables,\n extensions: DbExtension[],\n domains: RakeDbAst.Domain[],\n currentSchema: string,\n): Promise<string | undefined> => {\n const content = await fs.readFile(dbPath, 'utf-8');\n const statements = getTsStatements(content);\n const importName = getOrchidOrmImportName(statements);\n if (!importName) {\n throw new Error(`Main file does not contain import of orchid-orm`);\n }\n const { config, tablesList } = getOrchidOrmArgs(importName, statements);\n\n const changes: Change[] = [];\n\n let replacedConfig: string | undefined;\n if (extensions.length || domains.length) {\n let code = content.slice(config.pos, config.end).trim();\n\n if (code[0] !== '{') code = `{...${code}}`;\n\n code = '{\\n ' + code.slice(1, -1).trim();\n\n if (!code.endsWith(',')) code += ',';\n\n if (extensions.length) {\n code += `\\n extensions: [${extensions\n .map((ext) =>\n ext.version\n ? `{ ${quoteObjectKey(ext.name, false)}: '${ext.version}' }`\n : singleQuote(ext.name),\n )\n .join(', ')}],`;\n }\n\n if (domains.length) {\n code += `\\n domains: {\\n ${domains\n .sort((a, b) => (a.name > b.name ? 1 : -1))\n .map(\n (ast) =>\n `${quoteObjectKey(\n ast.schema ? `${ast.schema}.${ast.name}` : ast.name,\n false,\n )}: (t) => ${ast.baseType.toCode(\n { t: 't', table: ast.name, currentSchema },\n ast.baseType.data.name ?? '',\n )},`,\n )\n .join('\\n ')}\\n },`;\n }\n\n replacedConfig = code + '\\n}';\n }\n\n const tablesChanges = makeTablesListChanges(\n content,\n statements,\n tablesList,\n tables,\n dbPath,\n );\n\n if (tablesChanges) {\n addChange(\n content,\n changes,\n tablesChanges.imports.pos,\n tablesChanges.imports.text,\n );\n }\n\n if (replacedConfig) {\n replaceContent(content, changes, config.pos, config.end, replacedConfig);\n }\n\n if (tablesChanges) {\n addChange(\n content,\n changes,\n tablesChanges.tablesList.pos,\n tablesChanges.tablesList.text,\n );\n }\n\n return applyChanges(content, changes);\n};\n\nconst getTsStatements = (content: string): NodeArray<Statement> => {\n return createSourceFile('file.ts', content, ScriptTarget.Latest, true)\n .statements;\n};\n\nconst getOrchidOrmImportName = (\n statements: NodeArray<Statement>,\n): string | undefined => {\n for (const node of statements) {\n if (node.kind !== SyntaxKind.ImportDeclaration) continue;\n\n const imp = node as ImportDeclaration;\n const source = imp.moduleSpecifier.getText().slice(1, -1);\n if (source !== 'orchid-orm') continue;\n\n if (!imp.importClause) continue;\n\n const elements = (imp.importClause.namedBindings as NamedImports)?.elements;\n\n if (!elements) imp;\n\n for (const element of elements) {\n if (\n element.name.escapedText === 'orchidORM' ||\n (element.propertyName &&\n 'escapedText' in element.propertyName &&\n element.propertyName.escapedText === 'orchidORM')\n ) {\n return element.name.escapedText.toString();\n }\n }\n }\n\n return;\n};\n\nconst makeTablesListChanges = (\n content: string,\n statements: NodeArray<Statement>,\n object: ObjectLiteralExpression,\n tables: AppCodeGenTables,\n dbPath: string,\n) => {\n const spaces = getTablesListSpaces(content, object);\n\n let imports = '';\n let tablesList = '';\n const prependComma =\n object.properties.length && !object.properties.hasTrailingComma;\n const tablesListNewLine = content\n .slice(object.properties.end, object.end)\n .includes('\\n');\n\n const tablesArr = Object.values(tables);\n for (let i = 0; i < tablesArr.length; i++) {\n const { path, className, key } = tablesArr[i];\n const importPath = getImportPath(dbPath, path);\n\n imports += `\\nimport { ${className} } from '${importPath}';`;\n\n tablesList += `${\n i === 0 && prependComma ? ',' : ''\n }\\n${spaces} ${key}: ${className},`;\n\n if (i === tablesArr.length - 1 && !tablesListNewLine) {\n tablesList += `\\n${spaces}`;\n }\n }\n\n if (!imports.length) return;\n\n let importPos = 0;\n for (const node of statements) {\n if (node.kind === SyntaxKind.ImportDeclaration) {\n importPos = node.end;\n }\n }\n\n return {\n imports: { pos: importPos, text: imports },\n tablesList: { pos: object.properties.end, text: tablesList },\n };\n};\n\nconst getTablesListSpaces = (content: string, object: Expression): string => {\n const lines = content.slice(0, object.end).split('\\n');\n const last = lines[lines.length - 1];\n return last.match(/^\\s+/)?.[0] || '';\n};\n\nconst getOrchidOrmArgs = (\n importName: string,\n statements: NodeArray<Statement>,\n): { config: Expression; tablesList: ObjectLiteralExpression } => {\n for (const v of statements) {\n if (v.kind !== SyntaxKind.VariableStatement) continue;\n\n for (const node of (v as VariableStatement).declarationList.declarations) {\n const call = node.initializer as CallExpression;\n if (call?.kind !== SyntaxKind.CallExpression) continue;\n\n if (call.expression.getText() !== importName) continue;\n\n if (call.arguments.length !== 2) {\n throw new Error(\n 'Invalid number of arguments when initializing orchid orm',\n );\n }\n\n const object = call.arguments[1] as ObjectLiteralExpression;\n if (object?.kind !== SyntaxKind.ObjectLiteralExpression) {\n throw new Error(\n 'Second argument of orchidORM must be an object literal',\n );\n }\n\n return { config: call.arguments[0], tablesList: object };\n }\n }\n\n throw new Error('List of tables is not found in main file');\n};\n\nconst addChange = (\n content: string,\n changes: Change[],\n at: number,\n text: string,\n end = at,\n) => {\n if (changes.length === 0) {\n changes.push([0, at], text, [end, content.length]);\n } else {\n const last = changes[changes.length - 1] as [number, number];\n last[1] = at;\n changes.push(text, [end, content.length]);\n }\n};\n\nconst replaceContent = (\n content: string,\n changes: Change[],\n from: number,\n to: number,\n text: string,\n) => {\n addChange(content, changes, from, text, to);\n};\n\nconst applyChanges = (content: string, changes: Change[]) => {\n return changes.length\n ? changes\n .map((item) =>\n typeof item === 'string' ? item : content.slice(item[0], item[1]),\n )\n .join('')\n : content;\n};\n","import { DbExtension, AdapterBase, pathToLog } from 'pqb';\nimport {\n makeFileVersion,\n makeStructureToAstCtx,\n RakeDbAst,\n RakeDbConfig,\n saveMigratedVersion,\n SilentQueries,\n structureToAst,\n} from 'rake-db';\nimport fs from 'fs/promises';\nimport path from 'node:path';\nimport {\n AppCodeGenTable,\n appCodeGenTable,\n AppCodeGenTables,\n getTableInfosAndFKeys,\n} from './appCodeGenerators/tables.appCodeGenerator';\nimport { appCodeGenUpdateDbFile } from './appCodeGenerators/dbFile.appCodeGenerator';\nimport { generate } from '../generate/generate';\n\nexport const pull = async (adapters: AdapterBase[], config: RakeDbConfig) => {\n if (!config.dbPath || !config.baseTable) {\n throw new Error(\n `\\`${\n config.dbPath ? 'baseTable' : 'dbPath'\n }\\` setting must be set in the migrations config for pull command`,\n );\n }\n\n const baseTablePath = config.baseTable.getFilePath();\n const baseTableExportedAs = config.baseTable.exportAs;\n\n const [adapter] = adapters;\n const adapterSchema = adapter.getSchema();\n const currentSchema =\n (typeof adapterSchema === 'function' ? adapterSchema() : adapterSchema) ??\n 'public';\n\n const ctx = makeStructureToAstCtx(config, currentSchema);\n\n const asts = await structureToAst(ctx, adapter, config);\n\n const { tableInfos, fkeys } = getTableInfosAndFKeys(asts, config);\n\n const exclusiveWriteOptions = { flag: 'wx' as const };\n const pendingFileWrites: [\n path: string,\n content: string,\n options?: { flag: 'wx' },\n ][] = [];\n\n const tables: AppCodeGenTables = {};\n const extensions: DbExtension[] = [];\n const domains: RakeDbAst.Domain[] = [];\n\n let firstTable: undefined | AppCodeGenTable;\n for (const ast of asts) {\n switch (ast.type) {\n case 'table': {\n const table = appCodeGenTable(\n tableInfos,\n fkeys,\n ast,\n baseTablePath,\n baseTableExportedAs,\n currentSchema,\n );\n tables[table.key] = table;\n if (!firstTable) firstTable = table;\n pendingFileWrites.push([\n table.path,\n table.content,\n exclusiveWriteOptions,\n ]);\n break;\n }\n case 'extension': {\n extensions.push({\n name: ast.schema ? `${ast.schema}.${ast.name}` : ast.name,\n version: ast.version,\n });\n break;\n }\n case 'domain': {\n domains.push(ast);\n break;\n }\n }\n }\n\n if (!firstTable && !extensions.length && !domains.length) {\n await adapter.close();\n return;\n }\n\n let dbPath = path.resolve(config.basePath, config.dbPath);\n if (!dbPath.endsWith('.ts')) dbPath += '.ts';\n const content = await appCodeGenUpdateDbFile(\n dbPath,\n tables,\n extensions,\n domains,\n currentSchema,\n );\n if (content) pendingFileWrites.push([dbPath, content]);\n\n if (firstTable) {\n await fs.mkdir(path.dirname(firstTable.path), { recursive: true });\n }\n\n await Promise.all(\n pendingFileWrites.map(([path, content, options]) =>\n fs.writeFile(path, content, options).then(() => {\n config.logger?.log(`Created ${pathToLog(path)}`);\n }),\n ),\n );\n\n const version = await makeFileVersion({}, config);\n await generate(adapters, config, ['pull'], { adapter, version });\n\n // save migrated version into all configured databases\n await Promise.all(\n adapters.map(async (adapter) => {\n const silentAdapter = adapter as unknown as SilentQueries;\n silentAdapter.silentArrays = adapter.arrays;\n await saveMigratedVersion(silentAdapter, version, 'pull.ts', config);\n await adapter.close();\n }),\n );\n};\n","import { rakeDbCommands } from 'rake-db';\nimport { generate } from './generate/generate';\nimport { pull } from './pull/pull';\nimport { ColumnSchemaConfig } from 'pqb';\n\nrakeDbCommands.g = rakeDbCommands.generate = {\n run: generate,\n help: 'gen migration from OrchidORM tables',\n helpArguments: {\n 'no arguments': '\"generated\" is a default file name',\n 'migration-name': 'set migration file name',\n up: 'auto-apply migration',\n 'migration-name up': 'with a custom name and apply it',\n },\n helpAfter: 'reset',\n};\n\nrakeDbCommands.pull.run = pull;\nrakeDbCommands.pull.help =\n 'generate ORM tables and a migration for an existing database';\n\ndeclare module 'rake-db' {\n export interface RakeDbConfig {\n dbPath?: string;\n dbExportedAs?: string;\n generateTableTo?(tableName: string): string;\n }\n\n export interface RakeDbCliConfigInputBase<\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n SchemaConfig extends ColumnSchemaConfig,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CT,\n > {\n dbPath?: string;\n dbExportedAs?: string;\n generateTableTo?(tableName: string): string;\n }\n}\n"],"names":["name","promptSelect","colors","item","getSchemaAndTableFromName","getDbTableColumnsChecks","dbColumnToAst","toSnakeCase","column","instantiateDbColumn","ArrayColumn","getColumnBaseType","EnumColumn","deepCompare","concatSchemaAndName","key","encodeColumnDefault","type","RawSql","emptyArray","codeEnum","toArray","i","getIndexName","getExcludeName","getConstraintName","getFreeSetAlias","tableToAst","getMigrationsSchemaAndTable","codeTable","getDbStructureTableData","VirtualColumn","codeRole","getSupportedDefaultPrivileges","makeDomainsMap","astToMigration","createMigrationInterface","introspectDbSchema","pluralize","toCamelCase","changes","code","addCode","exhaustive","config","codeToString","emptyObject","makeStructureToAstCtx","makeFileVersion","writeMigrationFile","adapter","migrateAndClose","pathToFileURL","getDbVersion","migrate","path","getQuerySchema","DomainColumn","UnknownColumn","defaultSchemaConfig","toPascalCase","getImportPath","singleQuote","columnsShapeToCode","pushTableDataCode","quoteObjectKey","structureToAst","content","pathToLog","saveMigratedVersion","rakeDbCommands"],"mappings":"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"}
1
+ {"version":3,"file":"node-postgres.js","sources":["../../src/migrations/generate/generators/generators.utils.ts","../../src/migrations/generate/generators/schemas.generator.ts","../../src/migrations/generate/generators/extensions.generator.ts","../../src/migrations/generate/generators/columns.generator.ts","../../src/migrations/generate/generators/domains.generator.ts","../../src/migrations/generate/generators/enums.generator.ts","../../src/migrations/generate/generators/primaryKey.generator.ts","../../src/migrations/generate/generators/indexesAndExcludes.generator.ts","../../src/migrations/generate/generators/foreignKeys.generator.ts","../../src/migrations/generate/generators/checks.generator.ts","../../src/migrations/generate/generators/tables.generator.ts","../../src/migrations/generate/generators/roles.generator.ts","../../src/migrations/generate/generators/default-privilege.generator.ts","../../src/migrations/generate/composeMigration.ts","../../src/migrations/generate/verify-migration.ts","../../src/migrations/generate/reportGeneratedMigration.ts","../../src/migrations/generate/generate.ts","../../src/migrations/pull/appCodeGenerators/tables.appCodeGenerator.ts","../../src/migrations/pull/appCodeGenerators/dbFile.appCodeGenerator.ts","../../src/migrations/pull/pull.ts","../../src/migrations/patchRakeDb.ts"],"sourcesContent":["import { RakeDbAst, promptSelect } from 'rake-db';\nimport { RawSqlBase, QueryResult, AdapterBase, colors } from 'pqb/internal';\nimport { AbortSignal } from '../generate';\n\nexport interface CompareExpression {\n compare: {\n inDb: string;\n inCode: (string | RawSqlBase)[];\n }[];\n\n handle(i?: number): void;\n}\n\nexport interface TableExpression extends CompareExpression {\n source: string;\n}\n\nexport const compareSqlExpressions = async (\n tableExpressions: TableExpression[],\n adapter: AdapterBase,\n) => {\n if (!tableExpressions.length) return;\n\n let id = 1;\n for (const { source, compare, handle } of tableExpressions) {\n const viewName = `orchidTmpView${id++}`;\n const values: unknown[] = [];\n\n // It is important to run `CREATE TEMPORARY VIEW` and `DROP VIEW` on the same db connection,\n // that's why SQLs are combined into a single query.\n const combinedQueries = [\n `CREATE TEMPORARY VIEW ${viewName} AS (SELECT ${compare\n .map(\n ({ inDb, inCode }, i): string =>\n `${inDb} AS \"*inDb-${i}*\", ${inCode\n .map(\n (s, j) =>\n `(${\n typeof s === 'string' ? s : s.toSQL({ values })\n }) \"*inCode-${i}-${j}*\"`,\n )\n .join(', ')}`,\n )\n .join(', ')} FROM ${source})`,\n `SELECT pg_get_viewdef('${viewName}') v`,\n `DROP VIEW ${viewName}`,\n ].join('; ');\n\n const result = await adapter.query(combinedQueries, values, viewName).then(\n (res) => (res as unknown as QueryResult[])[1],\n async (err) => {\n // ignore the \"type ... does not exist\" because the type may be added in the same migration,\n // but throw on other errors\n if (err.code !== '42704') {\n throw err;\n }\n },\n );\n\n if (!result) {\n handle();\n return;\n }\n\n const match = compareSqlExpressionResult(\n result.rows[0].v,\n compare[0].inCode,\n );\n handle(match);\n }\n};\n\nexport const compareSqlExpressionResult = (\n resultSql: string,\n inCode: unknown[],\n) => {\n let pos = 7;\n const rgx = /\\s+AS\\s+\"\\*(inDb-\\d+|inCode-\\d+-\\d+)\\*\",?/g;\n let match;\n let inDb = '';\n let codeI = 0;\n const matches = inCode.map(() => true);\n while ((match = rgx.exec(resultSql))) {\n const sql = resultSql.slice(pos, rgx.lastIndex - match[0].length).trim();\n const arr = match[1].split('-');\n if (arr.length === 2) {\n inDb = sql;\n codeI = 0;\n } else {\n if (\n inDb !== sql &&\n // Comparing `(sql) = sql` and `sql = (sql)` below.\n // Could not reproduce this case in integration tests, but it was reported in #494.\n !(\n inDb.startsWith('(') &&\n inDb.endsWith(')') &&\n inDb.slice(1, -1) === sql\n ) &&\n !(sql.startsWith('(') && sql.endsWith(')') && sql.slice(1, -1) === inDb)\n ) {\n matches[codeI] = false;\n }\n codeI++;\n }\n pos = rgx.lastIndex;\n }\n\n const firstMatching = matches.indexOf(true);\n return firstMatching === -1 ? undefined : firstMatching;\n};\n\nexport const promptCreateOrRename = (\n kind: string,\n name: string,\n drop: string[],\n verifying: boolean | undefined,\n): Promise<number> => {\n if (verifying) throw new AbortSignal();\n\n let hintPos = name.length + 4;\n for (const from of drop) {\n const value = from.length + 8 + name.length;\n if (value > hintPos) hintPos = value;\n }\n\n let max = 0;\n const add = name.length + 3;\n for (const name of drop) {\n if (name.length + add > max) {\n max = name.length + add;\n }\n }\n\n const renameMessage = `rename ${kind}`;\n\n return promptSelect({\n message: `Create or rename ${colors.blueBold(\n name,\n )} ${kind} from another ${kind}?`,\n options: [\n `${colors.greenBold('+')} ${name} ${colors.pale(\n `create ${kind}`.padStart(\n hintPos + renameMessage.length - name.length - 4,\n ' ',\n ),\n )}`,\n ...drop.map(\n (d) =>\n `${colors.yellowBold('~')} ${d} ${colors.yellowBold(\n '=>',\n )} ${name} ${colors.pale(\n renameMessage.padStart(\n hintPos + renameMessage.length - d.length - name.length - 8,\n ' ',\n ),\n )}`,\n ),\n ],\n });\n};\n\nexport const checkForColumnAddOrDrop = (\n shape: RakeDbAst.ChangeTableShape,\n key: string,\n) => {\n const item = shape[key];\n if (item) {\n return (\n item &&\n (Array.isArray(item) || item.type === 'add' || item.type === 'drop')\n );\n }\n\n for (const k in shape) {\n const item = shape[k];\n if (\n Array.isArray(item)\n ? item.some(\n (item) =>\n (item.type === 'add' || item.type === 'drop') &&\n item.item.data.name === key,\n )\n : (item.type === 'add' || item.type === 'drop') &&\n item.item.data.name === key\n ) {\n return true;\n }\n }\n\n return false;\n};\n","import { RakeDbAst, IntrospectedStructure } from 'rake-db';\nimport { promptCreateOrRename } from './generators.utils';\nimport { ComposeMigrationParams } from '../composeMigration';\n\nexport const processSchemas = async (\n ast: RakeDbAst[],\n dbStructure: IntrospectedStructure,\n {\n codeItems: { schemas },\n verifying,\n internal: { generatorIgnore },\n currentSchema,\n }: ComposeMigrationParams,\n): Promise<void> => {\n const createSchemas: string[] = [];\n const dropSchemas: string[] = [];\n\n for (const schema of schemas) {\n if (!dbStructure.schemas.includes(schema)) {\n createSchemas.push(schema);\n }\n }\n\n for (const schema of dbStructure.schemas) {\n if (\n !schemas.has(schema) &&\n schema !== 'public' &&\n schema !== currentSchema &&\n !generatorIgnore?.schemas?.includes(schema)\n ) {\n dropSchemas.push(schema);\n }\n }\n\n for (const schema of createSchemas) {\n if (dropSchemas.length) {\n const i = await promptCreateOrRename(\n 'schema',\n schema,\n dropSchemas,\n verifying,\n );\n if (i) {\n const from = dropSchemas[i - 1];\n dropSchemas.splice(i - 1, 1);\n\n renameSchemaInStructures(dbStructure.tables, from, schema);\n renameSchemaInStructures(dbStructure.views, from, schema);\n renameSchemaInStructures(dbStructure.indexes, from, schema);\n renameSchemaInStructures(dbStructure.excludes, from, schema);\n renameSchemaInStructures(dbStructure.constraints, from, schema);\n renameSchemaInStructures(dbStructure.triggers, from, schema);\n renameSchemaInStructures(dbStructure.enums, from, schema);\n renameSchemaInStructures(dbStructure.domains, from, schema);\n renameSchemaInStructures(dbStructure.collations, from, schema);\n\n for (const table of dbStructure.tables) {\n for (const column of table.columns) {\n if (column.typeSchema === from) {\n column.typeSchema = schema;\n }\n }\n }\n\n ast.push({\n type: 'renameSchema',\n from,\n to: schema,\n });\n continue;\n }\n }\n\n ast.push({\n type: 'schema',\n action: 'create',\n name: schema,\n });\n }\n\n for (const schema of dropSchemas) {\n ast.push({\n type: 'schema',\n action: 'drop',\n name: schema,\n });\n }\n};\n\nconst renameSchemaInStructures = (\n items: { schemaName: string }[],\n from: string,\n to: string,\n) => {\n for (const item of items) {\n if (item.schemaName === from) {\n item.schemaName = to;\n }\n }\n};\n","import {\n RakeDbAst,\n IntrospectedStructure,\n getSchemaAndTableFromName,\n} from 'rake-db';\nimport { ComposeMigrationParams } from '../composeMigration';\n\ninterface Extension {\n schema?: string;\n name: string;\n version?: string;\n}\n\nexport const processExtensions = (\n ast: RakeDbAst[],\n dbStructure: IntrospectedStructure,\n {\n currentSchema,\n internal: { extensions, generatorIgnore },\n }: ComposeMigrationParams,\n) => {\n const codeExtensions = extensions?.map((ext): Extension => {\n const [schema, name] = getSchemaAndTableFromName(currentSchema, ext.name);\n return { schema, name, version: ext.version };\n });\n\n for (const dbExt of dbStructure.extensions) {\n if (\n generatorIgnore?.schemas?.includes(dbExt.schemaName) ||\n generatorIgnore?.extensions?.includes(dbExt.name)\n ) {\n continue;\n }\n\n if (codeExtensions) {\n let found = false;\n for (let i = 0; i < codeExtensions.length; i++) {\n const codeExt = codeExtensions[i];\n if (\n dbExt.name === codeExt.name &&\n dbExt.schemaName === (codeExt.schema ?? currentSchema) &&\n (!codeExt.version || codeExt.version === dbExt.version)\n ) {\n found = true;\n codeExtensions.splice(i, 1);\n break;\n }\n }\n\n if (found) continue;\n }\n\n ast.push({\n type: 'extension',\n action: 'drop',\n schema: dbExt.schemaName === currentSchema ? undefined : dbExt.schemaName,\n name: dbExt.name,\n version: dbExt.version,\n });\n }\n\n if (codeExtensions?.length) {\n ast.push(\n ...codeExtensions.map((ext) => ({\n type: 'extension' as const,\n action: 'create' as const,\n ...ext,\n })),\n );\n }\n};\n","import {\n RakeDbAst,\n dbColumnToAst,\n getDbTableColumnsChecks,\n instantiateDbColumn,\n StructureToAstCtx,\n DbStructure,\n IntrospectedStructure,\n encodeColumnDefault,\n concatSchemaAndName,\n getSchemaAndTableFromName,\n promptSelect,\n RakeDbConfig,\n} from 'rake-db';\nimport { Column } from 'pqb/internal';\nimport {\n ArrayColumn,\n DbStructureDomainsMap,\n EnumColumn,\n getColumnBaseType,\n deepCompare,\n RecordUnknown,\n toSnakeCase,\n AdapterBase,\n colors,\n} from 'pqb/internal';\nimport { promptCreateOrRename } from './generators.utils';\nimport { ChangeTableData, CompareSql } from './tables.generator';\nimport { AbortSignal } from '../generate';\n\nexport interface TypeCastsCache {\n value?: Map<string, Set<string>>;\n}\n\ntype ColumnsToChange = Map<\n string,\n { key: string; dbName: string; column: Column }\n>;\n\nexport const processColumns = async (\n adapter: AdapterBase,\n config: RakeDbConfig,\n structureToAstCtx: StructureToAstCtx,\n dbStructure: IntrospectedStructure,\n domainsMap: DbStructureDomainsMap,\n changeTableData: ChangeTableData,\n ast: RakeDbAst[],\n currentSchema: string,\n compareSql: CompareSql,\n typeCastsCache: TypeCastsCache,\n verifying: boolean | undefined,\n) => {\n const { dbTable } = changeTableData;\n const dbColumns = Object.fromEntries(\n dbTable.columns.map((column) => [column.name, column]),\n );\n\n const { columnsToAdd, columnsToDrop, columnsToChange } = groupColumns(\n structureToAstCtx,\n dbStructure,\n domainsMap,\n dbColumns,\n changeTableData,\n );\n\n await addOrRenameColumns(\n config,\n dbStructure,\n changeTableData,\n columnsToAdd,\n columnsToDrop,\n columnsToChange,\n verifying,\n );\n\n await changeColumns(\n adapter,\n config,\n structureToAstCtx,\n dbStructure,\n domainsMap,\n ast,\n currentSchema,\n dbColumns,\n columnsToChange,\n compareSql,\n changeTableData,\n typeCastsCache,\n verifying,\n );\n\n dropColumns(changeTableData, columnsToDrop);\n};\n\ntype KeyAndColumn = { key: string; column: Column };\n\nconst groupColumns = (\n structureToAstCtx: StructureToAstCtx,\n dbStructure: IntrospectedStructure,\n domainsMap: DbStructureDomainsMap,\n dbColumns: { [K: string]: DbStructure.Column },\n changeTableData: ChangeTableData,\n): {\n columnsToAdd: KeyAndColumn[];\n columnsToDrop: KeyAndColumn[];\n columnsToChange: ColumnsToChange;\n} => {\n const columnsToAdd: { key: string; column: Column }[] = [];\n const columnsToDrop: { key: string; column: Column }[] = [];\n const columnsToChange: ColumnsToChange = new Map();\n const columnsToChangeByDbName = new Map<string, true>();\n\n const { codeTable, dbTable, dbTableData } = changeTableData;\n const checks = getDbTableColumnsChecks(changeTableData.dbTableData);\n\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as Column;\n // skip virtual columns\n if (!column.dataType) continue;\n\n const name = column.data.name ?? key;\n if (dbColumns[name]) {\n columnsToChange.set(key, { key, dbName: name, column });\n columnsToChangeByDbName.set(name, true);\n } else {\n columnsToAdd.push({ key, column });\n }\n }\n\n for (const name in dbColumns) {\n if (columnsToChangeByDbName.has(name)) continue;\n\n const [key, column] = dbColumnToAst(\n structureToAstCtx,\n dbStructure,\n domainsMap,\n dbTable.name,\n dbColumns[name],\n dbTable,\n dbTableData,\n checks,\n );\n\n columnsToDrop.push({ key, column });\n }\n\n return {\n columnsToAdd,\n columnsToDrop,\n columnsToChange,\n };\n};\n\nconst addOrRenameColumns = async (\n config: RakeDbConfig,\n dbStructure: IntrospectedStructure,\n {\n dbTableData,\n schema,\n changeTableAst: { name: tableName, shape },\n }: ChangeTableData,\n columnsToAdd: KeyAndColumn[],\n columnsToDrop: KeyAndColumn[],\n columnsToChange: ColumnsToChange,\n verifying: boolean | undefined,\n) => {\n for (const { key, column } of columnsToAdd) {\n if (columnsToDrop.length) {\n const codeName = column.data.name ?? key;\n const i = await promptCreateOrRename(\n 'column',\n codeName,\n columnsToDrop.map((x) => x.key),\n verifying,\n );\n if (i) {\n const drop = columnsToDrop[i - 1];\n columnsToDrop.splice(i - 1, 1);\n\n const from = drop.column.data.name ?? drop.key;\n columnsToChange.set(from, {\n key,\n dbName: from,\n column: column.name(codeName),\n });\n\n const to = config.snakeCase ? toSnakeCase(key) : key;\n\n if (dbTableData.primaryKey) {\n renameColumn(dbTableData.primaryKey.columns, from, to);\n }\n\n for (const index of dbTableData.indexes) {\n for (const column of index.columns) {\n if ('column' in column && column.column === from) {\n column.column = to;\n }\n }\n }\n\n for (const exclude of dbTableData.excludes) {\n for (const column of exclude.columns) {\n if ('column' in column && column.column === from) {\n column.column = to;\n }\n }\n }\n\n for (const c of dbTableData.constraints) {\n if (c.check?.columns) {\n renameColumn(c.check.columns, from, to);\n }\n if (c.references) {\n renameColumn(c.references.columns, from, to);\n }\n }\n\n for (const c of dbStructure.constraints) {\n if (\n c.references &&\n c.references.foreignSchema === schema &&\n c.references.foreignTable === tableName\n ) {\n renameColumn(c.references.foreignColumns, from, to);\n }\n }\n\n continue;\n }\n }\n\n shape[key] = {\n type: 'add',\n item: column,\n };\n }\n};\n\nconst dropColumns = (\n { changeTableAst: { shape } }: ChangeTableData,\n columnsToDrop: KeyAndColumn[],\n) => {\n for (const { key, column } of columnsToDrop) {\n shape[key] = {\n type: 'drop',\n item: column,\n };\n }\n};\n\nconst changeColumns = async (\n adapter: AdapterBase,\n config: RakeDbConfig,\n structureToAstCtx: StructureToAstCtx,\n dbStructure: IntrospectedStructure,\n domainsMap: DbStructureDomainsMap,\n ast: RakeDbAst[],\n currentSchema: string,\n dbColumns: { [K: string]: DbStructure.Column },\n columnsToChange: ColumnsToChange,\n compareSql: CompareSql,\n changeTableData: ChangeTableData,\n typeCastsCache: TypeCastsCache,\n verifying: boolean | undefined,\n) => {\n for (const [\n key,\n { key: codeKey, dbName, column: codeColumn },\n ] of columnsToChange) {\n const dbColumnStructure = dbColumns[dbName];\n\n const dbColumn = instantiateDbColumn(\n structureToAstCtx,\n dbStructure,\n domainsMap,\n dbColumnStructure,\n );\n\n const action = await compareColumns(\n adapter,\n domainsMap,\n ast,\n currentSchema,\n compareSql,\n changeTableData,\n typeCastsCache,\n verifying,\n key,\n dbName,\n dbColumn,\n codeColumn,\n );\n\n if (action === 'change') {\n changeColumn(changeTableData, key, dbName, dbColumn, codeColumn);\n } else if (action === 'recreate') {\n changeTableData.changeTableAst.shape[key] = [\n {\n type: 'drop',\n item: dbColumn,\n },\n {\n type: 'add',\n item: codeColumn,\n },\n ];\n } else if (action !== 'recreate') {\n const to = codeColumn.data.name ?? codeKey;\n if (dbName !== to) {\n changeTableData.changeTableAst.shape[\n config.snakeCase\n ? dbName === toSnakeCase(codeKey)\n ? codeKey\n : dbName\n : dbName\n ] = {\n type: 'rename',\n name: config.snakeCase\n ? to === toSnakeCase(codeKey)\n ? codeKey\n : to\n : to,\n };\n }\n }\n }\n};\n\nconst compareColumns = async (\n adapter: AdapterBase,\n domainsMap: DbStructureDomainsMap,\n ast: RakeDbAst[],\n currentSchema: string,\n compareSql: CompareSql,\n changeTableData: ChangeTableData,\n typeCastsCache: TypeCastsCache,\n verifying: boolean | undefined,\n key: string,\n dbName: string,\n dbColumn: Column,\n codeColumn: Column,\n): Promise<'change' | 'recreate' | undefined> => {\n if (dbColumn instanceof ArrayColumn && codeColumn instanceof ArrayColumn) {\n dbColumn = dbColumn.data.item;\n codeColumn = codeColumn.data.item;\n }\n\n const dbType = getColumnDbType(dbColumn, currentSchema);\n const codeType = getColumnDbType(codeColumn, currentSchema);\n\n if (dbType !== codeType) {\n const typeCasts = await getTypeCasts(adapter, typeCastsCache);\n\n const dbBaseType = getColumnBaseType(dbColumn, domainsMap, dbType);\n const codeBaseType = getColumnBaseType(codeColumn, domainsMap, codeType);\n\n if (!typeCasts.get(dbBaseType)?.has(codeBaseType)) {\n if (\n !(dbColumn instanceof EnumColumn) ||\n !(codeColumn instanceof EnumColumn) ||\n !deepCompare(dbColumn.options, codeColumn.options)\n ) {\n if (verifying) throw new AbortSignal();\n\n const tableName = concatSchemaAndName(changeTableData.changeTableAst);\n const abort = await promptSelect({\n message: `Cannot cast type of ${tableName}'s column ${key} from ${dbType} to ${codeType}`,\n options: [\n `${colors.yellowBold(\n `-/+`,\n )} recreate the column, existing data will be ${colors.red(\n 'lost',\n )}`,\n `write migration manually`,\n ],\n });\n if (abort) {\n throw new AbortSignal();\n }\n\n dbColumn.data.name = codeColumn.data.name;\n return 'recreate';\n }\n }\n\n return 'change';\n }\n\n const dbData = dbColumn.data as unknown as RecordUnknown;\n const codeData = codeColumn.data as unknown as RecordUnknown;\n\n for (const key of ['isNullable', 'comment']) {\n if (dbData[key] !== codeData[key]) {\n return 'change';\n }\n }\n\n for (const key of [\n 'maxChars',\n 'collation',\n 'compression',\n 'numericPrecision',\n 'numericScale',\n 'dateTimePrecision',\n ]) {\n // Check if key in codeData so that default precision/scale values for such columns as integer aren't counted.\n // If column supports precision/scale, it should have it listed in the data, even if it's undefined.\n if (key in codeData && dbData[key] !== codeData[key]) {\n return 'change';\n }\n }\n\n if (dbColumn.data.isOfCustomType) {\n const { typmod } = dbColumn.data;\n if (typmod !== undefined && typmod !== -1) {\n const i = codeColumn.dataType.indexOf('(');\n if (i === -1 || codeColumn.dataType.slice(i + 1, -1) !== `${typmod}`) {\n return 'change';\n }\n }\n }\n\n if (\n !deepCompare(\n dbData.identity,\n codeData.identity\n ? {\n always: false,\n start: 1,\n increment: 1,\n cache: 1,\n cycle: false,\n ...(codeData.identity ?? {}),\n }\n : undefined,\n )\n ) {\n return 'change';\n }\n\n if (dbData.default !== undefined && codeData.default !== undefined) {\n const valuesBeforeLen = compareSql.values.length;\n const dbDefault = encodeColumnDefault(\n dbData.default,\n compareSql.values,\n dbColumn,\n ) as string;\n const dbValues = compareSql.values.slice(valuesBeforeLen);\n\n const codeDefault = encodeColumnDefault(\n codeData.default,\n compareSql.values,\n codeColumn,\n );\n const codeValues = compareSql.values.slice(valuesBeforeLen);\n\n if (\n dbValues.length !== codeValues.length ||\n (dbValues.length &&\n JSON.stringify(dbValues) !== JSON.stringify(codeValues))\n ) {\n compareSql.values.length = valuesBeforeLen;\n return 'change';\n } else if (dbDefault !== codeDefault && dbDefault !== `(${codeDefault})`) {\n const change = () => {\n changeColumn(changeTableData, key, dbName, dbColumn, codeColumn);\n if (!changeTableData.pushedAst) {\n changeTableData.pushedAst = true;\n ast.push(changeTableData.changeTableAst);\n }\n };\n\n compareSql.expressions.push({\n inDb: dbDefault,\n inCode: codeDefault,\n change,\n });\n }\n }\n\n return;\n};\n\nconst getTypeCasts = async (\n adapter: AdapterBase,\n typeCastsCache: TypeCastsCache,\n) => {\n let typeCasts = typeCastsCache.value;\n if (!typeCasts) {\n const { rows } = await adapter.arrays(`SELECT s.typname, t.typname\nFROM pg_cast\nJOIN pg_type AS s ON s.oid = castsource\nJOIN pg_type AS t ON t.oid = casttarget`);\n\n const directTypeCasts = new Map<string, Set<string>>();\n for (const [source, target] of rows) {\n const set = directTypeCasts.get(source);\n if (set) {\n set.add(target);\n } else {\n directTypeCasts.set(source, new Set([target]));\n }\n }\n\n typeCasts = new Map<string, Set<string>>();\n for (const [type, directSet] of directTypeCasts.entries()) {\n const set = new Set<string>(directSet);\n typeCasts.set(type, set);\n\n for (const subtype of directSet) {\n const subset = directTypeCasts.get(subtype);\n if (subset) {\n for (const type of subset) {\n set.add(type);\n }\n }\n }\n }\n\n typeCastsCache.value = typeCasts;\n }\n\n return typeCasts;\n};\n\nconst changeColumn = (\n changeTableData: ChangeTableData,\n key: string,\n dbName: string,\n dbColumn: Column,\n codeColumn: Column,\n) => {\n dbColumn.data.as = codeColumn.data.as = undefined;\n\n const simpleCodeColumn = Object.create(codeColumn);\n simpleCodeColumn.data = {\n ...codeColumn.data,\n primaryKey: undefined,\n indexes: undefined,\n excludes: undefined,\n foreignKeys: undefined,\n check: undefined,\n };\n\n changeTableData.changingColumns[dbName] = {\n from: dbColumn,\n to: simpleCodeColumn,\n };\n\n changeTableData.changeTableAst.shape[key] = {\n type: 'change',\n from: { column: dbColumn },\n to: { column: simpleCodeColumn },\n };\n};\n\nexport const getColumnDbType = (\n column: Column.Pick.DataAndDataType,\n currentSchema: string,\n) => {\n if (column instanceof EnumColumn) {\n const [schema = currentSchema, name] = getSchemaAndTableFromName(\n currentSchema,\n column.enumName,\n );\n return `${schema}.${name}`;\n } else if (column instanceof ArrayColumn) {\n const { item } = column.data;\n let type = item instanceof EnumColumn ? item.enumName : item.dataType;\n\n type = type.startsWith(currentSchema + '.')\n ? type.slice(currentSchema.length + 1)\n : type;\n\n return type + '[]'.repeat(column.data.arrayDims);\n } else if (column.data.isOfCustomType) {\n let type = column.dataType;\n\n const i = type.indexOf('(');\n if (i !== -1) {\n type = type.slice(0, i);\n }\n\n return type.includes('.') ? type : currentSchema + '.' + type;\n } else {\n return column.dataType;\n }\n};\n\nconst renameColumn = (columns: string[], from: string, to: string) => {\n for (let i = 0; i < columns.length; i++) {\n if (columns[i] === from) {\n columns[i] = to;\n }\n }\n};\n","import { Column, RawSql } from 'pqb/internal';\nimport {\n ArrayColumn,\n DbStructureDomainsMap,\n AdapterBase,\n deepCompare,\n emptyArray,\n TemplateLiteralArgs,\n} from 'pqb/internal';\nimport {\n RakeDbAst,\n getSchemaAndTableFromName,\n DbStructure,\n IntrospectedStructure,\n instantiateDbColumn,\n} from 'rake-db';\nimport { getColumnDbType } from './columns.generator';\nimport {\n CompareExpression,\n compareSqlExpressions,\n TableExpression,\n} from './generators.utils';\nimport { ComposeMigrationParams, PendingDbTypes } from '../composeMigration';\n\ninterface ComparableDomainCompare extends Omit<\n DbStructure.Domain,\n 'schemaName' | 'name'\n> {\n hasDefault: boolean;\n hasChecks: boolean;\n}\n\ninterface ComparableDomain {\n schemaName: string;\n name: string;\n column: Column;\n compare: ComparableDomainCompare;\n}\n\nexport interface CodeDomain {\n schemaName: string;\n name: string;\n column: Column;\n}\n\nexport const processDomains = async (\n ast: RakeDbAst[],\n adapter: AdapterBase,\n domainsMap: DbStructureDomainsMap,\n dbStructure: IntrospectedStructure,\n {\n codeItems: { domains },\n structureToAstCtx,\n currentSchema,\n internal: { generatorIgnore },\n }: ComposeMigrationParams,\n pendingDbTypes: PendingDbTypes,\n) => {\n const codeDomains: ComparableDomain[] = [];\n if (domains) {\n for (const { schemaName, name, column } of domains) {\n codeDomains.push(\n makeComparableDomain(currentSchema, schemaName, name, column),\n );\n }\n }\n\n const tableExpressions: TableExpression[] = [];\n const holdCodeDomains = new Set<ComparableDomain>();\n\n for (const domain of dbStructure.domains) {\n if (\n generatorIgnore?.schemas?.includes(domain.schemaName) ||\n generatorIgnore?.domains?.includes(domain.name)\n ) {\n continue;\n }\n\n const dbColumn = instantiateDbColumn(\n structureToAstCtx,\n dbStructure,\n domainsMap,\n {\n // not destructuring `domain` because need to ignore `numericPrecision`, `numericScale`, etc.,\n // that are loaded from db, but not defined in the code\n schemaName: domain.typeSchema,\n tableName: 'N/A',\n name: domain.name,\n typeSchema: domain.typeSchema,\n type: domain.type,\n arrayDims: domain.arrayDims,\n default: domain.default,\n isNullable: domain.isNullable,\n collate: domain.collate,\n maxChars: domain.maxChars,\n typmod: -1,\n },\n );\n\n if (domain.checks) {\n dbColumn.data.checks = domain.checks.map((check) => ({\n sql: new RawSql([[check]] as unknown as TemplateLiteralArgs),\n }));\n }\n\n const dbDomain = makeComparableDomain(\n currentSchema,\n domain.schemaName,\n domain.name,\n dbColumn,\n );\n\n const found = codeDomains.filter((codeDomain) =>\n deepCompare(dbDomain.compare, codeDomain.compare),\n );\n\n if ((domain.default || domain.checks?.length) && found.length) {\n for (const codeDomain of found) {\n holdCodeDomains.add(codeDomain);\n }\n\n const compare: CompareExpression['compare'] = [];\n pushCompareDefault(compare, domain, found);\n pushCompareChecks(compare, domain, found);\n\n const source = `(VALUES (NULL::${getColumnDbType(\n dbColumn,\n currentSchema,\n )})) t(value)`;\n\n tableExpressions.push({\n compare,\n source,\n handle(i) {\n const codeDomain = i === undefined ? undefined : found[i];\n if (!codeDomain) {\n ast.push(dropAst(dbDomain));\n } else {\n holdCodeDomains.delete(codeDomain);\n }\n },\n });\n } else if (found.length) {\n let i = codeDomains.findIndex(\n (codeDomain) =>\n codeDomain.name === dbDomain.name &&\n codeDomain.schemaName === dbDomain.schemaName,\n );\n if (i === -1) {\n i = 0;\n const first = found[0];\n ast.push({\n type: 'renameType',\n kind: 'DOMAIN',\n fromSchema: dbDomain.schemaName,\n from: dbDomain.name,\n toSchema: first.schemaName,\n to: first.name,\n });\n pendingDbTypes.add(first.schemaName, first.name);\n }\n\n codeDomains.splice(i, 1);\n } else {\n ast.push(dropAst(dbDomain));\n }\n }\n\n for (const codeDomain of codeDomains) {\n if (!holdCodeDomains.has(codeDomain)) {\n ast.push(createAst(codeDomain));\n pendingDbTypes.add(codeDomain.schemaName, codeDomain.name);\n }\n }\n\n if (tableExpressions.length) {\n await compareSqlExpressions(tableExpressions, adapter);\n\n if (holdCodeDomains.size) {\n for (const codeDomain of holdCodeDomains.keys()) {\n ast.push(createAst(codeDomain));\n pendingDbTypes.add(codeDomain.schemaName, codeDomain.name);\n }\n }\n }\n};\n\nconst makeComparableDomain = (\n currentSchema: string,\n schemaName: string,\n name: string,\n column: Column,\n): ComparableDomain => {\n let arrayDims = 0;\n const isNullable = column.data.isNullable ?? false;\n let inner = column;\n while (inner instanceof ArrayColumn) {\n inner = inner.data.item;\n arrayDims++;\n }\n const fullType = getColumnDbType(inner, currentSchema);\n const [typeSchema = 'pg_catalog', type] = getSchemaAndTableFromName(\n currentSchema,\n fullType,\n );\n\n return {\n schemaName,\n name,\n column,\n compare: {\n type,\n typeSchema,\n arrayDims,\n isNullable,\n maxChars: inner.data.maxChars,\n numericPrecision: inner.data.numericPrecision,\n numericScale: inner.data.numericScale,\n dateTimePrecision: inner.data.dateTimePrecision,\n collate: column.data.collate,\n hasDefault: column.data.default !== undefined,\n hasChecks: !!column.data.checks?.length,\n },\n };\n};\n\nconst pushCompareDefault = (\n compare: CompareExpression['compare'],\n domain: DbStructure.Domain,\n found: ComparableDomain[],\n) => {\n if (domain.default) {\n compare.push({\n inDb: domain.default,\n inCode: found.map((codeDomain) => {\n const value = codeDomain.column.data.default;\n if ('sql' in (value as Column.Data.Check)) {\n return (value as Column.Data.Check).sql;\n }\n return value as string;\n }),\n });\n }\n};\n\nconst pushCompareChecks = (\n compare: CompareExpression['compare'],\n domain: DbStructure.Domain,\n found: ComparableDomain[],\n) => {\n if (domain.checks?.length) {\n const inCode = found.flatMap(\n (codeDomain) =>\n codeDomain.column.data.checks?.map((check) =>\n typeof check === 'string' ? check : check.sql,\n ) || emptyArray,\n );\n\n compare.push(\n ...domain.checks.map((check) => ({\n inDb: check,\n inCode,\n })),\n );\n }\n};\n\nconst dropAst = (dbDomain: ComparableDomain): RakeDbAst.Domain => ({\n type: 'domain',\n action: 'drop',\n schema: dbDomain.schemaName,\n name: dbDomain.name,\n baseType: dbDomain.column,\n});\n\nconst createAst = (codeDomain: ComparableDomain): RakeDbAst.Domain => ({\n type: 'domain',\n action: 'create',\n schema: codeDomain.schemaName,\n name: codeDomain.name,\n baseType: codeDomain.column,\n});\n","import { DbStructure, IntrospectedStructure, RakeDbAst } from 'rake-db';\nimport { promptCreateOrRename } from './generators.utils';\nimport { ComposeMigrationParams, PendingDbTypes } from '../composeMigration';\n\nexport interface EnumItem {\n schema?: string;\n name: string;\n values: [string, ...string[]];\n}\n\nexport const processEnums = async (\n ast: RakeDbAst[],\n dbStructure: IntrospectedStructure,\n {\n codeItems: { enums },\n currentSchema,\n verifying,\n internal: { generatorIgnore },\n }: ComposeMigrationParams,\n pendingDbTypes: PendingDbTypes,\n): Promise<void> => {\n const createEnums: EnumItem[] = [];\n const dropEnums: DbStructure.Enum[] = [];\n\n for (const [, codeEnum] of enums) {\n const { schema = currentSchema, name } = codeEnum;\n const dbEnum = dbStructure.enums.find(\n (x) => x.schemaName === schema && x.name === name,\n );\n if (!dbEnum) {\n createEnums.push(codeEnum);\n }\n }\n\n for (const dbEnum of dbStructure.enums) {\n if (\n generatorIgnore?.schemas?.includes(dbEnum.schemaName) ||\n generatorIgnore?.enums?.includes(dbEnum.name)\n ) {\n continue;\n }\n\n const codeEnum = enums.get(`${dbEnum.schemaName}.${dbEnum.name}`);\n if (codeEnum) {\n changeEnum(ast, dbEnum, codeEnum, pendingDbTypes);\n continue;\n }\n\n const i = createEnums.findIndex((x) => x.name === dbEnum.name);\n if (i !== -1) {\n const codeEnum = createEnums[i];\n createEnums.splice(i, 1);\n const fromSchema = dbEnum.schemaName;\n const toSchema = codeEnum.schema ?? currentSchema;\n\n renameColumnsTypeSchema(dbStructure, fromSchema, toSchema);\n\n ast.push({\n type: 'renameType',\n kind: 'TYPE',\n fromSchema,\n from: dbEnum.name,\n toSchema,\n to: dbEnum.name,\n });\n pendingDbTypes.add(toSchema, dbEnum.name);\n\n changeEnum(ast, dbEnum, codeEnum, pendingDbTypes);\n\n continue;\n }\n\n dropEnums.push(dbEnum);\n }\n\n for (const codeEnum of createEnums) {\n if (dropEnums.length) {\n const i = await promptCreateOrRename(\n 'enum',\n codeEnum.name,\n dropEnums.map((x) => x.name),\n verifying,\n );\n if (i) {\n const dbEnum = dropEnums[i - 1];\n dropEnums.splice(i - 1, 1);\n\n const fromSchema = dbEnum.schemaName;\n const from = dbEnum.name;\n const toSchema = codeEnum.schema ?? currentSchema;\n const to = codeEnum.name;\n\n if (fromSchema !== toSchema) {\n renameColumnsTypeSchema(dbStructure, fromSchema, toSchema);\n }\n\n for (const table of dbStructure.tables) {\n for (const column of table.columns) {\n if (column.type === from) {\n column.type = to;\n }\n }\n }\n\n ast.push({\n type: 'renameType',\n kind: 'TYPE',\n fromSchema,\n from,\n toSchema,\n to,\n });\n pendingDbTypes.add(toSchema, to);\n\n changeEnum(ast, dbEnum, codeEnum, pendingDbTypes);\n\n continue;\n }\n }\n\n ast.push({\n type: 'enum',\n action: 'create',\n ...codeEnum,\n });\n pendingDbTypes.add(codeEnum.schema, codeEnum.name);\n }\n\n for (const dbEnum of dropEnums) {\n ast.push({\n type: 'enum',\n action: 'drop',\n schema: dbEnum.schemaName,\n name: dbEnum.name,\n values: dbEnum.values,\n });\n }\n};\n\nconst changeEnum = (\n ast: RakeDbAst[],\n dbEnum: DbStructure.Enum,\n codeEnum: EnumItem,\n pendingDbTypes: PendingDbTypes,\n) => {\n const { values: dbValues } = dbEnum;\n const { values: codeValues, schema, name } = codeEnum;\n\n if (dbValues.length < codeValues.length) {\n if (!dbValues.some((value) => !codeValues.includes(value))) {\n ast.push({\n type: 'enumValues',\n action: 'add',\n schema,\n name,\n values: codeValues.filter((value) => !dbValues.includes(value)),\n });\n pendingDbTypes.add(schema, name);\n return;\n }\n } else if (dbValues.length > codeValues.length) {\n if (!codeValues.some((value) => !dbValues.includes(value))) {\n ast.push({\n type: 'enumValues',\n action: 'drop',\n schema,\n name,\n values: dbValues.filter((value) => !codeValues.includes(value)),\n });\n pendingDbTypes.add(schema, name);\n return;\n }\n } else if (!dbValues.some((value) => !codeValues.includes(value))) {\n return;\n }\n\n ast.push({\n type: 'changeEnumValues',\n schema,\n name,\n fromValues: dbValues,\n toValues: codeValues,\n });\n pendingDbTypes.add(schema, name);\n};\n\nconst renameColumnsTypeSchema = (\n dbStructure: IntrospectedStructure,\n from: string,\n to: string,\n) => {\n for (const table of dbStructure.tables) {\n for (const column of table.columns) {\n if (column.typeSchema === from) {\n column.typeSchema = to;\n }\n }\n }\n};\n","import { Column } from 'pqb/internal';\nimport { toArray, toSnakeCase } from 'pqb/internal';\nimport { ChangeTableData } from './tables.generator';\nimport { checkForColumnAddOrDrop } from './generators.utils';\nimport { RakeDbConfig } from 'rake-db';\n\nexport const processPrimaryKey = (\n config: RakeDbConfig,\n changeTableData: ChangeTableData,\n) => {\n const { codeTable } = changeTableData;\n\n const columnsPrimaryKey: { key: string; name: string }[] = [];\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as Column;\n if (column.data.primaryKey) {\n columnsPrimaryKey.push({ key, name: column.data.name ?? key });\n }\n }\n\n changePrimaryKey(config, columnsPrimaryKey, changeTableData);\n renamePrimaryKey(changeTableData);\n};\n\nconst changePrimaryKey = (\n config: RakeDbConfig,\n columnsPrimaryKey: { key: string; name: string }[],\n {\n codeTable,\n dbTableData: { primaryKey: dbPrimaryKey },\n changeTableAst: { shape, add, drop },\n changingColumns,\n }: ChangeTableData,\n) => {\n const tablePrimaryKey = codeTable.internal.tableData.primaryKey;\n const primaryKey = [\n ...new Set([\n ...columnsPrimaryKey,\n ...((config.snakeCase\n ? tablePrimaryKey?.columns.map((key) => ({\n key,\n name: toSnakeCase(key),\n }))\n : tablePrimaryKey?.columns.map((key) => ({ key, name: key }))) ?? []),\n ]),\n ];\n\n if (\n dbPrimaryKey &&\n primaryKey.length === dbPrimaryKey.columns.length &&\n !primaryKey.some(\n ({ name }) => !dbPrimaryKey.columns.some((dbName) => name === dbName),\n )\n ) {\n if (primaryKey.length === 1) {\n const { key } = primaryKey[0];\n const changes = shape[key] && toArray(shape[key]);\n if (changes) {\n for (const change of changes) {\n if (change.type !== 'change') continue;\n\n if (change.from.column) {\n change.from.column.data.primaryKey = undefined;\n }\n\n if (change.to.column) {\n const column = Object.create(change.to.column);\n column.data = { ...column.data, primaryKey: undefined };\n change.to.column = column;\n }\n }\n }\n }\n return;\n }\n\n const toDrop = dbPrimaryKey?.columns.filter(\n (key) => !checkForColumnAddOrDrop(shape, key),\n );\n if (toDrop?.length) {\n if (toDrop.length === 1 && changingColumns[toDrop[0]]) {\n const column = changingColumns[toDrop[0]];\n column.from.data.primaryKey =\n dbPrimaryKey?.name ?? (true as unknown as string);\n } else {\n drop.primaryKey = { columns: toDrop, name: dbPrimaryKey?.name };\n }\n }\n\n const toAdd = primaryKey.filter(\n ({ key }) => !checkForColumnAddOrDrop(shape, key),\n );\n if (toAdd.length) {\n if (toAdd.length === 1 && changingColumns[toAdd[0].name]) {\n const column = changingColumns[toAdd[0].name];\n column.to.data.primaryKey =\n tablePrimaryKey?.name ?? (true as unknown as string);\n } else {\n add.primaryKey = {\n columns: toAdd.map((c) => c.key),\n name: tablePrimaryKey?.name,\n };\n }\n }\n};\n\nconst renamePrimaryKey = ({\n codeTable,\n dbTableData: { primaryKey: dbPrimaryKey },\n schema,\n delayedAst,\n}: ChangeTableData) => {\n const tablePrimaryKey = codeTable.internal.tableData.primaryKey;\n if (\n dbPrimaryKey &&\n tablePrimaryKey &&\n dbPrimaryKey?.name !== tablePrimaryKey?.name\n ) {\n delayedAst.push({\n type: 'renameTableItem',\n kind: 'CONSTRAINT',\n tableSchema: schema,\n tableName: codeTable.table,\n from: dbPrimaryKey.name ?? `${codeTable.table}_pkey`,\n to: tablePrimaryKey.name ?? `${codeTable}_pkey`,\n });\n }\n};\n","import {\n RakeDbAst,\n getIndexName,\n DbStructure,\n getExcludeName,\n RakeDbConfig,\n} from 'rake-db';\nimport { Column } from 'pqb/internal';\nimport {\n TableData,\n deepCompare,\n MaybeArray,\n RecordUnknown,\n toArray,\n toSnakeCase,\n SearchWeight,\n} from 'pqb/internal';\nimport { ChangeTableData } from './tables.generator';\nimport { checkForColumnAddOrDrop, CompareExpression } from './generators.utils';\nimport { CodeTable } from '../generate';\n\ninterface CodeItem {\n columnKeys: TableData.Index.ColumnOrExpressionOptions[];\n includeKeys?: MaybeArray<string>;\n}\n\ninterface CodeIndex extends TableData.Index, CodeItem {}\ninterface CodeExclude extends TableData.Exclude, CodeItem {}\n\ninterface CodeItems {\n indexes: CodeIndex[];\n excludes: CodeExclude[];\n}\n\ninterface ComparableIndexColumn {\n column?: string;\n collate?: string;\n opclass?: string;\n order?: string;\n weight?: SearchWeight;\n hasExpression: boolean;\n}\n\ninterface ComparableIndex {\n name?: string;\n using?: string;\n unique?: boolean;\n include?: string[];\n nullsNotDistinct?: boolean;\n tablespace?: string;\n tsVector?: boolean;\n language?: string;\n languageColumn?: string;\n columns: ComparableIndexColumn[];\n hasWith: boolean;\n hasWhere: boolean;\n hasExpression: boolean;\n columnKeys?: string[];\n includeKeys?: string[];\n}\n\ninterface ComparableExcludeColumn extends ComparableIndexColumn {\n with: string;\n}\n\ninterface ComparableExclude extends ComparableIndex {\n columns: ComparableExcludeColumn[];\n}\n\ninterface ComparableItems {\n indexes: ComparableIndex[];\n excludes: ComparableExclude[];\n}\n\ninterface SkipCodeItems {\n indexes: Map<number, boolean>;\n excludes: Map<number, boolean>;\n}\n\ninterface HoldCodeItems {\n indexes: Map<TableData.Index, boolean>;\n excludes: Map<TableData.Exclude, boolean>;\n}\n\ninterface Wait {\n indexes: number;\n excludes: number;\n}\n\ninterface ProcessParams {\n config: RakeDbConfig;\n changeTableData: ChangeTableData;\n codeComparableItems: ComparableItems;\n codeItems: CodeItems;\n skipCodeItems: SkipCodeItems;\n holdCodeItems: HoldCodeItems;\n wait: Wait;\n ast: RakeDbAst[];\n compareExpressions: CompareExpression[];\n}\n\nexport const processIndexesAndExcludes = (\n config: RakeDbConfig,\n changeTableData: ChangeTableData,\n ast: RakeDbAst[],\n compareExpressions: CompareExpression[],\n) => {\n const codeItems = collectCodeIndexes(config, changeTableData);\n const codeComparableItems = collectCodeComparableItems(config, codeItems);\n\n // to skip indexes without SQL from being added when they are matched with already existing indexes\n const skipCodeItems: SkipCodeItems = {\n indexes: new Map(),\n excludes: new Map(),\n };\n\n // to skip indexes with SQL from being added while their SQL is being asynchronously compared with existing indexes\n const holdCodeItems: HoldCodeItems = {\n indexes: new Map(),\n excludes: new Map(),\n };\n\n const processParams: ProcessParams = {\n config,\n changeTableData,\n codeComparableItems,\n codeItems,\n skipCodeItems,\n holdCodeItems,\n // counter for async SQL comparisons that are in progress\n wait: { indexes: 0, excludes: 0 },\n ast,\n compareExpressions,\n };\n\n processItems(processParams, 'indexes');\n processItems(processParams, 'excludes');\n\n addMainItems(\n changeTableData,\n codeItems,\n skipCodeItems,\n holdCodeItems,\n 'indexes',\n );\n addMainItems(\n changeTableData,\n codeItems,\n skipCodeItems,\n holdCodeItems,\n 'excludes',\n );\n};\n\nconst processItems = (\n {\n config,\n changeTableData,\n codeComparableItems,\n codeItems,\n skipCodeItems,\n holdCodeItems,\n wait,\n ast,\n compareExpressions,\n }: ProcessParams,\n key: 'indexes' | 'excludes',\n) => {\n const {\n changeTableAst: { shape },\n } = changeTableData;\n\n const dbItems = changeTableData.dbTableData[key];\n\n for (const dbItem of dbItems) {\n const hasAddedOrDroppedColumn = dbItem.columns.some(\n (column) =>\n 'column' in column && checkForColumnAddOrDrop(shape, column.column),\n );\n if (hasAddedOrDroppedColumn) continue;\n\n normalizeItem(dbItem);\n\n const { found, rename, foundAndHasSql } = findMatchingItem(\n dbItem,\n codeComparableItems,\n codeItems,\n skipCodeItems,\n changeTableData.codeTable.table,\n config,\n key,\n );\n\n const { columns: dbColumns } = dbItem;\n\n if (!foundAndHasSql) {\n handleItemChange(\n changeTableData,\n dbItem,\n dbColumns,\n found[0],\n rename[0],\n key,\n );\n continue;\n }\n\n for (const codeItem of found) {\n holdCodeItems[key].set(codeItem as never, true);\n }\n\n const compare: CompareExpression['compare'] = [];\n for (let i = 0; i < dbItem.columns.length; i++) {\n const column = dbItem.columns[i];\n if (!('expression' in column)) continue;\n\n compare.push({\n inDb: column.expression,\n inCode: found.map(\n (x) => (x.columns[i] as { expression: string }).expression,\n ),\n });\n }\n\n if (dbItem.with) {\n compare.push({\n inDb: dbItem.with,\n inCode: found.map((x) => x.options.with as string),\n });\n }\n\n if (dbItem.where) {\n compare.push({\n inDb: dbItem.where,\n inCode: found.map((x) => x.options.where as string),\n });\n }\n\n wait[key]++;\n compareExpressions.push({\n compare,\n handle(i) {\n const codeItem = i === undefined ? undefined : found[i];\n\n handleItemChange(\n changeTableData,\n dbItem,\n dbColumns,\n codeItem,\n i === undefined ? undefined : rename[i],\n key,\n );\n\n if (codeItem) {\n holdCodeItems[key].delete(codeItem as never);\n }\n\n if (!--wait[key] && holdCodeItems[key].size) {\n addItems(changeTableData, [...holdCodeItems[key].keys()], key);\n\n if (!changeTableData.pushedAst) {\n changeTableData.pushedAst = true;\n ast.push(changeTableData.changeTableAst);\n }\n }\n },\n });\n }\n};\n\nconst collectCodeIndexes = (\n config: RakeDbConfig,\n { codeTable, changeTableAst: { shape } }: ChangeTableData,\n): CodeItems => {\n const codeItems: CodeItems = { indexes: [], excludes: [] };\n\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as Column;\n if (!column.data.indexes && !column.data.excludes) continue;\n\n const name = column.data.name ?? key;\n if (checkForColumnAddOrDrop(shape, name)) continue;\n\n pushCodeColumnItems(config, codeItems, key, name, column, 'indexes');\n pushCodeColumnItems(config, codeItems, key, name, column, 'excludes');\n }\n\n pushCodeCompositeItems(config, codeTable, codeItems, 'indexes');\n pushCodeCompositeItems(config, codeTable, codeItems, 'excludes');\n\n return codeItems;\n};\n\nconst pushCodeColumnItems = (\n config: RakeDbConfig,\n codeItems: CodeItems,\n columnKey: string,\n name: string,\n column: Column,\n key: 'indexes' | 'excludes',\n) => {\n const items = column.data[key];\n if (!items) return;\n\n codeItems[key].push(\n ...(items as TableData.ColumnExclude[]).map(\n ({\n options: { collate, opclass, order, weight, ...options },\n with: wi,\n ...index\n }) => {\n const w = key === 'excludes' ? wi : (undefined as never);\n return {\n columns: [\n {\n collate,\n opclass,\n order,\n weight,\n column: name,\n with: w,\n },\n ],\n ...index,\n options: options.include\n ? config.snakeCase\n ? {\n ...options,\n include: toArray(options.include).map(toSnakeCase),\n }\n : options\n : options,\n columnKeys: [\n {\n collate,\n opclass,\n order,\n weight,\n column: columnKey,\n with: w,\n },\n ],\n includeKeys: options.include,\n };\n },\n ),\n );\n};\n\nconst pushCodeCompositeItems = (\n config: RakeDbConfig,\n codeTable: CodeTable,\n codeItems: CodeItems,\n key: 'indexes' | 'excludes',\n) => {\n const items = codeTable.internal.tableData[key];\n if (!items) return;\n\n codeItems[key].push(\n ...(items as TableData.Exclude[]).map((x) => ({\n ...x,\n columns: config.snakeCase\n ? x.columns.map((c) =>\n 'column' in c ? { ...c, column: toSnakeCase(c.column) } : c,\n )\n : x.columns,\n columnKeys: x.columns,\n options:\n x.options.include && config.snakeCase\n ? {\n ...x.options,\n include: toArray(x.options.include).map(toSnakeCase),\n }\n : x.options,\n includeKeys: x.options.include,\n })),\n );\n};\n\nconst collectCodeComparableItems = (\n config: RakeDbConfig,\n codeItems: CodeItems,\n): ComparableItems => {\n return {\n indexes: collectCodeComparableItemsType(config, codeItems, 'indexes'),\n excludes: collectCodeComparableItemsType(config, codeItems, 'excludes'),\n };\n};\n\nconst collectCodeComparableItemsType = (\n config: RakeDbConfig,\n codeItems: CodeItems,\n key: 'indexes' | 'excludes',\n): ComparableExclude[] => {\n return codeItems[key].map((codeItem) => {\n normalizeItem(codeItem.options as never);\n\n return itemToComparable({\n ...codeItem.options,\n include:\n codeItem.options.include === undefined\n ? undefined\n : config.snakeCase\n ? toArray(codeItem.options.include).map(toSnakeCase)\n : toArray(codeItem.options.include),\n columns: codeItem.columns,\n name: codeItem.options.name,\n columnKeys: codeItem.columnKeys,\n includeKeys: codeItem.includeKeys,\n });\n }) as never;\n};\n\nconst normalizeItem = (item: {\n using?: string;\n unique?: boolean;\n nullsNotDistinct?: boolean;\n columns: RecordUnknown[];\n exclude?: string[];\n}) => {\n if (item.using) item.using = item.using.toLowerCase();\n if (item.using === 'btree') item.using = undefined;\n if (!item.unique) item.unique = undefined;\n if (item.nullsNotDistinct === false) item.nullsNotDistinct = undefined;\n if (item.exclude) {\n for (let i = 0; i < item.columns.length; i++) {\n item.columns[i].with = item.exclude[i];\n }\n }\n};\n\nconst itemToComparable = (\n index: TableData.Index.Options & {\n columns: DbStructure.Index['columns'];\n name?: string;\n columnKeys?: TableData.Index.ColumnOrExpressionOptions[];\n includeKeys?: MaybeArray<string>;\n },\n) => {\n let hasExpression = false;\n const columns = index.columns.map((column) => {\n const result = {\n ...column,\n expression: undefined,\n hasExpression: 'expression' in column,\n };\n if (result.hasExpression) hasExpression = true;\n return result;\n });\n\n return {\n ...index,\n schemaName: undefined,\n tableName: undefined,\n with: undefined,\n hasWith: !!index.with,\n where: undefined,\n hasWhere: !!index.where,\n columns,\n hasExpression,\n } as ComparableIndex;\n};\n\ninterface ItemChange {\n found: TableData.Index[] | TableData.Exclude[];\n rename: (string | undefined)[];\n}\n\nconst findMatchingItem = (\n dbItem: DbStructure.Index | DbStructure.Exclude,\n codeComparableItems: ComparableItems,\n codeItems: CodeItems,\n skipCodeItems: SkipCodeItems,\n tableName: string,\n config: RakeDbConfig,\n key: 'indexes' | 'excludes',\n) => {\n const dbComparableItem = itemToComparable(\n key === 'indexes'\n ? dbItem\n : {\n ...dbItem,\n exclude: undefined as never,\n columns: dbItem.columns.map((column, i) => ({\n ...column,\n with: (dbItem as DbStructure.Exclude).exclude[i],\n })),\n },\n );\n\n const { found, rename } = findMatchingItemWithoutSql(\n dbComparableItem,\n codeComparableItems,\n codeItems,\n skipCodeItems,\n tableName,\n config,\n key,\n );\n\n const foundAndHasSql = found.length && checkIfItemHasSql(dbComparableItem);\n\n return { found, rename, foundAndHasSql };\n};\n\nconst findMatchingItemWithoutSql = (\n dbItem: ComparableIndex | ComparableExclude,\n codeComparableItems: ComparableItems,\n codeItems: CodeItems,\n skipCodeItems: SkipCodeItems,\n tableName: string,\n config: RakeDbConfig,\n key: 'indexes' | 'excludes',\n): ItemChange => {\n const found: (TableData.Index | TableData.Exclude)[] = [];\n const rename: (string | undefined)[] = [];\n\n const { columns: dbColumns, ...dbItemWithoutColumns } = dbItem;\n\n for (let i = 0; i < codeComparableItems[key].length; i++) {\n if (skipCodeItems[key].has(i)) continue;\n\n const { columns: codeColumns, ...codeItem } = codeComparableItems[key][i];\n if (\n dbColumns.length === codeColumns.length &&\n !dbColumns.some((dbColumn, i) => !deepCompare(dbColumn, codeColumns[i]))\n ) {\n let a: RecordUnknown = dbItemWithoutColumns;\n let b = codeItem;\n const codeName =\n b.name ??\n (key === 'indexes' ? getIndexName : getExcludeName)(\n tableName,\n dbColumns,\n );\n if (a.name !== b.name) {\n a = { ...a, name: undefined };\n b = {\n ...b,\n name: undefined,\n columnKeys: undefined,\n includeKeys: undefined,\n };\n if (a.language && !b.language) {\n b.language = config.language ?? 'english';\n }\n\n if (deepCompare(a, b)) {\n found.push(codeItems[key][i]);\n rename.push(\n dbItemWithoutColumns.name !== codeName ? codeName : undefined,\n );\n }\n } else {\n const {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n columnKeys,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n includeKeys,\n ...codeItemWithoutKeys\n } = codeItem;\n\n if (deepCompare(dbItemWithoutColumns, codeItemWithoutKeys)) {\n found.push(codeItems[key][i]);\n rename.push(undefined);\n }\n }\n\n if (found.length && !checkIfItemHasSql(codeItem)) {\n skipCodeItems[key].set(i, true);\n }\n }\n }\n\n return { found, rename };\n};\n\nconst checkIfItemHasSql = (\n x: Pick<ComparableIndex, 'hasWith' | 'hasWhere' | 'hasExpression'>,\n) => x.hasWith || x.hasWhere || x.hasExpression;\n\nconst handleItemChange = (\n {\n changeTableAst,\n schema,\n codeTable,\n changingColumns,\n delayedAst,\n }: ChangeTableData,\n dbItem: DbStructure.Index | DbStructure.Exclude,\n dbColumns: DbStructure.Index['columns'],\n found: TableData.Index | TableData.Exclude | undefined,\n rename: string | undefined,\n key: 'indexes' | 'excludes',\n) => {\n if (!found) {\n const name =\n dbItem.name ===\n (key === 'indexes' ? getIndexName : getExcludeName)(\n changeTableAst.name,\n dbColumns,\n )\n ? undefined\n : dbItem.name;\n\n if (dbColumns.length === 1 && 'column' in dbColumns[0]) {\n const dbColumn = dbColumns[0];\n const column = changingColumns[dbColumn.column];\n if (column) {\n (column.from.data[key] ??= []).push({\n options: { ...dbItem, name },\n with: (key === 'indexes'\n ? undefined\n : (dbColumn as unknown as { with: string }).with) as never,\n });\n return;\n }\n }\n\n (changeTableAst.drop[key] ??= []).push({\n columns: dbColumns,\n options: { ...dbItem, name },\n });\n } else if (rename) {\n delayedAst.push({\n type: 'renameTableItem',\n kind: key === 'indexes' ? 'INDEX' : 'CONSTRAINT',\n tableSchema: schema,\n tableName: codeTable.table,\n from: dbItem.name,\n to: rename,\n });\n }\n};\n\ninterface IndexWithMaybeColumnNames extends TableData.Index {\n columnNames?: TableData.Index.ColumnOrExpressionOptions[];\n}\n\nconst addMainItems = (\n changeTableData: ChangeTableData,\n codeItems: CodeItems,\n skipCodeItems: SkipCodeItems,\n holdCodeItems: HoldCodeItems,\n key: 'indexes' | 'excludes',\n) => {\n const itemsToAdd = codeItems[key].filter(\n (item, i) =>\n !skipCodeItems[key].has(i) && !holdCodeItems[key].has(item as never),\n );\n if (itemsToAdd.length) {\n addItems(\n changeTableData,\n itemsToAdd.map((x) => ({\n ...x,\n columns: x.columnKeys,\n columnNames: x.columns,\n options: x.options.include\n ? { ...x.options, include: x.includeKeys }\n : x.options,\n })),\n key,\n );\n }\n};\n\nconst addItems = (\n { changeTableAst, changingColumns }: ChangeTableData,\n add: IndexWithMaybeColumnNames[],\n key: 'indexes' | 'excludes',\n) => {\n const items = (changeTableAst.add[key] ??= []);\n for (const item of add) {\n if (item.columns.length === 1 && 'column' in item.columns[0]) {\n const column =\n changingColumns[\n ((item.columnNames || item.columns)[0] as { column: string }).column\n ];\n if (column) {\n (column.to.data[key] ??= []).push(\n key === 'indexes'\n ? item\n : ({\n ...item,\n with: (item as TableData.Exclude).columns[0].with,\n } as never),\n );\n continue;\n }\n }\n\n items.push(item);\n }\n};\n","import {\n RakeDbAst,\n DbStructure,\n concatSchemaAndName,\n getSchemaAndTableFromName,\n getConstraintName,\n RakeDbConfig,\n} from 'rake-db';\nimport { Column } from 'pqb/internal';\nimport { TableData, deepCompare, toSnakeCase } from 'pqb/internal';\nimport { ChangeTableData, TableShapes } from './tables.generator';\nimport { checkForColumnAddOrDrop } from './generators.utils';\n\ninterface Constraint extends TableData.Constraint {\n references: TableData.References;\n}\n\ninterface CodeForeignKey {\n references: DbStructure.References;\n codeConstraint: Constraint;\n}\n\ninterface ReferencesWithStringTable extends TableData.References {\n fnOrTable: string;\n}\n\nconst mapMatchToDb: {\n [K in TableData.References.Match]: DbStructure.ForeignKeyMatch;\n} = {\n FULL: 'f',\n PARTIAL: 'p',\n SIMPLE: 's',\n};\n\nconst mapMatchToCode = {} as {\n [K in DbStructure.ForeignKeyMatch]: TableData.References.Match;\n};\nfor (const key in mapMatchToDb) {\n mapMatchToCode[\n mapMatchToDb[\n key as TableData.References.Match\n ] as DbStructure.ForeignKeyMatch\n ] = key as TableData.References.Match;\n}\n\nconst mapActionToDb: {\n [K in TableData.References.Action]: DbStructure.ForeignKeyAction;\n} = {\n 'NO ACTION': 'a',\n RESTRICT: 'r',\n CASCADE: 'c',\n 'SET NULL': 'n',\n 'SET DEFAULT': 'd',\n};\n\nconst mapActionToCode = {} as {\n [K in DbStructure.ForeignKeyAction]: TableData.References.Action;\n};\nfor (const key in mapActionToDb) {\n mapActionToCode[\n mapActionToDb[\n key as TableData.References.Action\n ] as DbStructure.ForeignKeyAction\n ] = key as TableData.References.Action;\n}\n\nexport const processForeignKeys = (\n config: RakeDbConfig,\n ast: RakeDbAst[],\n changeTables: ChangeTableData[],\n currentSchema: string,\n tableShapes: TableShapes,\n): void => {\n for (const changeTableData of changeTables) {\n const codeForeignKeys = collectCodeFkeys(\n config,\n changeTableData,\n currentSchema,\n );\n\n const { codeTable, dbTableData, changeTableAst, schema, changingColumns } =\n changeTableData;\n const { shape, add, drop } = changeTableAst;\n let changed = false;\n\n for (const dbConstraint of dbTableData.constraints) {\n const { references: dbReferences } = dbConstraint;\n if (!dbReferences) continue;\n\n const hasChangedColumn = dbReferences.columns.some((column) =>\n checkForColumnAddOrDrop(shape, column),\n );\n if (hasChangedColumn) continue;\n\n const foreignShape =\n tableShapes[\n `${dbReferences.foreignSchema}.${dbReferences.foreignTable}`\n ];\n const hasForeignChangedColumn =\n foreignShape &&\n dbReferences.foreignColumns.some((column) => {\n return checkForColumnAddOrDrop(foreignShape, column);\n });\n if (hasForeignChangedColumn) continue;\n\n let found = false;\n let rename: string | undefined;\n for (let i = 0; i < codeForeignKeys.length; i++) {\n const codeForeignKey = codeForeignKeys[i];\n const codeReferences = codeForeignKey.references;\n if (deepCompare(dbReferences, codeReferences)) {\n found = true;\n codeForeignKeys.splice(i, 1);\n\n const codeName =\n codeForeignKey.codeConstraint.name ??\n getConstraintName(\n codeTable.table,\n codeForeignKey,\n config.snakeCase,\n );\n if (codeName !== dbConstraint.name) {\n rename = codeName;\n }\n }\n }\n\n if (!found) {\n const foreignKey = dbForeignKeyToCodeForeignKey(\n config,\n dbConstraint,\n dbReferences,\n );\n\n if (\n dbReferences.columns.length === 1 &&\n changingColumns[dbReferences.columns[0]]\n ) {\n const column = changingColumns[dbReferences.columns[0]];\n (column.from.data.foreignKeys ??= []).push({\n fnOrTable: foreignKey.references.fnOrTable,\n foreignColumns: foreignKey.references.foreignColumns,\n options: foreignKey.references.options,\n });\n } else {\n (drop.constraints ??= []).push(foreignKey);\n }\n\n changed = true;\n } else if (rename) {\n ast.push({\n type: 'renameTableItem',\n kind: 'CONSTRAINT',\n tableSchema: schema,\n tableName: codeTable.table,\n from: dbConstraint.name,\n to: rename,\n });\n }\n }\n\n if (codeForeignKeys.length) {\n const constraints = (add.constraints ??= []);\n for (const { codeConstraint, references } of codeForeignKeys) {\n if (\n references.columns.length === 1 &&\n changingColumns[references.columns[0]]\n ) {\n const column = changingColumns[references.columns[0]];\n (column.to.data.foreignKeys ??= []).push({\n fnOrTable: references.foreignTable,\n foreignColumns: codeConstraint.references.foreignColumns,\n options: codeConstraint.references.options,\n });\n } else {\n constraints.push(codeConstraint);\n }\n }\n\n changed = true;\n }\n\n if (changed && !changeTableData.pushedAst) {\n changeTableData.pushedAst = true;\n ast.push(changeTableData.changeTableAst);\n }\n }\n};\n\nconst collectCodeFkeys = (\n config: RakeDbConfig,\n { codeTable, changeTableAst: { shape } }: ChangeTableData,\n currentSchema: string,\n): CodeForeignKey[] => {\n const codeForeignKeys: CodeForeignKey[] = [];\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as Column;\n if (!column.data.foreignKeys) continue;\n\n const name = column.data.name ?? key;\n if (checkForColumnAddOrDrop(shape, name)) continue;\n\n codeForeignKeys.push(\n ...column.data.foreignKeys.map((x) => {\n const columns = [name];\n\n const fnOrTable = fnOrTableToString(x.fnOrTable);\n\n return parseForeignKey(\n config,\n {\n name: x.options?.name,\n references: {\n columns: [name],\n fnOrTable,\n foreignColumns: x.foreignColumns,\n options: x.options,\n },\n },\n {\n columns,\n fnOrTable,\n foreignColumns: x.foreignColumns,\n options: x.options,\n },\n currentSchema,\n );\n }),\n );\n }\n\n if (codeTable.internal.tableData.constraints) {\n for (const tableConstraint of codeTable.internal.tableData.constraints) {\n const { references: refs } = tableConstraint;\n if (!refs) continue;\n\n const fnOrTable = fnOrTableToString(refs.fnOrTable);\n\n codeForeignKeys.push(\n parseForeignKey(\n config,\n {\n ...tableConstraint,\n references: {\n ...refs,\n fnOrTable,\n },\n },\n {\n ...refs,\n fnOrTable,\n columns: config.snakeCase\n ? refs.columns.map(toSnakeCase)\n : refs.columns,\n foreignColumns: config.snakeCase\n ? refs.foreignColumns.map(toSnakeCase)\n : refs.foreignColumns,\n },\n currentSchema,\n ),\n );\n }\n }\n\n return codeForeignKeys;\n};\n\nexport const fnOrTableToString = (\n fnOrTable: TableData.References['fnOrTable'],\n) => {\n if (typeof fnOrTable !== 'string') {\n const { schema, table } = new (fnOrTable())();\n fnOrTable = concatSchemaAndName({ schema, name: table });\n }\n return fnOrTable;\n};\n\nconst parseForeignKey = (\n config: RakeDbConfig,\n codeConstraint: Constraint,\n references: ReferencesWithStringTable,\n currentSchema: string,\n): CodeForeignKey => {\n const { fnOrTable, columns, foreignColumns, options } = references;\n const [schema, table] = getSchemaAndTableFromName(currentSchema, fnOrTable);\n\n return {\n references: {\n foreignSchema: schema ?? currentSchema,\n foreignTable: table,\n columns,\n foreignColumns: config.snakeCase\n ? foreignColumns.map(toSnakeCase)\n : foreignColumns,\n match: mapMatchToDb[options?.match || 'SIMPLE'],\n onUpdate: mapActionToDb[options?.onUpdate || 'NO ACTION'],\n onDelete: mapActionToDb[options?.onDelete || 'NO ACTION'],\n },\n codeConstraint,\n };\n};\n\nconst dbForeignKeyToCodeForeignKey = (\n config: RakeDbConfig,\n dbConstraint: DbStructure.Constraint,\n dbReferences: DbStructure.References,\n): { name?: string; references: TableData.References } => ({\n name:\n dbConstraint.name ===\n getConstraintName(\n dbConstraint.tableName,\n { references: dbReferences },\n config.snakeCase,\n )\n ? undefined\n : dbConstraint.name,\n references: {\n columns: dbReferences.columns,\n fnOrTable: `${dbReferences.foreignSchema}.${dbReferences.foreignTable}`,\n foreignColumns: dbReferences.foreignColumns,\n options: {\n match:\n dbReferences.match === 's'\n ? undefined\n : mapMatchToCode[dbReferences.match],\n onUpdate:\n dbReferences.onUpdate === 'a'\n ? undefined\n : mapActionToCode[dbReferences.onUpdate],\n onDelete:\n dbReferences.onDelete === 'a'\n ? undefined\n : mapActionToCode[dbReferences.onDelete],\n },\n },\n});\n","import { Column, RawSql } from 'pqb/internal';\nimport { getFreeSetAlias, TemplateLiteralArgs, TableData } from 'pqb/internal';\nimport { DbStructure, RakeDbAst } from 'rake-db';\nimport { ChangeTableData } from './tables.generator';\nimport { checkForColumnAddOrDrop, CompareExpression } from './generators.utils';\n\ninterface CodeCheck {\n check: Column.Data.Check;\n name: string;\n column?: string;\n}\n\nexport const processChecks = (\n ast: RakeDbAst[],\n changeTableData: ChangeTableData,\n compareExpressions: CompareExpression[],\n): void => {\n const codeChecks = collectCodeChecks(changeTableData);\n const {\n dbTableData,\n changeTableAst: { add, shape },\n } = changeTableData;\n\n const hasDbChecks = dbTableData.constraints.some((c) => c.check);\n if (!hasDbChecks) {\n if (codeChecks.length) {\n const constraints = (add.constraints ??= []);\n for (const codeCheck of codeChecks) {\n if (\n !codeCheck.column ||\n !changeTableData.changingColumns[codeCheck.column]\n ) {\n constraints.push({\n check: codeCheck.check.sql,\n name: codeCheck.name,\n });\n }\n }\n }\n return;\n }\n\n let wait = 0;\n const foundCodeChecks = new Set<number>();\n for (const dbConstraint of dbTableData.constraints) {\n const { check: dbCheck, name } = dbConstraint;\n if (!dbCheck) continue;\n\n const hasChangedColumn = dbCheck.columns?.some((column) =>\n checkForColumnAddOrDrop(shape, column),\n );\n if (hasChangedColumn) continue;\n\n if (codeChecks.length) {\n wait++;\n compareExpressions.push({\n compare: [\n {\n inDb: dbCheck.expression,\n inCode: codeChecks.map(({ check }) => check.sql),\n },\n ],\n handle(i) {\n if (i !== undefined) {\n foundCodeChecks.add(i);\n } else {\n dropCheck(changeTableData, dbCheck, name);\n }\n\n if (--wait !== 0) return;\n\n const checksToAdd: TableData.Constraint[] = [];\n\n codeChecks.forEach((check, i) => {\n if (foundCodeChecks.has(i)) {\n if (!check.column) return;\n\n const change = changeTableData.changingColumns[check.column];\n if (!change) return;\n\n const columnChecks = change.to.data.checks;\n if (!columnChecks) return;\n\n const i = columnChecks.indexOf(check.check);\n if (i !== -1) {\n columnChecks.splice(i, 1);\n }\n return;\n }\n\n checksToAdd.push({\n name: check.name,\n check: check.check.sql,\n });\n });\n\n if (checksToAdd.length) {\n (add.constraints ??= []).push(...checksToAdd);\n }\n\n if (\n !changeTableData.pushedAst &&\n (changeTableData.changeTableAst.drop.constraints?.length ||\n add.constraints?.length)\n ) {\n changeTableData.pushedAst = true;\n ast.push(changeTableData.changeTableAst);\n }\n },\n });\n } else {\n dropCheck(changeTableData, dbCheck, name);\n }\n }\n};\n\nconst collectCodeChecks = ({\n codeTable,\n changeTableAst: { shape },\n}: ChangeTableData): CodeCheck[] => {\n const names = new Set<string>();\n\n const codeChecks: CodeCheck[] = [];\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as Column;\n if (!column.data.checks) continue;\n\n const columnName = column.data.name ?? key;\n if (checkForColumnAddOrDrop(shape, columnName)) continue;\n\n const baseName = `${codeTable.table}_${columnName}_check`;\n\n codeChecks.push(\n ...column.data.checks.map((check) => {\n const name = check.name || getFreeSetAlias(names, baseName, 1);\n names.add(name);\n\n return {\n check,\n name,\n column: columnName,\n };\n }),\n );\n }\n\n if (codeTable.internal.tableData.constraints) {\n for (const constraint of codeTable.internal.tableData.constraints) {\n const { check } = constraint;\n if (check) {\n const baseName = `${codeTable.table}_check`;\n const name = constraint.name || getFreeSetAlias(names, baseName, 1);\n names.add(name);\n\n codeChecks.push({\n check: { sql: check, name: constraint.name },\n name,\n });\n }\n }\n }\n\n return codeChecks;\n};\n\nconst dropCheck = (\n { changeTableAst: { drop }, changingColumns }: ChangeTableData,\n dbCheck: DbStructure.Check,\n name: string,\n) => {\n const sql = new RawSql([\n [dbCheck.expression],\n ] as unknown as TemplateLiteralArgs);\n\n if (dbCheck.columns?.length === 1 && changingColumns[dbCheck.columns[0]]) {\n const column = changingColumns[dbCheck.columns[0]];\n column.from.data.name = 'i_d';\n (column.from.data.checks ??= []).push({\n name,\n sql,\n });\n } else {\n (drop.constraints ??= []).push({\n name,\n check: sql,\n });\n }\n};\n","import { Column } from 'pqb/internal';\nimport {\n ArrayColumn,\n ColumnsShape,\n DbStructureDomainsMap,\n AdapterBase,\n EnumColumn,\n GeneratorIgnore,\n VirtualColumn,\n} from 'pqb/internal';\nimport {\n DbStructure,\n IntrospectedStructure,\n RakeDbAst,\n getDbStructureTableData,\n StructureToAstCtx,\n StructureToAstTableData,\n tableToAst,\n getSchemaAndTableFromName,\n getMigrationsSchemaAndTable,\n RakeDbConfig,\n} from 'rake-db';\nimport {\n CompareExpression,\n compareSqlExpressions,\n promptCreateOrRename,\n TableExpression,\n} from './generators.utils';\nimport { processPrimaryKey } from './primaryKey.generator';\nimport { processIndexesAndExcludes } from './indexesAndExcludes.generator';\nimport { processColumns, TypeCastsCache } from './columns.generator';\nimport { processForeignKeys } from './foreignKeys.generator';\nimport { processChecks } from './checks.generator';\nimport { CodeTable } from '../generate';\nimport { ComposeMigrationParams, PendingDbTypes } from '../composeMigration';\n\nexport interface CompareSql {\n values: unknown[];\n expressions: {\n inDb: string;\n inCode: string | null;\n change(): void;\n }[];\n}\n\nexport interface ChangeTableSchemaData {\n codeTable: CodeTable;\n dbTable: DbStructure.Table;\n}\n\nexport interface ChangeTableData extends ChangeTableSchemaData {\n dbTableData: StructureToAstTableData;\n schema: string;\n changeTableAst: RakeDbAst.ChangeTable;\n pushedAst: boolean;\n changingColumns: ChangingColumns;\n delayedAst: RakeDbAst[];\n}\n\ninterface ChangingColumns {\n [dbName: string]: ChangingColumnsPair;\n}\n\nexport interface ChangingColumnsPair {\n from: Column;\n to: Column;\n}\n\nexport interface TableShapes {\n [K: string]: RakeDbAst.ChangeTableShape;\n}\n\nexport const processTables = async (\n ast: RakeDbAst[],\n domainsMap: DbStructureDomainsMap,\n adapter: AdapterBase,\n dbStructure: IntrospectedStructure,\n config: RakeDbConfig,\n {\n structureToAstCtx,\n codeItems: { tables },\n currentSchema,\n internal: { generatorIgnore },\n verifying,\n }: ComposeMigrationParams,\n pendingDbTypes: PendingDbTypes,\n): Promise<void> => {\n const createTables: CodeTable[] = collectCreateTables(\n tables,\n dbStructure,\n currentSchema,\n );\n const compareSql: CompareSql = { values: [], expressions: [] };\n const tableExpressions: TableExpression[] = [];\n const { changeTables, changeTableSchemas, dropTables, tableShapes } =\n collectChangeAndDropTables(\n adapter,\n config,\n tables,\n dbStructure,\n currentSchema,\n createTables,\n generatorIgnore,\n );\n\n applyChangeTableSchemas(changeTableSchemas, currentSchema, ast);\n\n await applyCreateOrRenameTables(\n dbStructure,\n createTables,\n dropTables,\n changeTables,\n tableShapes,\n currentSchema,\n ast,\n verifying,\n );\n\n await applyChangeTables(\n adapter,\n changeTables,\n structureToAstCtx,\n dbStructure,\n domainsMap,\n ast,\n currentSchema,\n config,\n compareSql,\n tableExpressions,\n verifying,\n pendingDbTypes,\n );\n\n processForeignKeys(config, ast, changeTables, currentSchema, tableShapes);\n\n await Promise.all([\n applyCompareSql(compareSql, adapter),\n compareSqlExpressions(tableExpressions, adapter),\n ]);\n\n for (const dbTable of dropTables) {\n ast.push(\n tableToAst(structureToAstCtx, dbStructure, dbTable, 'drop', domainsMap),\n );\n }\n};\n\nconst collectCreateTables = (\n tables: CodeTable[],\n dbStructure: IntrospectedStructure,\n currentSchema: string,\n): CodeTable[] => {\n return tables.reduce<CodeTable[]>((acc, codeTable) => {\n const tableSchema = codeTable.q.schema ?? currentSchema;\n const hasDbTable = dbStructure.tables.some(\n (t) => t.name === codeTable.table && t.schemaName === tableSchema,\n );\n if (!hasDbTable) {\n acc.push(codeTable);\n }\n return acc;\n }, []);\n};\n\nconst collectChangeAndDropTables = (\n adapter: AdapterBase,\n config: RakeDbConfig,\n tables: CodeTable[],\n dbStructure: IntrospectedStructure,\n currentSchema: string,\n createTables: CodeTable[],\n generatorIgnore: GeneratorIgnore | undefined,\n): {\n changeTables: ChangeTableData[];\n changeTableSchemas: ChangeTableSchemaData[];\n dropTables: DbStructure.Table[];\n tableShapes: TableShapes;\n} => {\n const changeTables: ChangeTableData[] = [];\n const changeTableSchemas: ChangeTableSchemaData[] = [];\n const dropTables: DbStructure.Table[] = [];\n const tableShapes: TableShapes = {};\n const ignoreTables = generatorIgnore?.tables?.map((name) => {\n const [schema = currentSchema, table] = getSchemaAndTableFromName(\n currentSchema,\n name,\n );\n return { schema, table };\n });\n\n const { schema: migrationsSchema = 'public', table: migrationsTable } =\n getMigrationsSchemaAndTable(adapter, config);\n for (const dbTable of dbStructure.tables) {\n if (\n (dbTable.name === migrationsTable &&\n dbTable.schemaName === migrationsSchema) ||\n generatorIgnore?.schemas?.includes(dbTable.schemaName) ||\n ignoreTables?.some(\n ({ schema, table }) =>\n table === dbTable.name && schema === dbTable.schemaName,\n )\n )\n continue;\n\n const codeTable = tables.find(\n (t) =>\n t.table === dbTable.name &&\n (t.q.schema ?? currentSchema) === dbTable.schemaName,\n );\n if (codeTable) {\n addChangeTable(\n dbStructure,\n changeTables,\n tableShapes,\n currentSchema,\n dbTable,\n codeTable,\n );\n continue;\n }\n\n const i = createTables.findIndex((t) => t.table === dbTable.name);\n if (i !== -1) {\n const codeTable = createTables[i];\n createTables.splice(i, 1);\n changeTableSchemas.push({ codeTable, dbTable });\n continue;\n }\n\n dropTables.push(dbTable);\n }\n\n return { changeTables, changeTableSchemas, dropTables, tableShapes };\n};\n\nconst applyChangeTableSchemas = (\n changeTableSchemas: ChangeTableSchemaData[],\n currentSchema: string,\n ast: RakeDbAst[],\n) => {\n for (const { codeTable, dbTable } of changeTableSchemas) {\n const fromSchema = dbTable.schemaName;\n const toSchema = codeTable.q.schema ?? currentSchema;\n\n ast.push({\n type: 'renameType',\n kind: 'TABLE',\n fromSchema,\n from: dbTable.name,\n toSchema,\n to: dbTable.name,\n });\n }\n};\n\nconst applyChangeTables = async (\n adapter: AdapterBase,\n changeTables: ChangeTableData[],\n structureToAstCtx: StructureToAstCtx,\n dbStructure: IntrospectedStructure,\n domainsMap: DbStructureDomainsMap,\n ast: RakeDbAst[],\n currentSchema: string,\n config: RakeDbConfig,\n compareSql: CompareSql,\n tableExpressions: TableExpression[],\n verifying: boolean | undefined,\n pendingDbTypes: PendingDbTypes,\n): Promise<void> => {\n const compareExpressions: CompareExpression[] = [];\n const typeCastsCache: TypeCastsCache = {};\n\n for (const changeTableData of changeTables) {\n compareExpressions.length = 0;\n\n await processTableChange(\n adapter,\n structureToAstCtx,\n dbStructure,\n domainsMap,\n ast,\n currentSchema,\n config,\n changeTableData,\n compareSql,\n compareExpressions,\n typeCastsCache,\n verifying,\n );\n\n if (compareExpressions.length) {\n const { codeTable } = changeTableData;\n const names: string[] = [];\n const types: string[] = [];\n\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as Column;\n // skip virtual columns\n if (!column.dataType) continue;\n\n const name = column.data.name ?? key;\n const type = getColumnDbTypeForComparison(column, currentSchema);\n if (!pendingDbTypes.set.has(type)) {\n names.push(name);\n types.push(type);\n }\n }\n\n const tableName = codeTable.table;\n const source = `(VALUES (${types\n .map((x) => `NULL::${x}`)\n .join(', ')})) \"${tableName}\"(${names\n .map((x) => `\"${x}\"`)\n .join(', ')})`;\n\n tableExpressions.push(\n ...compareExpressions.map((x) => ({ ...x, source })),\n );\n }\n }\n};\n\nconst getColumnDbTypeForComparison = (\n column: Column.Pick.DataAndDataType,\n currentSchema: string,\n): string => {\n if (column instanceof ArrayColumn) {\n return (\n getColumnDbTypeForComparison(column.data.item, currentSchema) +\n '[]'.repeat(column.data.arrayDims)\n );\n }\n\n let type = column instanceof EnumColumn ? column.enumName : column.dataType;\n\n const i = type.indexOf('(');\n let append = '';\n if (i !== -1) {\n type = type.slice(0, i);\n append = type.slice(i);\n }\n\n const j = type.indexOf('.');\n if (j === -1) {\n let result = `\"${type}\"${append}`;\n if (column.data.isOfCustomType || column instanceof EnumColumn) {\n result = `\"${currentSchema}\".${result}`;\n }\n return result;\n } else {\n return `\"${type.slice(j)}\".\"${type.slice(0, j)}\"${append}`;\n }\n};\n\n// https://github.com/romeerez/orchid-orm/issues/647\n// two clock_timestamp() statements aren't equal to each other, confusing SQL comparator.\n// adding 0.1ms to keep clock_timestamp() different from now(), so user can migrate from now() to clock_timestamp().\nconst freezeSqlClock = (sql: string) =>\n sql.replaceAll('clock_timestamp()', `'0.1ms'::interval + now()`);\n\nconst applyCompareSql = async (\n compareSql: CompareSql,\n adapter: AdapterBase,\n) => {\n if (compareSql.expressions.length) {\n const {\n rows: [results],\n } = await adapter.arrays(\n 'SELECT ' +\n compareSql.expressions\n .map(\n (x) =>\n `${freezeSqlClock(x.inDb)} = (${\n x.inCode && freezeSqlClock(x.inCode)\n })`,\n )\n .join(', '),\n compareSql.values,\n );\n\n for (let i = 0; i < results.length; i++) {\n if (!results[i]) {\n compareSql.expressions[i].change();\n }\n }\n }\n};\n\nconst applyCreateOrRenameTables = async (\n dbStructure: IntrospectedStructure,\n createTables: CodeTable[],\n dropTables: DbStructure.Table[],\n changeTables: ChangeTableData[],\n tableShapes: TableShapes,\n currentSchema: string,\n ast: RakeDbAst[],\n verifying: boolean | undefined,\n) => {\n for (const codeTable of createTables) {\n if (dropTables.length) {\n const i = await promptCreateOrRename(\n 'table',\n codeTable.table,\n dropTables.map((x) => x.name),\n verifying,\n );\n if (i) {\n const dbTable = dropTables[i - 1];\n dropTables.splice(i - 1, 1);\n\n ast.push({\n type: 'renameType',\n kind: 'TABLE',\n fromSchema: dbTable.schemaName,\n from: dbTable.name,\n toSchema: codeTable.q.schema ?? currentSchema,\n to: codeTable.table,\n });\n\n addChangeTable(\n dbStructure,\n changeTables,\n tableShapes,\n currentSchema,\n dbTable,\n codeTable,\n );\n\n continue;\n }\n }\n\n ast.push(createTableAst(currentSchema, codeTable));\n }\n};\n\nconst addChangeTable = (\n dbStructure: IntrospectedStructure,\n changeTables: ChangeTableData[],\n tableShapes: TableShapes,\n currentSchema: string,\n dbTable: DbStructure.Table,\n codeTable: CodeTable,\n) => {\n const shape = {};\n const schema = codeTable.q.schema ?? currentSchema;\n\n changeTables.push({\n codeTable: cloneCodeTableForChange(codeTable),\n dbTable,\n dbTableData: getDbStructureTableData(dbStructure, dbTable),\n schema,\n changeTableAst: {\n type: 'changeTable',\n schema,\n name: codeTable.table,\n shape: shape,\n add: {},\n drop: {},\n },\n pushedAst: false,\n changingColumns: {},\n delayedAst: [],\n });\n\n tableShapes[`${schema}.${codeTable.table}`] = shape;\n};\n\nconst cloneCodeTableForChange = (codeTable: CodeTable) => ({\n ...codeTable,\n // codeTable is a class instance and not all props can be cloned with `...`\n table: codeTable.table,\n shape: Object.fromEntries(\n Object.entries(codeTable.shape).map(([key, column]) => {\n const cloned = Object.create(column as Column);\n cloned.data = {\n ...cloned.data,\n checks: cloned.data.checks && [...cloned.data.checks],\n };\n\n return [key, cloned];\n }),\n ),\n});\n\nconst createTableAst = (\n currentSchema: string,\n table: CodeTable,\n): RakeDbAst.Table => {\n return {\n type: 'table',\n action: 'create',\n schema: table.q.schema === currentSchema ? undefined : table.q.schema,\n comment: table.internal.comment,\n name: table.table,\n shape: makeTableShape(table),\n noPrimaryKey: table.internal.noPrimaryKey ? 'ignore' : 'error',\n ...table.internal.tableData,\n };\n};\n\nconst makeTableShape = (table: CodeTable): ColumnsShape => {\n const shape: ColumnsShape = {};\n for (const key in table.shape) {\n const column = table.shape[key];\n if (!(column instanceof VirtualColumn)) {\n shape[key] = column as Column;\n }\n }\n return shape;\n};\n\nconst processTableChange = async (\n adapter: AdapterBase,\n structureToAstCtx: StructureToAstCtx,\n dbStructure: IntrospectedStructure,\n domainsMap: DbStructureDomainsMap,\n ast: RakeDbAst[],\n currentSchema: string,\n config: RakeDbConfig,\n changeTableData: ChangeTableData,\n compareSql: CompareSql,\n compareExpressions: CompareExpression[],\n typeCastsCache: TypeCastsCache,\n verifying: boolean | undefined,\n) => {\n await processColumns(\n adapter,\n config,\n structureToAstCtx,\n dbStructure,\n domainsMap,\n changeTableData,\n ast,\n currentSchema,\n compareSql,\n typeCastsCache,\n verifying,\n );\n\n processPrimaryKey(config, changeTableData);\n\n processIndexesAndExcludes(config, changeTableData, ast, compareExpressions);\n\n processChecks(ast, changeTableData, compareExpressions);\n\n const { changeTableAst } = changeTableData;\n if (\n Object.keys(changeTableAst.shape).length ||\n Object.keys(changeTableAst.add).length ||\n Object.keys(changeTableAst.drop).length\n ) {\n changeTableData.pushedAst = true;\n ast.push(changeTableAst);\n }\n\n if (changeTableData.delayedAst.length) {\n ast.push(...changeTableData.delayedAst);\n }\n};\n","import { DbStructure, IntrospectedStructure, RakeDbAst } from 'rake-db';\nimport { ComposeMigrationParams } from '../composeMigration';\nimport { deepCompare } from 'pqb/internal';\nimport { promptCreateOrRename } from './generators.utils';\n\nconst defaults = {\n super: false,\n inherit: false,\n createRole: false,\n createDb: false,\n canLogin: false,\n replication: false,\n connLimit: -1,\n bypassRls: false,\n};\n\nexport const processRoles = async (\n ast: RakeDbAst[],\n dbStructure: IntrospectedStructure,\n { verifying, internal: { roles } }: ComposeMigrationParams,\n) => {\n if (!dbStructure.roles || !roles) return;\n\n const codeRoles = roles.map((role): DbStructure.Role => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { defaultPrivileges: _, ...roleWithoutPrivileges } = role;\n return {\n ...defaults,\n ...roleWithoutPrivileges,\n };\n });\n\n const found = new Set<string>();\n const dropRoles: DbStructure.Role[] = [];\n\n for (const dbRole of dbStructure.roles) {\n // Strip defaultPrivileges from dbRole for comparison\n const {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n defaultPrivileges: _,\n ...dbRoleWithoutPrivileges\n } = dbRole as DbStructure.Role & { defaultPrivileges?: unknown };\n\n const codeRole = codeRoles.find(\n (codeRole) => dbRole.name === codeRole.name,\n );\n if (codeRole) {\n found.add(dbRole.name);\n\n if (!deepCompare(dbRoleWithoutPrivileges, codeRole)) {\n ast.push({\n type: 'changeRole',\n name: dbRole.name,\n from: dbRoleWithoutPrivileges,\n to: codeRole,\n });\n }\n\n continue;\n }\n\n dropRoles.push(dbRole);\n }\n\n for (const codeRole of codeRoles) {\n if (found.has(codeRole.name)) continue;\n\n if (dropRoles.length) {\n const i = await promptCreateOrRename(\n 'table',\n codeRole.name,\n dropRoles.map((x) => x.name),\n verifying,\n );\n if (i) {\n const dbRole = dropRoles[i - 1];\n dropRoles.splice(i - 1, 1);\n\n ast.push(makeRenameOrChangeAst(dbRole, codeRole));\n\n continue;\n }\n }\n\n ast.push({\n type: 'role',\n action: 'create',\n ...codeRole,\n });\n }\n\n for (const dbRole of dropRoles) {\n ast.push({\n type: 'role',\n action: 'drop',\n ...dbRole,\n });\n }\n};\n\nconst makeRenameOrChangeAst = (\n dbRole: DbStructure.Role,\n codeRole: DbStructure.Role,\n): RakeDbAst.RenameRole | RakeDbAst.ChangeRole => {\n const { name: dbRoleName, ...dbRoleRest } = dbRole;\n const { name: codeRoleName, ...codeRoleRest } = codeRole;\n if (deepCompare(dbRoleRest, codeRoleRest) && dbRoleName !== codeRoleName) {\n return {\n type: 'renameRole',\n from: dbRoleName,\n to: codeRoleName,\n };\n } else {\n return {\n type: 'changeRole',\n name: dbRole.name,\n from: dbRole,\n to: codeRole,\n };\n }\n};\n","import { DbStructure, IntrospectedStructure, RakeDbAst } from 'rake-db';\nimport { ComposeMigrationParams } from '../composeMigration';\nimport { getSupportedDefaultPrivileges, DefaultPrivileges } from 'pqb/internal';\n\nconst ALL_OBJECT_TYPES: DbStructure.DefaultPrivilegeObjectConfig['object'][] = [\n 'TABLES',\n 'SEQUENCES',\n 'FUNCTIONS',\n 'TYPES',\n 'SCHEMAS',\n 'LARGE_OBJECTS',\n];\n\n// Create object configs for all object types with given isGrantable flag\nconst createAllObjectConfigs = (\n isGrantable: boolean,\n schema: string | undefined,\n supportedPrivileges: DefaultPrivileges.SupportedDefaultPrivileges,\n): DbStructure.DefaultPrivilegeObjectConfig[] => {\n let types: DbStructure.DefaultPrivilegeObjectConfig['object'][];\n if (schema) {\n types = ALL_OBJECT_TYPES.filter(\n (t) => t !== 'SCHEMAS' && t !== 'LARGE_OBJECTS',\n );\n } else {\n types = ALL_OBJECT_TYPES.filter((t) => {\n if (t === 'LARGE_OBJECTS') {\n return supportedPrivileges.PRIVILEGES.LARGE_OBJECT !== undefined;\n }\n return true;\n });\n }\n return types.map((object) => ({\n object,\n privilegeConfigs: [{ privilege: 'ALL', isGrantable }],\n }));\n};\n\n// Map object type to the corresponding grant/revoke key\nconst objectTypeToKey: Record<\n DbStructure.DefaultPrivilegeObjectConfig['object'],\n 'tables' | 'sequences' | 'functions' | 'types' | 'schemas' | 'largeObjects'\n> = {\n TABLES: 'tables',\n SEQUENCES: 'sequences',\n FUNCTIONS: 'functions',\n TYPES: 'types',\n SCHEMAS: 'schemas',\n LARGE_OBJECTS: 'largeObjects',\n};\n\n// Split privilege configs into regular and grantable privilege names\nconst splitPrivilegeConfigs = (\n configs: DbStructure.DefaultPrivilegeConfig[],\n): { regular: string[]; grantable: string[] } => {\n const regular: string[] = [];\n const grantable: string[] = [];\n for (const p of configs) {\n if (p.isGrantable) {\n grantable.push(p.privilege);\n } else {\n regular.push(p.privilege);\n }\n }\n return { regular, grantable };\n};\n\n// Create a setting object from regular and grantable privilege arrays\nconst createPrivilegeSetting = (\n regular: string[],\n grantable: string[],\n): { privileges?: string[]; grantablePrivileges?: string[] } => {\n const setting: { privileges?: string[]; grantablePrivileges?: string[] } = {};\n if (regular.length) setting.privileges = regular;\n if (grantable.length) setting.grantablePrivileges = grantable;\n return setting;\n};\n\n// Collapse privilege configs into ALL if all expected privileges are present.\n// Mutates newPrivilegeConfigs by pushing the result.\nconst collapsePrivileges = (\n privs: DbStructure.DefaultPrivilegeConfig[],\n newPrivilegeConfigs: DbStructure.DefaultPrivilegeConfig[],\n expectedPrivs: string[],\n isGrantable: boolean,\n): void => {\n const hasAll = privs.some((p) => p.privilege === 'ALL');\n const allPresent =\n hasAll ||\n (privs.length > 0 &&\n privs.length === expectedPrivs.length &&\n expectedPrivs.every((priv) => privs.some((p) => p.privilege === priv)));\n\n if (allPresent) {\n newPrivilegeConfigs.push({ privilege: 'ALL', isGrantable });\n } else if (privs.length > 0) {\n newPrivilegeConfigs.push(...privs);\n }\n};\n\n// Collapse privileges into ALL when all non-ALL privileges are present.\n// Returns a new DefaultPrivilege with collapsed privileges.\nconst collapsePrivilegesToAll = (\n privilege: DbStructure.DefaultPrivilege,\n objectTypeToAllPrivileges: Record<\n DbStructure.DefaultPrivilegeObjectConfig['object'],\n readonly string[]\n >,\n): DbStructure.DefaultPrivilege => {\n const collapsedObjectConfigs = privilege.objectConfigs.map(\n (objConfig): DbStructure.DefaultPrivilegeObjectConfig => {\n const allPrivileges = objectTypeToAllPrivileges[objConfig.object];\n const expectedPrivs = allPrivileges.filter((p) => p !== 'ALL');\n\n // Group privilege configs by isGrantable using imperative loop\n const regularPrivs: DbStructure.DefaultPrivilegeConfig[] = [];\n const grantablePrivs: DbStructure.DefaultPrivilegeConfig[] = [];\n for (const p of objConfig.privilegeConfigs) {\n if (p.isGrantable) {\n grantablePrivs.push(p);\n } else {\n regularPrivs.push(p);\n }\n }\n\n const newPrivilegeConfigs: DbStructure.DefaultPrivilegeConfig[] = [];\n\n // Collapse regular privileges to ALL if all are present\n collapsePrivileges(\n regularPrivs,\n newPrivilegeConfigs,\n expectedPrivs,\n false,\n );\n\n // Collapse grantable privileges to ALL if all are present\n collapsePrivileges(\n grantablePrivs,\n newPrivilegeConfigs,\n expectedPrivs,\n true,\n );\n\n return {\n object: objConfig.object,\n privilegeConfigs: newPrivilegeConfigs,\n };\n },\n );\n\n return {\n owner: privilege.owner,\n grantee: privilege.grantee,\n schema: privilege.schema,\n objectConfigs: collapsedObjectConfigs,\n };\n};\n\n// Check if two privilege configs match, considering ALL expansion\nconst privilegeConfigsMatch = (\n a: DbStructure.DefaultPrivilegeConfig,\n b: DbStructure.DefaultPrivilegeConfig,\n objectType: DbStructure.DefaultPrivilegeObjectConfig['object'],\n objectTypeToAllPrivileges: Record<\n DbStructure.DefaultPrivilegeObjectConfig['object'],\n readonly string[]\n >,\n): boolean => {\n // Exact match\n if (a.privilege === b.privilege && a.isGrantable === b.isGrantable) {\n return true;\n }\n\n const allPrivileges = objectTypeToAllPrivileges[objectType];\n const expectedPrivs = allPrivileges.filter((p) => p !== 'ALL');\n\n // Check if a is ALL and b has all expected privileges (or vice versa)\n if (a.privilege === 'ALL' && a.isGrantable === b.isGrantable) {\n // Check if b has all expected privileges\n return expectedPrivs.includes(b.privilege);\n }\n if (b.privilege === 'ALL' && a.isGrantable === b.isGrantable) {\n // Check if a has all expected privileges\n return expectedPrivs.includes(a.privilege);\n }\n\n return false;\n};\n\n// Normalize role name by stripping quotes that may come from database introspection\nconst normalizeRoleName = (name: string): string => {\n if (name.startsWith('\"') && name.endsWith('\"')) {\n return name.slice(1, -1);\n }\n return name;\n};\n\n// Process privilege config (tables, sequences, functions, types) into object configs\nconst processPrivilegeConfig = (\n config: { privileges?: string[]; grantablePrivileges?: string[] } | undefined,\n objectType: DbStructure.DefaultPrivilegeObjectConfig['object'],\n): DbStructure.DefaultPrivilegeObjectConfig | undefined => {\n if (!config) return;\n\n const privilegeConfigs: DbStructure.DefaultPrivilegeConfig[] = [];\n if (config.privileges) {\n for (const p of config.privileges) {\n privilegeConfigs.push({ privilege: p, isGrantable: false });\n }\n }\n if (config.grantablePrivileges) {\n for (const p of config.grantablePrivileges) {\n privilegeConfigs.push({ privilege: p, isGrantable: true });\n }\n }\n if (privilegeConfigs.length) {\n return { object: objectType, privilegeConfigs };\n }\n return;\n};\n\n// Check if a default privilege object config has any privileges set\nconst hasAnyPrivilege = (\n obj: RakeDbAst.DefaultPrivilegeObjectConfig | undefined,\n): boolean => {\n if (!obj) return false;\n for (const key of ALL_OBJECT_TYPES) {\n const setting = obj[objectTypeToKey[key]];\n if (setting?.privileges?.length || setting?.grantablePrivileges?.length) {\n return true;\n }\n }\n return false;\n};\n\nexport const processDefaultPrivileges = (\n ast: RakeDbAst[],\n dbStructure: IntrospectedStructure,\n { internal: { roles } }: ComposeMigrationParams,\n) => {\n if (!dbStructure.defaultPrivileges || !roles) return;\n\n const supportedPrivileges = getSupportedDefaultPrivileges(\n dbStructure.version,\n );\n\n const objectTypeToAllPrivileges: Record<\n DbStructure.DefaultPrivilegeObjectConfig['object'],\n readonly string[]\n > = {} as Record<\n DbStructure.DefaultPrivilegeObjectConfig['object'],\n readonly string[]\n >;\n\n objectTypeToAllPrivileges.TABLES = supportedPrivileges.PRIVILEGES.TABLE;\n objectTypeToAllPrivileges.SEQUENCES = supportedPrivileges.PRIVILEGES.SEQUENCE;\n objectTypeToAllPrivileges.FUNCTIONS = supportedPrivileges.PRIVILEGES.FUNCTION;\n objectTypeToAllPrivileges.TYPES = supportedPrivileges.PRIVILEGES.TYPE;\n objectTypeToAllPrivileges.SCHEMAS = supportedPrivileges.PRIVILEGES.SCHEMA;\n\n if (supportedPrivileges.PRIVILEGES.LARGE_OBJECT) {\n objectTypeToAllPrivileges.LARGE_OBJECTS =\n supportedPrivileges.PRIVILEGES.LARGE_OBJECT;\n }\n\n // Collect default privileges from code roles\n const codePrivileges: Map<string, DbStructure.DefaultPrivilege> = new Map();\n\n for (const role of roles) {\n if (!role.defaultPrivileges) continue;\n\n for (const privilege of role.defaultPrivileges) {\n const key = `${role.name}.${privilege.schema}`;\n\n const objectConfigs: DbStructure.DefaultPrivilegeObjectConfig[] = [];\n\n // Start with allGrantable or all base config\n if (privilege.allGrantable) {\n objectConfigs.push(\n ...createAllObjectConfigs(\n true,\n privilege.schema,\n supportedPrivileges,\n ),\n );\n } else if (privilege.all) {\n objectConfigs.push(\n ...createAllObjectConfigs(\n false,\n privilege.schema,\n supportedPrivileges,\n ),\n );\n }\n\n for (const objectType of ALL_OBJECT_TYPES) {\n if (\n privilege.schema &&\n (objectType === 'SCHEMAS' || objectType === 'LARGE_OBJECTS')\n ) {\n continue;\n }\n if (\n objectType === 'LARGE_OBJECTS' &&\n !supportedPrivileges.PRIVILEGES.LARGE_OBJECT\n ) {\n continue;\n }\n const key = objectTypeToKey[objectType];\n if (key in privilege) {\n const config = privilege[key as keyof typeof privilege];\n const processed = processPrivilegeConfig(config as never, objectType);\n if (processed) {\n const existingIndex = objectConfigs.findIndex(\n (o) => o.object === objectType,\n );\n if (existingIndex >= 0) {\n objectConfigs[existingIndex] = processed;\n } else {\n objectConfigs.push(processed);\n }\n }\n }\n }\n\n if (objectConfigs.length) {\n // Store code privileges as-is (don't collapse - preserve user intent)\n codePrivileges.set(key, {\n owner: undefined,\n grantee: role.name,\n schema: privilege.schema,\n objectConfigs,\n });\n }\n }\n }\n\n // Compare with database privileges and generate AST items\n const found = new Set<string>();\n\n for (const dbPrivilege of dbStructure.defaultPrivileges) {\n // Normalize grantee to handle quotes from database\n const grantee = normalizeRoleName(dbPrivilege.grantee);\n if (grantee === 'postgres') continue;\n\n const key = `${grantee}.${dbPrivilege.schema}`;\n const codePrivilege = codePrivileges.get(key);\n\n if (codePrivilege) {\n found.add(key);\n\n const grant: RakeDbAst.DefaultPrivilege['grant'] = {};\n const revoke: RakeDbAst.DefaultPrivilege['revoke'] = {};\n\n // Compare object configs for each object type\n for (const objectType of ALL_OBJECT_TYPES) {\n if (\n objectType === 'LARGE_OBJECTS' &&\n !supportedPrivileges.PRIVILEGES.LARGE_OBJECT\n ) {\n continue;\n }\n\n const dbObj = dbPrivilege.objectConfigs.find(\n (o) => o.object === objectType,\n );\n const codeObj = codePrivilege.objectConfigs.find(\n (o) => o.object === objectType,\n );\n\n const dbPrivs = dbObj?.privilegeConfigs ?? [];\n const codePrivs = codeObj?.privilegeConfigs ?? [];\n\n // Collapse db privileges for comparison (but keep original for output)\n const collapsedDbPrivilege: DbStructure.DefaultPrivilege = {\n owner: dbPrivilege.owner,\n grantee: dbPrivilege.grantee,\n schema: dbPrivilege.schema,\n objectConfigs: [{ object: objectType, privilegeConfigs: dbPrivs }],\n };\n const collapsedDbObj = collapsePrivilegesToAll(\n collapsedDbPrivilege,\n objectTypeToAllPrivileges,\n ).objectConfigs[0];\n const collapsedDbPrivs = collapsedDbObj?.privilegeConfigs ?? [];\n\n // Find privileges to grant (in code but not in collapsed db)\n const toGrant = codePrivs.filter(\n (cp) =>\n !collapsedDbPrivs.some((dp) =>\n privilegeConfigsMatch(\n cp,\n dp,\n objectType,\n objectTypeToAllPrivileges,\n ),\n ),\n );\n\n // Find privileges to revoke (in db but not in code)\n // Use original dbPrivs for output, but collapsed for comparison\n const toRevoke = dbPrivs.filter(\n (dp) =>\n !codePrivs.some((cp) =>\n privilegeConfigsMatch(\n cp,\n dp,\n objectType,\n objectTypeToAllPrivileges,\n ),\n ),\n );\n\n if (toGrant.length) {\n const { regular, grantable } = splitPrivilegeConfigs(toGrant);\n const setting = createPrivilegeSetting(regular, grantable);\n if (setting.privileges || setting.grantablePrivileges) {\n grant[objectTypeToKey[objectType]] = setting;\n }\n }\n\n if (toRevoke.length) {\n const { regular, grantable } = splitPrivilegeConfigs(toRevoke);\n const setting = createPrivilegeSetting(regular, grantable);\n if (setting.privileges || setting.grantablePrivileges) {\n revoke[objectTypeToKey[objectType]] = setting;\n }\n }\n }\n\n const hasGrant = hasAnyPrivilege(grant);\n const hasRevoke = hasAnyPrivilege(revoke);\n\n if (hasGrant || hasRevoke) {\n ast.push({\n type: 'defaultPrivilege',\n grantee: grantee,\n schema: dbPrivilege.schema,\n grant: hasGrant ? grant : undefined,\n revoke: hasRevoke ? revoke : undefined,\n });\n }\n } else {\n // Revoke all existing privileges\n const revoke: RakeDbAst.DefaultPrivilege['revoke'] = {};\n\n for (const obj of dbPrivilege.objectConfigs) {\n const { regular, grantable } = splitPrivilegeConfigs(\n obj.privilegeConfigs,\n );\n const setting = createPrivilegeSetting(regular, grantable);\n if (setting.privileges || setting.grantablePrivileges) {\n revoke[objectTypeToKey[obj.object]] = setting;\n }\n }\n\n if (hasAnyPrivilege(revoke)) {\n ast.push({\n type: 'defaultPrivilege',\n grantee: grantee,\n schema: dbPrivilege.schema,\n revoke,\n });\n }\n }\n }\n\n // Grant privileges that are in code but not in db\n for (const [key, codePrivilege] of codePrivileges) {\n if (found.has(key)) continue;\n\n const grant: RakeDbAst.DefaultPrivilege['grant'] = {};\n\n for (const obj of codePrivilege.objectConfigs) {\n const { regular, grantable } = splitPrivilegeConfigs(\n obj.privilegeConfigs,\n );\n const setting = createPrivilegeSetting(regular, grantable);\n if (setting.privileges || setting.grantablePrivileges) {\n grant[objectTypeToKey[obj.object]] = setting;\n }\n }\n\n if (hasAnyPrivilege(grant)) {\n ast.push({\n type: 'defaultPrivilege',\n grantee: codePrivilege.grantee,\n schema: codePrivilege.schema,\n grant,\n });\n }\n }\n};\n","import { QueryInternal, AdapterBase } from 'pqb/internal';\nimport {\n RakeDbAst,\n IntrospectedStructure,\n makeDomainsMap,\n StructureToAstCtx,\n astToMigration,\n} from 'rake-db';\nimport { processSchemas } from './generators/schemas.generator';\nimport { processExtensions } from './generators/extensions.generator';\nimport { processDomains } from './generators/domains.generator';\nimport { processEnums } from './generators/enums.generator';\nimport { processTables } from './generators/tables.generator';\nimport { CodeItems } from './generate';\nimport { RakeDbConfig } from 'rake-db';\nimport { processRoles } from './generators/roles.generator';\nimport { processDefaultPrivileges } from './generators/default-privilege.generator';\n\nexport interface ComposeMigrationParams {\n structureToAstCtx: StructureToAstCtx;\n codeItems: CodeItems;\n currentSchema: string;\n internal: QueryInternal;\n verifying?: boolean;\n}\n\n/**\n * This is needed to compare SQLs of table expressions.\n * Need to exclude table columns of pending types, such as enums or domains,\n * that aren't created yet from the SQL comparison.\n * Otherwise, the comparison fails because of the unknown types.\n */\nexport class PendingDbTypes {\n set = new Set<string>();\n add(schemaName: string | undefined = 'public', name: string) {\n this.set.add(`\"${schemaName}\".\"${name}\"`);\n }\n}\n\nexport const composeMigration = async (\n adapter: AdapterBase,\n config: RakeDbConfig,\n ast: RakeDbAst[],\n dbStructure: IntrospectedStructure,\n params: ComposeMigrationParams,\n): Promise<string | undefined> => {\n const { structureToAstCtx, currentSchema } = params;\n\n await processRoles(ast, dbStructure, params);\n\n processDefaultPrivileges(ast, dbStructure, params);\n\n const domainsMap = makeDomainsMap(structureToAstCtx, dbStructure);\n\n await processSchemas(ast, dbStructure, params);\n processExtensions(ast, dbStructure, params);\n\n const pendingDbTypes = new PendingDbTypes();\n\n await processDomains(\n ast,\n adapter,\n domainsMap,\n dbStructure,\n params,\n pendingDbTypes,\n );\n await processEnums(ast, dbStructure, params, pendingDbTypes);\n\n await processTables(\n ast,\n domainsMap,\n adapter,\n dbStructure,\n config,\n params,\n pendingDbTypes,\n );\n\n return astToMigration(currentSchema, config, ast);\n};\n","import { AdapterBase } from 'pqb/internal';\nimport {\n createMigrationInterface,\n ChangeCallback,\n introspectDbSchema,\n RakeDbConfig,\n} from 'rake-db';\nimport { composeMigration, ComposeMigrationParams } from './composeMigration';\nimport { AbortSignal } from './generate';\n\nconst rollbackErr = new Error('Rollback');\n\nexport const verifyMigration = async (\n adapter: AdapterBase,\n config: RakeDbConfig,\n migrationCode: string,\n generateMigrationParams: ComposeMigrationParams,\n roles?: { whereSql?: string },\n defaultPrivileges?: { loadDefaultPrivileges?: boolean },\n): Promise<string | false | undefined> => {\n const migrationFn = new Function('change', migrationCode);\n\n let code: string | false | undefined;\n\n try {\n await adapter.transaction(async (trx) => {\n const changeFns: ChangeCallback<unknown>[] = [];\n migrationFn((changeCb: ChangeCallback<unknown>) => {\n changeFns.push(changeCb);\n });\n\n const { log } = config;\n config.log = false;\n\n const db = createMigrationInterface(trx, true, config).getDb(\n config.columnTypes,\n );\n\n config.log = log;\n\n for (const changeFn of changeFns) {\n await changeFn(db, true);\n }\n\n const dbStructure = await introspectDbSchema(trx, {\n roles,\n loadDefaultPrivileges: defaultPrivileges?.loadDefaultPrivileges,\n });\n generateMigrationParams.verifying = true;\n\n try {\n code = await composeMigration(\n trx,\n config,\n [],\n dbStructure,\n generateMigrationParams,\n );\n } catch (err) {\n if (err instanceof AbortSignal) {\n code = false;\n throw rollbackErr;\n }\n throw err;\n }\n\n throw rollbackErr;\n });\n } catch (err) {\n if (err !== rollbackErr) {\n throw err;\n }\n }\n\n return code;\n};\n","import { RakeDbConfig, RakeDbAst, getSchemaAndTableFromName } from 'rake-db';\nimport {\n exhaustive,\n pluralize,\n addCode,\n Code,\n codeToString,\n ColumnToCodeCtx,\n toArray,\n toCamelCase,\n colors,\n} from 'pqb/internal';\nimport { getColumnDbType } from './generators/columns.generator';\nimport { fnOrTableToString } from './generators/foreignKeys.generator';\n\nexport const report = (\n ast: RakeDbAst[],\n config: RakeDbConfig,\n currentSchema: string,\n) => {\n if (!config.logger) return;\n\n const code: Code[] = [];\n\n let green, red, yellow, pale;\n if (typeof config.log === 'object' && config.log.colors === false) {\n green = red = yellow = pale = (s: string) => s;\n } else {\n ({ green, red, yellow, pale } = colors);\n }\n\n for (const a of ast) {\n switch (a.type) {\n case 'table': {\n let hasPrimaryKey = !!a.primaryKey;\n const counters = {\n column: 0,\n index: a.indexes?.length ?? 0,\n exclude: a.excludes?.length ?? 0,\n 'foreign key':\n a.constraints?.reduce<number>(\n (sum, c) => (c.references ? sum + 1 : sum),\n 0,\n ) ?? 0,\n check:\n a.constraints?.reduce<number>(\n (sum, c) => (c.check ? sum + 1 : sum),\n 0,\n ) ?? 0,\n };\n for (const key in a.shape) {\n counters.column++;\n\n const column = a.shape[key];\n if (column.data.primaryKey) {\n hasPrimaryKey = true;\n }\n\n if (column.data.indexes) {\n counters.index += column.data.indexes.length;\n }\n\n if (column.data.excludes) {\n counters.exclude += column.data.excludes.length;\n }\n\n if (column.data.foreignKeys) {\n counters['foreign key'] += column.data.foreignKeys.length;\n }\n\n if (column.data.checks) {\n counters.check += column.data.checks.length;\n }\n }\n\n const summary: string[] = [];\n\n for (const key in counters) {\n const value = counters[key as keyof typeof counters];\n if (value || key === 'column') {\n summary.push(\n `${value} ${pluralize(key, value, key === 'index' ? 'es' : 's')}`,\n );\n }\n }\n\n if (!hasPrimaryKey) {\n summary.push('no primary key');\n }\n\n code.push(\n `${\n a.action === 'create'\n ? green('+ create table')\n : red('- drop table')\n } ${dbItemName(a, currentSchema)} (${summary.join(', ')})`,\n );\n break;\n }\n case 'changeTable': {\n const inner: Code[] = [];\n\n const toCodeCtx: ColumnToCodeCtx = {\n t: 't',\n table: a.name,\n currentSchema,\n migration: true,\n snakeCase: config.snakeCase,\n };\n\n for (const key in a.shape) {\n const changes = toArray(a.shape[key]);\n for (const change of changes) {\n if (change.type === 'add' || change.type === 'drop') {\n const column = change.item;\n const { primaryKey, indexes, excludes, foreignKeys, checks } =\n column.data;\n\n inner.push(\n `${\n change.type === 'add'\n ? green('+ add column')\n : red('- drop column')\n } ${key} ${\n column.data.alias ?? getColumnDbType(column, currentSchema)\n }${column.data.isNullable ? ' nullable' : ''}${\n primaryKey ? ' primary key' : ''\n }${\n foreignKeys\n ? ` references ${foreignKeys\n .map((fk) => {\n return `${fnOrTableToString(\n fk.fnOrTable,\n )}(${fk.foreignColumns.join(', ')})`;\n })\n .join(', ')}`\n : ''\n }${\n indexes?.length\n ? indexes.length === 1\n ? ', has index'\n : `, has ${indexes.length} indexes`\n : ''\n }${\n excludes?.length\n ? excludes.length === 1\n ? ', has exclude'\n : `, has ${excludes.length} excludes`\n : ''\n }${\n checks?.length\n ? `, checks ${checks\n .map((check) => check.sql.toSQL({ values: [] }))\n .join(', ')}`\n : ''\n }`,\n );\n } else if (change.type === 'change') {\n let name = change.from.column?.data.name ?? key;\n if (config.snakeCase) name = toCamelCase(name);\n\n const changes: Code[] = [];\n inner.push(`${yellow('~ change column')} ${name}:`, changes);\n changes.push(`${yellow('from')}: `);\n\n const fromCode = change.from.column?.toCode(toCodeCtx, key);\n if (fromCode) {\n for (const code of fromCode) {\n addCode(changes, code);\n }\n }\n\n changes.push(` ${yellow('to')}: `);\n\n const toCode = change.to.column?.toCode(toCodeCtx, key);\n if (toCode) {\n for (const code of toCode) {\n addCode(changes, code);\n }\n }\n } else if (change.type === 'rename') {\n inner.push(\n `${yellow('~ rename column')} ${\n config.snakeCase ? toCamelCase(key) : key\n } ${yellow('=>')} ${change.name}`,\n );\n } else {\n exhaustive(change.type);\n }\n }\n }\n\n if (a.drop.primaryKey) {\n inner.push(\n `${red(`- drop primary key`)} on (${a.drop.primaryKey.columns.join(\n ', ',\n )})`,\n );\n }\n\n if (a.drop.indexes) {\n for (const index of a.drop.indexes) {\n inner.push(\n `${red(\n `- drop${index.options.unique ? ' unique' : ''} index`,\n )} on (${index.columns\n .map((c) => ('column' in c ? c.column : c.expression))\n .join(', ')})`,\n );\n }\n }\n\n if (a.drop.excludes) {\n for (const exclude of a.drop.excludes) {\n inner.push(\n `${red(`- drop exclude`)} on (${exclude.columns\n .map((c) => ('column' in c ? c.column : c.expression))\n .join(', ')})`,\n );\n }\n }\n\n if (a.drop.constraints) {\n for (const { references } of a.drop.constraints) {\n if (!references) continue;\n\n const [schema, name] = getSchemaAndTableFromName(\n currentSchema,\n references.fnOrTable as string,\n );\n\n inner.push(\n `${red(`- drop foreign key`)} on (${references.columns.join(\n ', ',\n )}) to ${dbItemName(\n {\n schema,\n name,\n },\n currentSchema,\n )}(${references.foreignColumns.join(', ')})`,\n );\n }\n\n for (const { check } of a.drop.constraints) {\n if (!check) continue;\n\n inner.push(`${red(`- drop check`)} ${check.toSQL({ values: [] })}`);\n }\n }\n\n if (a.add.primaryKey) {\n inner.push(\n `${green(`+ add primary key`)} on (${a.add.primaryKey.columns.join(\n ', ',\n )})`,\n );\n }\n\n if (a.add.indexes) {\n for (const index of a.add.indexes) {\n inner.push(\n `${green(\n `+ add${index.options.unique ? ' unique' : ''} index`,\n )} on (${index.columns\n .map((c) => ('column' in c ? c.column : c.expression))\n .join(', ')})`,\n );\n }\n }\n\n if (a.add.excludes) {\n for (const exclude of a.add.excludes) {\n inner.push(\n `${green(`+ add exclude`)} on (${exclude.columns\n .map((c) => ('column' in c ? c.column : c.expression))\n .join(', ')})`,\n );\n }\n }\n\n if (a.add.constraints) {\n for (const { references } of a.add.constraints) {\n if (!references) continue;\n\n inner.push(\n `${green(`+ add foreign key`)} on (${references.columns.join(\n ', ',\n )}) to ${\n references.fnOrTable as string\n }(${references.foreignColumns.join(', ')})`,\n );\n }\n\n for (const { check } of a.add.constraints) {\n if (!check) continue;\n\n inner.push(\n `${green(`+ add check`)} ${check.toSQL({ values: [] })}`,\n );\n }\n }\n\n code.push(\n `${yellow('~ change table')} ${dbItemName(a, currentSchema)}${\n inner.length ? ':' : ''\n }`,\n );\n\n if (inner.length) {\n code.push(inner);\n }\n\n break;\n }\n case 'schema': {\n code.push(\n `${\n a.action === 'create'\n ? green('+ create schema')\n : red('- drop schema')\n } ${a.name}`,\n );\n break;\n }\n case 'renameSchema': {\n code.push(\n `${yellow('~ rename schema')} ${a.from} ${yellow('=>')} ${a.to}`,\n );\n break;\n }\n case 'renameType': {\n code.push(\n `${yellow(\n `~ ${\n a.fromSchema !== a.toSchema\n ? a.from !== a.to\n ? 'change schema and rename'\n : 'change schema of'\n : 'rename'\n } ${a.kind.toLowerCase()}`,\n )} ${dbItemName(\n {\n schema: a.fromSchema,\n name: a.from,\n },\n currentSchema,\n )} ${yellow('=>')} ${dbItemName(\n {\n schema: a.toSchema,\n name: a.to,\n },\n currentSchema,\n )}`,\n );\n break;\n }\n case 'extension': {\n code.push(\n `${\n a.action === 'create'\n ? green('+ create extension')\n : red('- drop extension')\n } ${dbItemName(a, currentSchema)}${\n a.version ? ` ${pale(a.version)}` : ''\n }`,\n );\n break;\n }\n case 'enum': {\n code.push(\n `${\n a.action === 'create' ? green('+ create enum') : red('- drop enum')\n } ${dbItemName(a, currentSchema)}: (${a.values.join(', ')})`,\n );\n break;\n }\n case 'enumValues': {\n code.push(\n `${\n a.action === 'add'\n ? green('+ add values to enum')\n : red('- remove values from enum')\n } ${dbItemName(a, currentSchema)}: ${a.values.join(', ')}`,\n );\n break;\n }\n case 'changeEnumValues': {\n if (a.fromValues) {\n code.push(\n `${red('- remove values from enum')} ${dbItemName(\n a,\n currentSchema,\n )}: ${a.fromValues.join(', ')}`,\n );\n }\n if (a.toValues) {\n code.push(\n `${green('+ add values to enum')} ${dbItemName(\n a,\n currentSchema,\n )}: ${a.toValues.join(', ')}`,\n );\n }\n break;\n }\n case 'domain': {\n code.push(\n `${\n a.action === 'create'\n ? green('+ create domain')\n : red('- drop domain')\n } ${dbItemName(a, currentSchema)}`,\n );\n break;\n }\n case 'view':\n case 'collation':\n case 'renameEnumValues':\n case 'constraint':\n break;\n case 'renameTableItem': {\n code.push(\n `${yellow(`~ rename ${a.kind.toLowerCase()}`)} on table ${dbItemName(\n { schema: a.tableSchema, name: a.tableName },\n currentSchema,\n )}: ${a.from} ${yellow('=>')} ${a.to}`,\n );\n break;\n }\n case 'role':\n code.push(\n `${\n a.action === 'create' ? green('+ create role') : red('- drop role')\n } ${a.name}`,\n );\n break;\n case 'renameRole':\n case 'changeRole': {\n if (a.type === 'renameRole') {\n code.push(\n `${yellow('~ rename role')} ${a.from} ${yellow('=>')} ${a.to}`,\n );\n } else {\n code.push(`${yellow('~ change role')} ${a.name}`);\n }\n break;\n }\n case 'defaultPrivilege': {\n // Map privilege names for display (e.g., 'ALL' -> 'ALL PRIVILEGES')\n const mapPrivilege = (p: string) =>\n p === 'ALL' ? 'ALL PRIVILEGES' : p;\n\n const schema = a.schema\n ? ` in schema ${colors.pale(a.schema)}`\n : ` ${colors.pale('in all schemas')}`;\n\n // Report grant and revoke of default privileges\n const parts: string[] = [];\n if (a.grant) {\n for (const [objType, config] of Object.entries(a.grant)) {\n if (!config) continue;\n\n const type = objType.replace(/([A-Z])/g, ' $1').toLowerCase();\n\n // Report regular privileges separately\n if (config.privileges?.length) {\n parts.push(\n `${green('+ grant default privileges')} ${config.privileges\n .map(mapPrivilege)\n .join(', ')} on ${type} to ${a.grantee}${schema}`,\n );\n }\n\n // Report grantable privileges separately with \"with grant option\"\n if (config.grantablePrivileges?.length) {\n parts.push(\n `${green(\n '+ grant default privileges',\n )} ${config.grantablePrivileges\n .map(mapPrivilege)\n .join(', ')} on ${type} with grant option to ${\n a.grantee\n }${schema}`,\n );\n }\n }\n }\n if (a.revoke) {\n for (const [objType, config] of Object.entries(a.revoke)) {\n if (!config) continue;\n\n const type = objType.replace(/([A-Z])/g, ' $1').toLowerCase();\n\n // Report regular privileges separately\n if (config.privileges?.length) {\n parts.push(\n `${red('- revoke default privileges')} ${config.privileges\n .map(mapPrivilege)\n .join(', ')} on ${type} from ${a.grantee}${schema}`,\n );\n }\n\n // Report grantable privileges separately with \"with grant option\"\n if (config.grantablePrivileges?.length) {\n parts.push(\n `${red(\n '- revoke default privileges',\n )} ${config.grantablePrivileges\n .map(mapPrivilege)\n .join(', ')} on ${type} with grant option from ${\n a.grantee\n }${schema}`,\n );\n }\n }\n }\n if (parts.length) {\n code.push(parts.join('\\n'));\n }\n break;\n }\n default:\n exhaustive(a);\n }\n }\n\n const result = codeToString(code, '', ' ');\n config.logger.log(result);\n};\n\nconst dbItemName = (\n { schema, name }: { schema?: string; name: string },\n currentSchema: string,\n) => {\n return schema && schema !== currentSchema ? `${schema}.${name}` : name;\n};\n","import {\n AdapterBase,\n PickQueryShape,\n toCamelCase,\n ArrayColumn,\n ColumnsShape,\n Column,\n defaultSchemaConfig,\n DomainColumn,\n PickQueryInternal,\n Query,\n QueryInternal,\n UnknownColumn,\n getQuerySchema,\n emptyObject,\n} from 'pqb/internal';\nimport {\n concatSchemaAndName,\n getDbVersion,\n getSchemaAndTableFromName,\n introspectDbSchema,\n IntrospectedStructure,\n makeFileVersion,\n makeStructureToAstCtx,\n migrate,\n migrateAndClose,\n RakeDbAst,\n RakeDbConfig,\n writeMigrationFile,\n} from 'rake-db';\nimport { EnumItem } from './generators/enums.generator';\nimport { CodeDomain } from './generators/domains.generator';\nimport { composeMigration, ComposeMigrationParams } from './composeMigration';\nimport { verifyMigration } from './verify-migration';\nimport { report } from './reportGeneratedMigration';\nimport path from 'node:path';\nimport { pathToFileURL } from 'url';\n\nexport interface CodeTable extends PickQueryShape, PickQueryInternal {\n table: string;\n q: CodeTableQueryData;\n}\n\nexport interface CodeTableQueryData {\n schema?: string;\n}\n\nexport interface CodeItems {\n schemas: Set<string>;\n enums: Map<string, EnumItem>;\n tables: CodeTable[];\n domains: CodeDomain[];\n}\n\ninterface AfterPull {\n adapter: AdapterBase;\n version: string;\n}\n\nexport interface DbInstance {\n $qb: Query;\n}\n\nexport class AbortSignal extends Error {}\n\nexport const generate = async (\n adapters: AdapterBase[],\n config: RakeDbConfig,\n args: string[],\n afterPull?: AfterPull,\n): Promise<void> => {\n let { dbPath } = config;\n if (!dbPath || !config.baseTable) throw invalidConfig(config);\n if (!adapters.length) throw new Error(`Database options must not be empty`);\n\n if (!dbPath.endsWith('.ts')) dbPath += '.ts';\n\n let migrationName = args[0] ?? 'generated';\n let up: boolean;\n if (migrationName === 'up') {\n up = true;\n migrationName = 'generated';\n } else {\n up = args[1] === 'up';\n }\n\n if (afterPull) {\n adapters = [afterPull.adapter];\n }\n\n const db = await getDbFromConfig(config, dbPath);\n const { columnTypes, internal } = db.$qb;\n\n const rolesDbStructureParam = internal.roles\n ? internal.managedRolesSql\n ? { whereSql: internal.managedRolesSql }\n : emptyObject\n : undefined;\n\n const { dbStructure } = await migrateAndPullStructures(\n adapters,\n config,\n rolesDbStructureParam,\n internal.roles ? { loadDefaultPrivileges: true } : undefined,\n afterPull,\n );\n\n const [adapter] = adapters;\n const adapterSchema = adapter.getSchema();\n const currentSchema =\n (typeof adapterSchema === 'function' ? adapterSchema() : adapterSchema) ??\n 'public';\n\n const codeItems = await getActualItems(\n db,\n currentSchema,\n internal,\n columnTypes,\n );\n\n const structureToAstCtx = makeStructureToAstCtx(config, currentSchema);\n\n const generateMigrationParams: ComposeMigrationParams = {\n structureToAstCtx,\n codeItems,\n currentSchema,\n internal,\n };\n\n const ast: RakeDbAst[] = [];\n\n let migrationCode;\n try {\n migrationCode = await composeMigration(\n adapter,\n config,\n ast,\n dbStructure,\n generateMigrationParams,\n );\n } catch (err) {\n if (err instanceof AbortSignal) {\n await closeAdapters(adapters);\n return;\n }\n throw err;\n }\n\n if (migrationCode && !afterPull) {\n const result = await verifyMigration(\n adapter,\n config,\n migrationCode,\n generateMigrationParams,\n rolesDbStructureParam,\n internal.roles ? { loadDefaultPrivileges: true } : undefined,\n );\n\n if (result !== undefined) {\n throw new Error(\n `Failed to verify generated migration: some of database changes were not applied properly. This is a bug, please open an issue, attach the following migration code:\\n${migrationCode}${\n result === false ? '' : `\\nAfter applying:\\n${result}`\n }`,\n );\n }\n }\n\n const { logger } = config;\n\n if ((!up || !migrationCode) && !afterPull) await closeAdapters(adapters);\n\n if (!migrationCode) {\n logger?.log('No changes were detected');\n return;\n }\n\n const version = afterPull?.version ?? (await makeFileVersion({}, config));\n\n const delayLog: string[] = [];\n await writeMigrationFile(\n {\n ...config,\n logger: logger ? { ...logger, log: (msg) => delayLog.push(msg) } : logger,\n },\n version,\n migrationName,\n migrationCode,\n );\n\n report(ast, config, currentSchema);\n\n if (logger) {\n for (const msg of delayLog) {\n logger.log(`\\n${msg}`);\n }\n }\n\n if (up) {\n for (const adapter of adapters) {\n await migrateAndClose(adapter, config);\n }\n } else if (!afterPull) {\n await closeAdapters(adapters);\n }\n};\n\nconst invalidConfig = (config: RakeDbConfig) =>\n new Error(\n `\\`${\n config.dbPath ? 'baseTable' : 'dbPath'\n }\\` setting must be set in the migrations config for the generator to work`,\n );\n\nconst getDbFromConfig = async (\n config: RakeDbConfig,\n dbPath: string,\n): Promise<DbInstance> => {\n const module = await config.import(\n pathToFileURL(path.resolve(config.basePath, dbPath)).toString(),\n );\n const db = (module as { [K: string]: DbInstance })[\n config.dbExportedAs ?? 'db'\n ];\n if (!db?.$qb) {\n throw new Error(\n `Unable to import OrchidORM instance as ${\n config.dbExportedAs ?? 'db'\n } from ${config.dbPath}`,\n );\n }\n return db;\n};\n\nconst migrateAndPullStructures = async (\n adapters: AdapterBase[],\n config: RakeDbConfig,\n roles?: { whereSql?: string },\n defaultPrivileges?: { loadDefaultPrivileges?: boolean },\n afterPull?: AfterPull,\n): Promise<{\n dbStructure: IntrospectedStructure;\n}> => {\n if (afterPull) {\n const version = await getDbVersion(adapters[0]);\n\n return {\n dbStructure: {\n version,\n schemas: [],\n tables: [],\n views: [],\n indexes: [],\n excludes: [],\n constraints: [],\n triggers: [],\n extensions: [],\n enums: [],\n domains: [],\n collations: [],\n },\n };\n }\n\n for (const adapter of adapters) {\n await migrate(adapter, config);\n }\n\n const dbStructures = await Promise.all(\n adapters.map((adapter) =>\n introspectDbSchema(adapter, {\n roles,\n loadDefaultPrivileges: defaultPrivileges?.loadDefaultPrivileges,\n }),\n ),\n );\n\n const dbStructure = dbStructures[0];\n for (let i = 1; i < dbStructures.length; i++) {\n compareDbStructures(dbStructure, dbStructures[i], i);\n }\n\n return { dbStructure };\n};\n\nconst compareDbStructures = (\n a: unknown,\n b: unknown,\n i: number,\n path?: string,\n) => {\n let err: true | undefined;\n if (typeof a !== typeof b) {\n err = true;\n }\n\n if (!a || typeof a !== 'object') {\n if (a !== b) {\n err = true;\n }\n } else {\n if (Array.isArray(a)) {\n for (let n = 0, len = a.length; n < len; n++) {\n compareDbStructures(\n a[n],\n (b as unknown[])[n],\n i,\n path ? `${path}[${n}]` : String(n),\n );\n }\n } else {\n for (const key in a) {\n compareDbStructures(\n a[key as keyof typeof a],\n (b as Record<string, unknown>)[key],\n i,\n path ? `${path}.${key}` : key,\n );\n }\n }\n }\n\n if (err) {\n throw new Error(`${path} in the db 0 does not match db ${i}`);\n }\n};\n\nconst getActualItems = async (\n db: DbInstance,\n currentSchema: string,\n internal: QueryInternal,\n columnTypes: unknown,\n): Promise<CodeItems> => {\n const tableNames = new Set<string>();\n const habtmTables = new Map<string, CodeTable>();\n\n const codeItems: CodeItems = {\n schemas: new Set(undefined),\n enums: new Map(),\n tables: [],\n domains: [],\n };\n\n codeItems.schemas.add(currentSchema);\n\n const domains = new Map<string, CodeDomain>();\n\n for (const key in db) {\n if (key[0] === '$') continue;\n\n const table = db[key as keyof typeof db] as Query;\n\n if (!table.table) {\n throw new Error(`Table ${key} is missing table property`);\n }\n\n const schema = getQuerySchema(table);\n const name = concatSchemaAndName({ schema, name: table.table });\n if (tableNames.has(name)) {\n throw new Error(`Table ${name} is defined more than once`);\n }\n\n tableNames.add(name);\n\n if (schema) codeItems.schemas.add(schema);\n\n codeItems.tables.push({\n table: table.table as string,\n shape: table.shape,\n internal: table.internal,\n q: {\n schema: getQuerySchema(table),\n },\n });\n\n for (const key in table.relations) {\n const column = table.shape[key];\n // column won't be set for has and belongs to many\n if (column && 'joinTable' in column) {\n processHasAndBelongsToManyColumn(column, habtmTables, codeItems);\n }\n }\n\n for (const key in table.shape) {\n const column = table.shape[key] as Column;\n // remove computed columns from the shape\n if (column.data.computed) {\n delete table.shape[key];\n } else if (column instanceof DomainColumn) {\n const [schemaName = currentSchema, name] = getSchemaAndTableFromName(\n currentSchema,\n column.dataType,\n );\n domains.set(column.dataType, {\n schemaName,\n name,\n column: (column.data.as ??\n new UnknownColumn(defaultSchemaConfig)) as Column,\n });\n } else {\n const en =\n column.dataType === 'enum'\n ? column\n : column instanceof ArrayColumn &&\n column.data.item.dataType === 'enum'\n ? column.data.item\n : undefined;\n\n if (en) {\n processEnumColumn(en, currentSchema, codeItems);\n }\n }\n }\n }\n\n if (internal.extensions) {\n for (const extension of internal.extensions) {\n const [schema] = getSchemaAndTableFromName(currentSchema, extension.name);\n if (schema) codeItems.schemas.add(schema);\n }\n }\n\n if (internal.domains) {\n for (const key in internal.domains) {\n const [schemaName = currentSchema, name] = getSchemaAndTableFromName(\n currentSchema,\n key,\n );\n const column = internal.domains[key](columnTypes);\n\n domains.set(key, {\n schemaName,\n name,\n column,\n });\n }\n }\n\n for (const domain of domains.values()) {\n codeItems.schemas.add(domain.schemaName);\n codeItems.domains.push(domain);\n }\n\n // Add schemas from role default privileges to prevent them from being dropped\n if (internal.roles) {\n for (const role of internal.roles) {\n if (role.defaultPrivileges) {\n for (const privilege of role.defaultPrivileges) {\n if (privilege.schema) codeItems.schemas.add(privilege.schema);\n }\n }\n }\n }\n\n return codeItems;\n};\n\nconst processEnumColumn = (\n column: Column.Pick.QueryColumn,\n currentSchema: string,\n codeItems: CodeItems,\n) => {\n const { enumName, options } = column as unknown as {\n enumName: string;\n options: [string, ...string[]];\n };\n\n const [schema, name] = getSchemaAndTableFromName(currentSchema, enumName);\n const enumSchema = schema ?? currentSchema;\n\n codeItems.enums.set(`${enumSchema}.${name}`, {\n schema: enumSchema,\n name,\n values: options,\n });\n if (schema) codeItems.schemas.add(schema);\n};\n\nconst processHasAndBelongsToManyColumn = (\n column: Column.Pick.QueryColumn & { joinTable: unknown },\n habtmTables: Map<string, CodeTable>,\n codeItems: CodeItems,\n) => {\n const q = (column as { joinTable: CodeTable }).joinTable;\n const prev = habtmTables.get(q.table);\n if (prev) {\n for (const key in q.shape) {\n if (q.shape[key].dataType !== prev.shape[key]?.dataType) {\n throw new Error(\n `Column ${key} in ${q.table} in hasAndBelongsToMany relation does not match with the relation on the other side`,\n );\n }\n }\n return;\n }\n habtmTables.set(q.table, q);\n\n const joinTable = Object.create(q);\n\n const shape: ColumnsShape = {};\n for (const key in joinTable.shape) {\n const column = Object.create(joinTable.shape[key]);\n column.data = {\n ...column.data,\n name: column.data.name ?? key,\n identity: undefined,\n primaryKey: undefined,\n default: undefined,\n };\n shape[toCamelCase(key)] = column;\n }\n joinTable.shape = shape;\n joinTable.internal = {\n ...joinTable.internal,\n tableData: {\n ...joinTable.internal.tableData,\n primaryKey: {\n columns: Object.keys(shape),\n },\n },\n noPrimaryKey: false,\n };\n\n codeItems.tables.push(joinTable);\n\n return;\n};\n\nconst closeAdapters = (adapters: AdapterBase[]) => {\n return Promise.all(adapters.map((x) => x.close()));\n};\n","import {\n columnsShapeToCode,\n pushTableDataCode,\n TableData,\n Code,\n codeToString,\n getImportPath,\n RecordString,\n singleQuote,\n toCamelCase,\n toPascalCase,\n} from 'pqb/internal';\nimport { RakeDbAst, RakeDbConfig } from 'rake-db';\nimport path from 'node:path';\n\ninterface TableInfo {\n key: string;\n dbTableName: string;\n name: string;\n className: string;\n path: string;\n}\n\ninterface TableInfos {\n [dbTableName: string]: TableInfo;\n}\n\nexport interface AppCodeGenTable extends TableInfo {\n content: string;\n}\n\nexport interface AppCodeGenTables {\n [K: string]: AppCodeGenTable;\n}\n\ninterface FKeys {\n [K: string]: { table: TableInfo; references: TableData.References }[];\n}\n\nexport const getTableInfosAndFKeys = (\n asts: RakeDbAst[],\n config: RakeDbConfig,\n): { tableInfos: TableInfos; fkeys: FKeys } => {\n const generateTableTo =\n config.generateTableTo ?? ((name: string) => `./tables/${name}.table.ts`);\n\n const tableInfos: TableInfos = {};\n const fkeys: FKeys = {};\n for (const ast of asts) {\n if (ast.type === 'table') {\n const tableKey = toCamelCase(ast.name);\n const dbTableName = ast.schema ? `${ast.schema}.${ast.name}` : ast.name;\n let tablePath = path.resolve(config.basePath, generateTableTo(tableKey));\n if (!tablePath.endsWith('.ts')) tablePath += '.ts';\n\n const name = toPascalCase(ast.name);\n\n const info: TableInfo = {\n dbTableName,\n key: tableKey,\n path: tablePath,\n name,\n className: `${name}Table`,\n };\n\n tableInfos[dbTableName] = info;\n\n if (ast.constraints) {\n for (const { references } of ast.constraints) {\n if (!references) continue;\n\n (fkeys[references.fnOrTable as string] ??= []).push({\n table: info,\n references,\n });\n }\n }\n }\n }\n\n return { tableInfos, fkeys };\n};\n\nexport const appCodeGenTable = (\n tableInfos: TableInfos,\n fkeys: FKeys,\n ast: RakeDbAst.Table,\n baseTablePath: string,\n baseTableExportedAs: string,\n currentSchema: string,\n): AppCodeGenTable => {\n const tableInfo =\n tableInfos[ast.schema ? `${ast.schema}.${ast.name}` : ast.name];\n\n const imports: RecordString = {\n 'orchid-orm': 'Selectable, Insertable, Updatable',\n [getImportPath(tableInfo.path, baseTablePath)]: baseTableExportedAs,\n };\n\n const props: Code[] = [];\n\n if (ast.schema) {\n props.push(`schema = ${singleQuote(ast.schema)};`);\n }\n\n props.push(`readonly table = ${singleQuote(ast.name)};`);\n\n if (ast.comment) {\n props.push(`comment = ${singleQuote(ast.comment)};`);\n }\n\n if (ast.noPrimaryKey === 'ignore') {\n props.push('noPrimaryKey = true;');\n }\n\n const hasTableData = Boolean(\n ast.primaryKey ||\n ast.indexes?.length ||\n ast.excludes?.length ||\n ast.constraints?.length,\n );\n\n const shapeCode = columnsShapeToCode(\n { t: 't', table: ast.name, currentSchema },\n ast.shape,\n );\n\n props.push(\n `columns = this.setColumns(${hasTableData ? '\\n ' : ''}(t) => ({`,\n hasTableData ? [shapeCode] : shapeCode,\n hasTableData ? ' }),' : '}));',\n );\n\n if (hasTableData) {\n props.push(pushTableDataCode([], ast), ');');\n }\n\n const relations: Code[] = [];\n\n const fullTableName = ast.schema ? `${ast.schema}.${ast.name}` : ast.name;\n const belongsTo = fkeys[fullTableName];\n if (belongsTo) {\n for (const { table, references } of belongsTo) {\n imports[getImportPath(tableInfo.path, table.path)] = table.className;\n\n relations.push(\n `${table.key}: this.belongsTo(() => ${table.className}, {`,\n [\n `columns: [${references.foreignColumns\n .map(singleQuote)\n .join(', ')}],`,\n `references: [${references.columns.map(singleQuote).join(', ')}],`,\n ],\n '}),',\n );\n }\n }\n\n if (ast.constraints) {\n for (const { references } of ast.constraints) {\n if (!references) continue;\n\n const table = tableInfos[references.fnOrTable as string];\n imports[getImportPath(tableInfo.path, table.path)] = table.className;\n\n relations.push(\n `${table.key}: this.hasMany(() => ${table.className}, {`,\n [\n `columns: [${references.columns.map(singleQuote).join(', ')}],`,\n `references: [${references.foreignColumns\n .map(singleQuote)\n .join(', ')}],`,\n ],\n '}),',\n );\n }\n }\n\n if (relations.length) {\n props.push('', 'relations = {', relations, '};');\n }\n\n const importsCode = importsToCode(imports);\n\n const { name, className } = tableInfo;\n const code: Code[] = [\n `export type ${name} = Selectable<${className}>;\nexport type ${name}New = Insertable<${className}>;\nexport type ${name}Update = Updatable<${className}>;\n\nexport class ${className} extends ${baseTableExportedAs} {`,\n props,\n '}\\n',\n ];\n\n return {\n ...tableInfo,\n content: importsCode + '\\n\\n' + codeToString(code, '', ' '),\n };\n};\n\nfunction importsToCode(imports: Record<string, string>): string {\n return Object.entries(imports)\n .map(([from, name]) => `import { ${name} } from '${from}';`)\n .join('\\n');\n}\n","import fs from 'fs/promises';\nimport {\n CallExpression,\n Expression,\n ImportDeclaration,\n NamedImports,\n NodeArray,\n ObjectLiteralExpression,\n Statement,\n VariableStatement,\n} from 'typescript';\nimport { AppCodeGenTables } from './tables.appCodeGenerator';\nimport {\n DbExtension,\n getImportPath,\n quoteObjectKey,\n singleQuote,\n} from 'pqb/internal';\nimport { RakeDbAst } from 'rake-db';\n\n// importing directly won't work after compiling\nimport typescript from 'typescript';\nconst { createSourceFile, ScriptTarget, SyntaxKind } = typescript;\n\ntype Change = [from: number, to: number] | string;\n\nexport const appCodeGenUpdateDbFile = async (\n dbPath: string,\n tables: AppCodeGenTables,\n extensions: DbExtension[],\n domains: RakeDbAst.Domain[],\n currentSchema: string,\n): Promise<string | undefined> => {\n const content = await fs.readFile(dbPath, 'utf-8');\n const statements = getTsStatements(content);\n const importName = getOrchidOrmImportName(statements);\n if (!importName) {\n throw new Error(`Main file does not contain import of orchid-orm`);\n }\n const { config, tablesList } = getOrchidOrmArgs(importName, statements);\n\n const changes: Change[] = [];\n\n let replacedConfig: string | undefined;\n if (extensions.length || domains.length) {\n let code = content.slice(config.pos, config.end).trim();\n\n if (code[0] !== '{') code = `{...${code}}`;\n\n code = '{\\n ' + code.slice(1, -1).trim();\n\n if (!code.endsWith(',')) code += ',';\n\n if (extensions.length) {\n code += `\\n extensions: [${extensions\n .map((ext) =>\n ext.version\n ? `{ ${quoteObjectKey(ext.name, false)}: '${ext.version}' }`\n : singleQuote(ext.name),\n )\n .join(', ')}],`;\n }\n\n if (domains.length) {\n code += `\\n domains: {\\n ${domains\n .sort((a, b) => (a.name > b.name ? 1 : -1))\n .map(\n (ast) =>\n `${quoteObjectKey(\n ast.schema ? `${ast.schema}.${ast.name}` : ast.name,\n false,\n )}: (t) => ${ast.baseType.toCode(\n { t: 't', table: ast.name, currentSchema },\n ast.baseType.data.name ?? '',\n )},`,\n )\n .join('\\n ')}\\n },`;\n }\n\n replacedConfig = code + '\\n}';\n }\n\n const tablesChanges = makeTablesListChanges(\n content,\n statements,\n tablesList,\n tables,\n dbPath,\n );\n\n if (tablesChanges) {\n addChange(\n content,\n changes,\n tablesChanges.imports.pos,\n tablesChanges.imports.text,\n );\n }\n\n if (replacedConfig) {\n replaceContent(content, changes, config.pos, config.end, replacedConfig);\n }\n\n if (tablesChanges) {\n addChange(\n content,\n changes,\n tablesChanges.tablesList.pos,\n tablesChanges.tablesList.text,\n );\n }\n\n return applyChanges(content, changes);\n};\n\nconst getTsStatements = (content: string): NodeArray<Statement> => {\n return createSourceFile('file.ts', content, ScriptTarget.Latest, true)\n .statements;\n};\n\nconst getOrchidOrmImportName = (\n statements: NodeArray<Statement>,\n): string | undefined => {\n for (const node of statements) {\n if (node.kind !== SyntaxKind.ImportDeclaration) continue;\n\n const imp = node as ImportDeclaration;\n const source = imp.moduleSpecifier.getText().slice(1, -1);\n if (source !== 'orchid-orm') continue;\n\n if (!imp.importClause) continue;\n\n const elements = (imp.importClause.namedBindings as NamedImports)?.elements;\n\n if (!elements) imp;\n\n for (const element of elements) {\n if (\n element.name.escapedText === 'orchidORM' ||\n (element.propertyName &&\n 'escapedText' in element.propertyName &&\n element.propertyName.escapedText === 'orchidORM')\n ) {\n return element.name.escapedText.toString();\n }\n }\n }\n\n return;\n};\n\nconst makeTablesListChanges = (\n content: string,\n statements: NodeArray<Statement>,\n object: ObjectLiteralExpression,\n tables: AppCodeGenTables,\n dbPath: string,\n) => {\n const spaces = getTablesListSpaces(content, object);\n\n let imports = '';\n let tablesList = '';\n const prependComma =\n object.properties.length && !object.properties.hasTrailingComma;\n const tablesListNewLine = content\n .slice(object.properties.end, object.end)\n .includes('\\n');\n\n const tablesArr = Object.values(tables);\n for (let i = 0; i < tablesArr.length; i++) {\n const { path, className, key } = tablesArr[i];\n const importPath = getImportPath(dbPath, path);\n\n imports += `\\nimport { ${className} } from '${importPath}';`;\n\n tablesList += `${\n i === 0 && prependComma ? ',' : ''\n }\\n${spaces} ${key}: ${className},`;\n\n if (i === tablesArr.length - 1 && !tablesListNewLine) {\n tablesList += `\\n${spaces}`;\n }\n }\n\n if (!imports.length) return;\n\n let importPos = 0;\n for (const node of statements) {\n if (node.kind === SyntaxKind.ImportDeclaration) {\n importPos = node.end;\n }\n }\n\n return {\n imports: { pos: importPos, text: imports },\n tablesList: { pos: object.properties.end, text: tablesList },\n };\n};\n\nconst getTablesListSpaces = (content: string, object: Expression): string => {\n const lines = content.slice(0, object.end).split('\\n');\n const last = lines[lines.length - 1];\n return last.match(/^\\s+/)?.[0] || '';\n};\n\nconst getOrchidOrmArgs = (\n importName: string,\n statements: NodeArray<Statement>,\n): { config: Expression; tablesList: ObjectLiteralExpression } => {\n for (const v of statements) {\n if (v.kind !== SyntaxKind.VariableStatement) continue;\n\n for (const node of (v as VariableStatement).declarationList.declarations) {\n const call = node.initializer as CallExpression;\n if (call?.kind !== SyntaxKind.CallExpression) continue;\n\n if (call.expression.getText() !== importName) continue;\n\n if (call.arguments.length !== 2) {\n throw new Error(\n 'Invalid number of arguments when initializing orchid orm',\n );\n }\n\n const object = call.arguments[1] as ObjectLiteralExpression;\n if (object?.kind !== SyntaxKind.ObjectLiteralExpression) {\n throw new Error(\n 'Second argument of orchidORM must be an object literal',\n );\n }\n\n return { config: call.arguments[0], tablesList: object };\n }\n }\n\n throw new Error('List of tables is not found in main file');\n};\n\nconst addChange = (\n content: string,\n changes: Change[],\n at: number,\n text: string,\n end = at,\n) => {\n if (changes.length === 0) {\n changes.push([0, at], text, [end, content.length]);\n } else {\n const last = changes[changes.length - 1] as [number, number];\n last[1] = at;\n changes.push(text, [end, content.length]);\n }\n};\n\nconst replaceContent = (\n content: string,\n changes: Change[],\n from: number,\n to: number,\n text: string,\n) => {\n addChange(content, changes, from, text, to);\n};\n\nconst applyChanges = (content: string, changes: Change[]) => {\n return changes.length\n ? changes\n .map((item) =>\n typeof item === 'string' ? item : content.slice(item[0], item[1]),\n )\n .join('')\n : content;\n};\n","import { DbExtension, AdapterBase, pathToLog } from 'pqb/internal';\nimport {\n makeFileVersion,\n makeStructureToAstCtx,\n RakeDbAst,\n RakeDbConfig,\n saveMigratedVersion,\n SilentQueries,\n structureToAst,\n} from 'rake-db';\nimport fs from 'fs/promises';\nimport path from 'node:path';\nimport {\n AppCodeGenTable,\n appCodeGenTable,\n AppCodeGenTables,\n getTableInfosAndFKeys,\n} from './appCodeGenerators/tables.appCodeGenerator';\nimport { appCodeGenUpdateDbFile } from './appCodeGenerators/dbFile.appCodeGenerator';\nimport { generate } from '../generate/generate';\n\nexport const pull = async (adapters: AdapterBase[], config: RakeDbConfig) => {\n if (!config.dbPath || !config.baseTable) {\n throw new Error(\n `\\`${\n config.dbPath ? 'baseTable' : 'dbPath'\n }\\` setting must be set in the migrations config for pull command`,\n );\n }\n\n const baseTablePath = config.baseTable.getFilePath();\n const baseTableExportedAs = config.baseTable.exportAs;\n\n const [adapter] = adapters;\n const adapterSchema = adapter.getSchema();\n const currentSchema =\n (typeof adapterSchema === 'function' ? adapterSchema() : adapterSchema) ??\n 'public';\n\n const ctx = makeStructureToAstCtx(config, currentSchema);\n\n const asts = await structureToAst(ctx, adapter, config);\n\n const { tableInfos, fkeys } = getTableInfosAndFKeys(asts, config);\n\n const exclusiveWriteOptions = { flag: 'wx' as const };\n const pendingFileWrites: [\n path: string,\n content: string,\n options?: { flag: 'wx' },\n ][] = [];\n\n const tables: AppCodeGenTables = {};\n const extensions: DbExtension[] = [];\n const domains: RakeDbAst.Domain[] = [];\n\n let firstTable: undefined | AppCodeGenTable;\n for (const ast of asts) {\n switch (ast.type) {\n case 'table': {\n const table = appCodeGenTable(\n tableInfos,\n fkeys,\n ast,\n baseTablePath,\n baseTableExportedAs,\n currentSchema,\n );\n tables[table.key] = table;\n if (!firstTable) firstTable = table;\n pendingFileWrites.push([\n table.path,\n table.content,\n exclusiveWriteOptions,\n ]);\n break;\n }\n case 'extension': {\n extensions.push({\n name: ast.schema ? `${ast.schema}.${ast.name}` : ast.name,\n version: ast.version,\n });\n break;\n }\n case 'domain': {\n domains.push(ast);\n break;\n }\n }\n }\n\n if (!firstTable && !extensions.length && !domains.length) {\n await adapter.close();\n return;\n }\n\n let dbPath = path.resolve(config.basePath, config.dbPath);\n if (!dbPath.endsWith('.ts')) dbPath += '.ts';\n const content = await appCodeGenUpdateDbFile(\n dbPath,\n tables,\n extensions,\n domains,\n currentSchema,\n );\n if (content) pendingFileWrites.push([dbPath, content]);\n\n if (firstTable) {\n await fs.mkdir(path.dirname(firstTable.path), { recursive: true });\n }\n\n await Promise.all(\n pendingFileWrites.map(([path, content, options]) =>\n fs.writeFile(path, content, options).then(() => {\n config.logger?.log(`Created ${pathToLog(path)}`);\n }),\n ),\n );\n\n const version = await makeFileVersion({}, config);\n await generate(adapters, config, ['pull'], { adapter, version });\n\n // save migrated version into all configured databases\n await Promise.all(\n adapters.map(async (adapter) => {\n const silentAdapter = adapter as unknown as SilentQueries;\n silentAdapter.silentArrays = adapter.arrays;\n await saveMigratedVersion(silentAdapter, version, 'pull.ts', config);\n await adapter.close();\n }),\n );\n};\n","import { rakeDbCommands } from 'rake-db';\nimport { generate } from './generate/generate';\nimport { pull } from './pull/pull';\nimport { ColumnSchemaConfig } from 'pqb/internal';\n\nrakeDbCommands.g = rakeDbCommands.generate = {\n run: generate,\n help: 'gen migration from OrchidORM tables',\n helpArguments: {\n 'no arguments': '\"generated\" is a default file name',\n 'migration-name': 'set migration file name',\n up: 'auto-apply migration',\n 'migration-name up': 'with a custom name and apply it',\n },\n helpAfter: 'reset',\n};\n\nrakeDbCommands.pull.run = pull;\nrakeDbCommands.pull.help =\n 'generate ORM tables and a migration for an existing database';\n\ndeclare module 'rake-db' {\n export interface RakeDbConfig {\n dbPath?: string;\n dbExportedAs?: string;\n generateTableTo?(tableName: string): string;\n }\n\n export interface RakeDbCliConfigInputBase<\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n SchemaConfig extends ColumnSchemaConfig,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CT,\n > {\n dbPath?: string;\n dbExportedAs?: string;\n generateTableTo?(tableName: string): string;\n }\n}\n"],"names":["name","promptSelect","colors","item","getSchemaAndTableFromName","getDbTableColumnsChecks","dbColumnToAst","toSnakeCase","column","instantiateDbColumn","ArrayColumn","getColumnBaseType","EnumColumn","deepCompare","concatSchemaAndName","key","encodeColumnDefault","type","RawSql","emptyArray","codeEnum","toArray","i","getIndexName","getExcludeName","getConstraintName","getFreeSetAlias","tableToAst","getMigrationsSchemaAndTable","codeTable","getDbStructureTableData","VirtualColumn","codeRole","getSupportedDefaultPrivileges","makeDomainsMap","astToMigration","createMigrationInterface","introspectDbSchema","pluralize","toCamelCase","changes","code","addCode","exhaustive","config","codeToString","internal","emptyObject","makeStructureToAstCtx","makeFileVersion","writeMigrationFile","adapter","migrateAndClose","pathToFileURL","getDbVersion","migrate","path","getQuerySchema","DomainColumn","UnknownColumn","defaultSchemaConfig","toPascalCase","getImportPath","singleQuote","columnsShapeToCode","pushTableDataCode","quoteObjectKey","structureToAst","content","pathToLog","saveMigratedVersion","rakeDbCommands"],"mappings":"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"}