{"version":3,"file":"node-postgres.mjs","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","item","column","key","type","codeEnum","i","codeTable","codeRole","changes","code","config","adapter","path","content"],"mappings":"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"}