rake-db 2.3.2 → 2.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/common.ts","../src/migration/change.ts","../src/migration/migrationUtils.ts","../src/migration/createTable.ts","../src/migration/changeTable.ts","../src/migration/createJoinTable.ts","../src/migration/migration.ts","../src/commands/migrateOrRollback.ts","../src/commands/createOrDrop.ts","../src/commands/generate.ts","../src/pull/dbStructure.ts","../src/pull/structureToAst.ts","../src/pull/astToMigration.ts","../src/pull/pull.ts","../src/rakeDb.ts"],"sourcesContent":["import {\n Adapter,\n AdapterOptions,\n NoPrimaryKeyOption,\n QueryLogOptions,\n singleQuote,\n} from 'pqb';\nimport Enquirer from 'enquirer';\nimport path from 'path';\nimport { readdir } from 'fs/promises';\nimport { RakeDbAst } from './ast';\n\nexport type RakeDbConfig = {\n migrationsPath: string;\n migrationsTable: string;\n requireTs(path: string): void;\n noPrimaryKey?: NoPrimaryKeyOption;\n appCodeUpdater?: AppCodeUpdater;\n useCodeUpdater?: boolean;\n} & QueryLogOptions;\n\nexport type AppCodeUpdater = (params: {\n ast: RakeDbAst;\n options: AdapterOptions;\n cache: object;\n}) => Promise<void>;\n\nexport const migrationConfigDefaults = {\n migrationsPath: path.resolve('src', 'migrations'),\n migrationsTable: 'schemaMigrations',\n requireTs: require,\n log: true,\n logger: console,\n useCodeUpdater: true,\n};\n\nexport const getMigrationConfigWithDefaults = (\n config: Partial<RakeDbConfig>,\n) => {\n return { ...migrationConfigDefaults, ...config };\n};\n\nexport const getDatabaseAndUserFromOptions = (\n options: AdapterOptions,\n): { database: string; user: string } => {\n if (options.databaseURL) {\n const url = new URL(options.databaseURL);\n return {\n database: url.pathname.slice(1),\n user: url.username,\n };\n } else {\n return {\n database: options.database as string,\n user: options.user as string,\n };\n }\n};\n\nexport const setAdapterOptions = (\n options: AdapterOptions,\n set: { database?: string; user?: string; password?: string },\n): AdapterOptions => {\n if (options.databaseURL) {\n const url = new URL(options.databaseURL);\n\n if ('database' in set) {\n url.pathname = `/${set.database}`;\n }\n\n if (set.user !== undefined) {\n url.username = set.user;\n }\n\n if (set.password !== undefined) {\n url.password = set.password;\n }\n\n return { ...options, databaseURL: url.toString() };\n } else {\n return {\n ...options,\n ...set,\n };\n }\n};\n\nconst askAdminCredentials = async (): Promise<{\n user: string;\n password: string;\n}> => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const prompt = new (Enquirer as any).Snippet({\n message: `What are postgres admin login and password?`,\n fields: [\n {\n name: 'user',\n required: true,\n },\n {\n name: 'password',\n },\n ],\n values: {\n user: 'postgres',\n password: '',\n },\n template: 'Admin user: {{user}}\\nAdmin password: {{password}}',\n });\n\n const { values } = await prompt.run();\n if (!values.password) values.password = '';\n\n return values;\n};\n\nexport const setAdminCredentialsToOptions = async (\n options: AdapterOptions,\n): Promise<AdapterOptions> => {\n const values = await askAdminCredentials();\n return setAdapterOptions(options, values);\n};\n\nexport const createSchemaMigrations = async (\n db: Adapter,\n config: RakeDbConfig,\n) => {\n try {\n await db.query(\n `CREATE TABLE ${quoteWithSchema({\n name: config.migrationsTable,\n })} ( version TEXT NOT NULL )`,\n );\n console.log('Created versions table');\n } catch (err) {\n if ((err as Record<string, unknown>).code === '42P07') {\n console.log('Versions table exists');\n } else {\n throw err;\n }\n }\n};\n\nexport const getFirstWordAndRest = (\n input: string,\n): [string] | [string, string] => {\n const index = input.search(/(?=[A-Z])|[-_]/);\n if (index !== -1) {\n const restStart =\n input[index] === '-' || input[index] === '_' ? index + 1 : index;\n const rest = input.slice(restStart);\n return [input.slice(0, index), rest[0].toLowerCase() + rest.slice(1)];\n } else {\n return [input];\n }\n};\n\nconst getTextAfterRegExp = (\n input: string,\n regex: RegExp,\n length: number,\n): string | undefined => {\n let index = input.search(regex);\n if (index === -1) return;\n\n if (input[index] === '-' || input[index] === '_') index++;\n index += length;\n\n const start = input[index] == '-' || input[index] === '_' ? index + 1 : index;\n const text = input.slice(start);\n return text[0].toLowerCase() + text.slice(1);\n};\n\nexport const getTextAfterTo = (input: string): string | undefined => {\n return getTextAfterRegExp(input, /(To|-to|_to)[A-Z-_]/, 2);\n};\n\nexport const getTextAfterFrom = (input: string): string | undefined => {\n return getTextAfterRegExp(input, /(From|-from|_from)[A-Z-_]/, 4);\n};\n\nexport type MigrationFile = {\n path: string;\n version: string;\n};\n\nexport const getMigrationFiles = async (\n config: RakeDbConfig,\n up: boolean,\n): Promise<MigrationFile[]> => {\n const { migrationsPath } = config;\n\n let files: string[];\n try {\n files = await readdir(path.resolve(migrationsPath));\n } catch (_) {\n return [];\n }\n\n const sort = up ? sortAsc : sortDesc;\n return sort(files).map((file) => {\n if (!file.endsWith('.ts')) {\n throw new Error(\n `Only .ts files are supported for migration, received: ${file}`,\n );\n }\n\n const timestampMatch = file.match(/^(\\d{14})\\D/);\n if (!timestampMatch) {\n throw new Error(\n `Migration file name should start with 14 digit version, received ${file}`,\n );\n }\n\n return {\n path: path.resolve(migrationsPath, file),\n version: timestampMatch[1],\n };\n });\n};\n\nexport const sortAsc = (arr: string[]) => arr.sort();\n\nexport const sortDesc = (arr: string[]) => arr.sort((a, b) => (a > b ? -1 : 1));\n\nexport const joinWords = (...words: string[]) => {\n return words\n .slice(1)\n .reduce(\n (acc, word) => acc + word[0].toUpperCase() + word.slice(1),\n words[0],\n );\n};\n\nexport const joinColumns = (columns: string[]) => {\n return columns.map((column) => `\"${column}\"`).join(', ');\n};\n\nexport const quoteWithSchema = ({\n schema,\n name,\n}: {\n schema?: string;\n name: string;\n}) => {\n return schema ? `\"${schema}\".\"${name}\"` : `\"${name}\"`;\n};\n\nexport const getSchemaAndTableFromName = (\n name: string,\n): [string | undefined, string] => {\n const index = name.indexOf('.');\n return index !== -1\n ? [name.slice(0, index), name.slice(index + 1)]\n : [undefined, name];\n};\n\nexport const quoteSchemaTable = ({\n schema,\n name,\n}: {\n schema?: string;\n name: string;\n}) => {\n return singleQuote(schema ? `${schema}.${name}` : name);\n};\n","import { Migration } from './migration';\n\nlet currentMigration: Migration | undefined;\nlet currentPromise: Promise<void> | undefined;\nlet currentUp = true;\nlet currentChangeCallback: ChangeCallback | undefined;\n\nexport type ChangeCallback = (db: Migration, up: boolean) => Promise<void>;\n\nexport const change = (fn: ChangeCallback) => {\n if (!currentMigration) throw new Error('Database instance is not set');\n currentPromise = fn(currentMigration, currentUp);\n currentChangeCallback = fn;\n};\n\nexport const setCurrentMigration = (db: Migration) => {\n currentMigration = db;\n};\n\nexport const setCurrentMigrationUp = (up: boolean) => {\n currentUp = up;\n};\n\nexport const getCurrentPromise = () => currentPromise;\n\nexport const getCurrentChangeCallback = () => currentChangeCallback;\n","import {\n ColumnType,\n ForeignKeyTable,\n ForeignKeyOptions,\n getRaw,\n isRaw,\n quote,\n Sql,\n TableData,\n toArray,\n} from 'pqb';\nimport { ColumnComment, Migration } from './migration';\nimport {\n getSchemaAndTableFromName,\n joinColumns,\n joinWords,\n quoteWithSchema,\n} from '../common';\n\nexport const columnToSql = (\n key: string,\n item: ColumnType,\n values: unknown[],\n hasMultiplePrimaryKeys: boolean,\n): string => {\n const line = [`\"${key}\" ${item.toSQL()}`];\n\n if (item.data.compression) {\n line.push(`COMPRESSION ${item.data.compression}`);\n }\n\n if (item.data.collate) {\n line.push(`COLLATE ${quote(item.data.collate)}`);\n }\n\n if (item.isPrimaryKey && !hasMultiplePrimaryKeys) {\n line.push('PRIMARY KEY');\n } else if (!item.data.isNullable) {\n line.push('NOT NULL');\n }\n\n if (item.data.default !== undefined) {\n if (\n typeof item.data.default === 'object' &&\n item.data.default &&\n isRaw(item.data.default)\n ) {\n line.push(`DEFAULT ${getRaw(item.data.default, values)}`);\n } else {\n line.push(`DEFAULT ${quote(item.data.default)}`);\n }\n }\n\n const { foreignKeys } = item.data;\n if (foreignKeys) {\n for (const foreignKey of foreignKeys) {\n const [schema, table] = getForeignKeyTable(\n 'fn' in foreignKey ? foreignKey.fn : foreignKey.table,\n );\n\n if (foreignKey.name) {\n line.push(`CONSTRAINT \"${foreignKey.name}\"`);\n }\n\n line.push(referencesToSql(schema, table, foreignKey.columns, foreignKey));\n }\n }\n\n return line.join(' ');\n};\n\nexport const addColumnIndex = (\n indexes: TableData.Index[],\n key: string,\n item: ColumnType,\n) => {\n if (item.data.indexes) {\n indexes.push(\n ...item.data.indexes.map((index) => ({\n columns: [{ ...index, column: key }],\n options: index,\n })),\n );\n }\n};\n\nexport const addColumnComment = (\n comments: ColumnComment[],\n key: string,\n item: ColumnType,\n) => {\n if (item.data.comment) {\n comments.push({ column: key, comment: item.data.comment });\n }\n};\n\nexport const getForeignKeyTable = (\n fnOrTable: (() => ForeignKeyTable) | string,\n): [string | undefined, string] => {\n if (typeof fnOrTable === 'string') {\n return getSchemaAndTableFromName(fnOrTable);\n }\n\n const item = new (fnOrTable())();\n return [item.schema, item.table];\n};\n\nexport const constraintToSql = (\n { name }: { schema?: string; name: string },\n up: boolean,\n foreignKey: TableData['foreignKeys'][number],\n) => {\n const constraintName =\n foreignKey.options.name || `${name}_${foreignKey.columns.join('_')}_fkey`;\n\n if (!up) {\n const { dropMode } = foreignKey.options;\n return `CONSTRAINT \"${constraintName}\"${dropMode ? ` ${dropMode}` : ''}`;\n }\n\n const [schema, table] = getForeignKeyTable(foreignKey.fnOrTable);\n return `CONSTRAINT \"${constraintName}\" FOREIGN KEY (${joinColumns(\n foreignKey.columns,\n )}) ${referencesToSql(\n schema,\n table,\n foreignKey.foreignColumns,\n foreignKey.options,\n )}`;\n};\n\nexport const referencesToSql = (\n schema: string | undefined,\n table: string,\n columns: string[],\n foreignKey: Pick<ForeignKeyOptions, 'match' | 'onDelete' | 'onUpdate'>,\n) => {\n const sql: string[] = [\n `REFERENCES ${quoteWithSchema({ schema, name: table })}(${joinColumns(\n columns,\n )})`,\n ];\n\n if (foreignKey.match) {\n sql.push(`MATCH ${foreignKey.match.toUpperCase()}`);\n }\n\n if (foreignKey.onDelete) {\n sql.push(`ON DELETE ${foreignKey.onDelete.toUpperCase()}`);\n }\n\n if (foreignKey.onUpdate) {\n sql.push(`ON UPDATE ${foreignKey.onUpdate.toUpperCase()}`);\n }\n\n return sql.join(' ');\n};\n\nexport const indexesToQuery = (\n up: boolean,\n { schema, name }: { schema?: string; name: string },\n indexes: TableData.Index[],\n): Sql[] => {\n return indexes.map(({ columns, options }) => {\n const indexName =\n options.name ||\n joinWords(\n name,\n ...columns\n .filter((it): it is { column: string } => 'column' in it)\n .map((it) => it.column),\n 'index',\n );\n\n if (!up) {\n return {\n text: `DROP INDEX \"${indexName}\"${\n options.dropMode ? ` ${options.dropMode}` : ''\n }`,\n values: [],\n };\n }\n\n const values: unknown[] = [];\n\n const sql: string[] = ['CREATE'];\n\n if (options.unique) {\n sql.push('UNIQUE');\n }\n\n sql.push(`INDEX \"${indexName}\" ON ${quoteWithSchema({ schema, name })}`);\n\n if (options.using) {\n sql.push(`USING ${options.using}`);\n }\n\n const columnsSql: string[] = [];\n\n columns.forEach((column) => {\n const columnSql: string[] = [\n 'column' in column ? `\"${column.column}\"` : `(${column.expression})`,\n ];\n\n if (column.collate) {\n columnSql.push(`COLLATE '${column.collate}'`);\n }\n\n if (column.opclass) {\n columnSql.push(column.opclass);\n }\n\n if (column.order) {\n columnSql.push(column.order);\n }\n\n columnsSql.push(columnSql.join(' '));\n });\n\n sql.push(`(${columnsSql.join(', ')})`);\n\n if (options.include) {\n sql.push(\n `INCLUDE (${toArray(options.include)\n .map((column) => `\"${column}\"`)\n .join(', ')})`,\n );\n }\n\n if (options.with) {\n sql.push(`WITH (${options.with})`);\n }\n\n if (options.tablespace) {\n sql.push(`TABLESPACE ${options.tablespace}`);\n }\n\n if (options.where) {\n sql.push(\n `WHERE ${\n typeof options.where === 'object' &&\n options.where &&\n isRaw(options.where)\n ? getRaw(options.where, values)\n : options.where\n }`,\n );\n }\n\n return { text: sql.join(' '), values };\n });\n};\n\nexport const commentsToQuery = (\n schemaTable: { schema?: string; name: string },\n comments: ColumnComment[],\n): Sql[] => {\n return comments.map(({ column, comment }) => ({\n text: `COMMENT ON COLUMN ${quoteWithSchema(\n schemaTable,\n )}.\"${column}\" IS ${quote(comment)}`,\n values: [],\n }));\n};\n\nexport const primaryKeyToSql = (\n primaryKey: Exclude<TableData['primaryKey'], undefined>,\n) => {\n const name = primaryKey.options?.name;\n return `${name ? `CONSTRAINT \"${name}\" ` : ''}PRIMARY KEY (${joinColumns(\n primaryKey.columns,\n )})`;\n};\n\nexport const getPrimaryKeysOfTable = async (\n db: Migration,\n tableName: string,\n): Promise<{ name: string; type: string }[]> => {\n const { rows } = await db.query<{ name: string; type: string }>(\n {\n text: `SELECT\n pg_attribute.attname AS name,\n format_type(pg_attribute.atttypid, pg_attribute.atttypmod) AS type\nFROM pg_index, pg_class, pg_attribute, pg_namespace\nWHERE\n pg_class.oid = $1::regclass AND\n indrelid = pg_class.oid AND\n nspname = 'public' AND\n pg_class.relnamespace = pg_namespace.oid AND\n pg_attribute.attrelid = pg_class.oid AND\n pg_attribute.attnum = any(pg_index.indkey) AND\n indisprimary`,\n values: [tableName],\n },\n db.types,\n undefined,\n );\n\n return rows;\n};\n","import {\n ColumnsShape,\n columnTypes,\n getColumnTypes,\n getTableData,\n NoPrimaryKeyOption,\n quote,\n raw,\n Sql,\n TableData,\n} from 'pqb';\nimport {\n ColumnComment,\n ColumnsShapeCallback,\n Migration,\n runCodeUpdater,\n TableOptions,\n} from './migration';\nimport {\n addColumnComment,\n addColumnIndex,\n columnToSql,\n commentsToQuery,\n constraintToSql,\n indexesToQuery,\n primaryKeyToSql,\n} from './migrationUtils';\nimport { getSchemaAndTableFromName, quoteWithSchema } from '../common';\nimport { RakeDbAst } from '../ast';\n\nconst types = Object.assign(Object.create(columnTypes), {\n raw,\n});\n\nexport const createTable = async (\n migration: Migration,\n up: boolean,\n tableName: string,\n options: TableOptions,\n fn: ColumnsShapeCallback,\n) => {\n const shape = getColumnTypes(types, fn);\n const tableData = getTableData();\n const ast = makeAst(\n up,\n tableName,\n shape,\n tableData,\n options,\n migration.options.noPrimaryKey,\n );\n\n validatePrimaryKey(ast);\n\n const queries = astToQueries(ast);\n for (const query of queries) {\n await migration.query(query);\n }\n\n await runCodeUpdater(migration, ast);\n};\n\nconst makeAst = (\n up: boolean,\n tableName: string,\n shape: ColumnsShape,\n tableData: TableData,\n options: TableOptions,\n noPrimaryKey?: NoPrimaryKeyOption,\n): RakeDbAst.Table => {\n const shapePKeys: string[] = [];\n for (const key in shape) {\n if (shape[key].isPrimaryKey) {\n shapePKeys.push(key);\n }\n }\n\n const primaryKey = tableData.primaryKey;\n\n const [schema, table] = getSchemaAndTableFromName(tableName);\n\n return {\n type: 'table',\n action: up ? 'create' : 'drop',\n schema,\n name: table,\n shape,\n ...tableData,\n primaryKey:\n shapePKeys.length <= 1\n ? primaryKey\n : primaryKey\n ? { ...primaryKey, columns: [...shapePKeys, ...primaryKey.columns] }\n : { columns: shapePKeys },\n ...options,\n noPrimaryKey: options.noPrimaryKey ? 'ignore' : noPrimaryKey || 'error',\n };\n};\n\nconst validatePrimaryKey = (ast: RakeDbAst.Table) => {\n if (ast.noPrimaryKey !== 'ignore') {\n let hasPrimaryKey = !!ast.primaryKey?.columns?.length;\n if (!hasPrimaryKey) {\n for (const key in ast.shape) {\n if (ast.shape[key].isPrimaryKey) {\n hasPrimaryKey = true;\n break;\n }\n }\n }\n\n if (!hasPrimaryKey) {\n const message = `Table ${ast.name} has no primary key`;\n if (ast.noPrimaryKey === 'error') {\n throw new Error(message);\n } else {\n console.warn(message);\n }\n }\n }\n};\n\nconst astToQueries = (ast: RakeDbAst.Table): Sql[] => {\n if (ast.action === 'drop') {\n return [\n {\n text: `DROP TABLE ${quoteWithSchema(ast)}${\n ast.dropMode ? ` ${ast.dropMode}` : ''\n }`,\n values: [],\n },\n ];\n }\n\n const lines: string[] = [];\n const values: unknown[] = [];\n const indexes: TableData.Index[] = [];\n const comments: ColumnComment[] = [];\n\n for (const key in ast.shape) {\n const item = ast.shape[key];\n addColumnIndex(indexes, key, item);\n addColumnComment(comments, key, item);\n lines.push(`\\n ${columnToSql(key, item, values, !!ast.primaryKey)}`);\n }\n\n if (ast.primaryKey) {\n lines.push(`\\n ${primaryKeyToSql(ast.primaryKey)}`);\n }\n\n ast.foreignKeys.forEach((foreignKey) => {\n lines.push(`\\n ${constraintToSql(ast, true, foreignKey)}`);\n });\n\n indexes.push(...ast.indexes);\n\n const result: Sql[] = [\n {\n text: `CREATE TABLE ${quoteWithSchema(ast)} (${lines.join(',')}\\n)`,\n values,\n },\n ...indexesToQuery(true, ast, indexes),\n ...commentsToQuery(ast, comments),\n ];\n\n if (ast.comment) {\n result.push({\n text: `COMMENT ON TABLE ${quoteWithSchema(ast)} IS ${quote(ast.comment)}`,\n values: [],\n });\n }\n\n return result;\n};\n","import {\n ColumnType,\n resetTableData,\n getTableData,\n EmptyObject,\n emptyObject,\n TableData,\n RawExpression,\n raw,\n columnTypes,\n Sql,\n quote,\n getRaw,\n isRaw,\n} from 'pqb';\nimport {\n ChangeTableCallback,\n ChangeTableOptions,\n ColumnComment,\n DropMode,\n Migration,\n MigrationColumnTypes,\n runCodeUpdater,\n} from './migration';\nimport { RakeDbAst } from '../ast';\nimport { getSchemaAndTableFromName, quoteWithSchema } from '../common';\nimport {\n addColumnComment,\n addColumnIndex,\n columnToSql,\n commentsToQuery,\n constraintToSql,\n indexesToQuery,\n primaryKeyToSql,\n} from './migrationUtils';\n\ntype ChangeTableData = { add: TableData; drop: TableData };\nconst newChangeTableData = (): ChangeTableData => ({\n add: { indexes: [], foreignKeys: [] },\n drop: { indexes: [], foreignKeys: [] },\n});\n\nlet changeTableData = newChangeTableData();\n\nconst resetChangeTableData = () => {\n changeTableData = newChangeTableData();\n};\n\nconst mergeTableData = (a: TableData, b: TableData) => {\n if (b.primaryKey) {\n if (!a.primaryKey) {\n a.primaryKey = b.primaryKey;\n } else {\n a.primaryKey = {\n columns: [...a.primaryKey.columns, ...b.primaryKey.columns],\n options: { ...a.primaryKey.options, ...b.primaryKey.options },\n };\n }\n }\n a.indexes = [...a.indexes, ...b.indexes];\n a.foreignKeys = [...a.foreignKeys, ...b.foreignKeys];\n};\n\nfunction add(\n item: ColumnType,\n options?: { dropMode?: DropMode },\n): RakeDbAst.ChangeTableItem.Column;\nfunction add(emptyObject: EmptyObject): EmptyObject;\nfunction add(\n items: Record<string, ColumnType>,\n options?: { dropMode?: DropMode },\n): Record<string, RakeDbAst.ChangeTableItem.Column>;\nfunction add(\n item: ColumnType | EmptyObject | Record<string, ColumnType>,\n options?: { dropMode?: DropMode },\n):\n | RakeDbAst.ChangeTableItem.Column\n | EmptyObject\n | Record<string, RakeDbAst.ChangeTableItem.Column> {\n if (item instanceof ColumnType) {\n return { type: 'add', item, dropMode: options?.dropMode };\n } else if (item === emptyObject) {\n mergeTableData(changeTableData.add, getTableData());\n resetTableData();\n return emptyObject;\n } else {\n const result: Record<string, RakeDbAst.ChangeTableItem.Column> = {};\n for (const key in item) {\n result[key] = {\n type: 'add',\n item: (item as Record<string, ColumnType>)[key],\n dropMode: options?.dropMode,\n };\n }\n return result;\n }\n}\n\nconst drop = ((item, options) => {\n if (item instanceof ColumnType) {\n return { type: 'drop', item, dropMode: options?.dropMode };\n } else if (item === emptyObject) {\n mergeTableData(changeTableData.drop, getTableData());\n resetTableData();\n return emptyObject;\n } else {\n const result: Record<string, RakeDbAst.ChangeTableItem.Column> = {};\n for (const key in item) {\n result[key] = {\n type: 'drop',\n item: (item as Record<string, ColumnType>)[key],\n dropMode: options?.dropMode,\n };\n }\n return result;\n }\n}) as typeof add;\n\ntype Change = RakeDbAst.ChangeTableItem.Change & ChangeOptions;\n\ntype ChangeOptions = {\n usingUp?: RawExpression;\n usingDown?: RawExpression;\n};\n\nconst columnTypeToColumnChange = (\n item: ColumnType | Change,\n): RakeDbAst.ColumnChange => {\n if (item instanceof ColumnType) {\n const foreignKeys = item.data.foreignKeys;\n if (foreignKeys?.some((it) => 'fn' in it)) {\n throw new Error('Callback in foreignKey is not allowed in migration');\n }\n\n return {\n column: item,\n type: item.toSQL(),\n nullable: item.data.isNullable,\n primaryKey: item.isPrimaryKey,\n ...item.data,\n foreignKeys: foreignKeys as RakeDbAst.ColumnChange['foreignKeys'],\n };\n }\n\n return item.to;\n};\n\ntype TableChangeMethods = typeof tableChangeMethods;\nconst tableChangeMethods = {\n raw: raw,\n add,\n drop,\n change(\n from: ColumnType | Change,\n to: ColumnType | Change,\n options?: ChangeOptions,\n ): Change {\n return {\n type: 'change',\n from: columnTypeToColumnChange(from),\n to: columnTypeToColumnChange(to),\n ...options,\n };\n },\n default(value: unknown | RawExpression): Change {\n return { type: 'change', from: { default: null }, to: { default: value } };\n },\n nullable(): Change {\n return {\n type: 'change',\n from: { nullable: false },\n to: { nullable: true },\n };\n },\n nonNullable(): Change {\n return {\n type: 'change',\n from: { nullable: true },\n to: { nullable: false },\n };\n },\n comment(comment: string | null): Change {\n return { type: 'change', from: { comment: null }, to: { comment } };\n },\n rename(name: string): RakeDbAst.ChangeTableItem.Rename {\n return { type: 'rename', name };\n },\n};\n\nexport type TableChanger = MigrationColumnTypes & TableChangeMethods;\n\nexport type TableChangeData = Record<\n string,\n | RakeDbAst.ChangeTableItem.Column\n | RakeDbAst.ChangeTableItem.Rename\n | Change\n | EmptyObject\n>;\n\nexport const changeTable = async (\n migration: Migration,\n up: boolean,\n tableName: string,\n options: ChangeTableOptions,\n fn?: ChangeTableCallback,\n) => {\n resetTableData();\n resetChangeTableData();\n\n const tableChanger = Object.create(columnTypes) as TableChanger;\n Object.assign(tableChanger, tableChangeMethods);\n\n const changeData = fn?.(tableChanger) || {};\n\n const ast = makeAst(up, tableName, changeData, changeTableData, options);\n\n const queries = astToQueries(ast);\n for (const query of queries) {\n await migration.query(query);\n }\n\n await runCodeUpdater(migration, ast);\n};\n\nconst makeAst = (\n up: boolean,\n name: string,\n changeData: TableChangeData,\n changeTableData: ChangeTableData,\n options: ChangeTableOptions,\n): RakeDbAst.ChangeTable => {\n const { comment } = options;\n\n const shape: Record<string, RakeDbAst.ChangeTableItem> = {};\n for (const key in changeData) {\n const item = changeData[key];\n if ('type' in item) {\n if (up) {\n shape[key] =\n item.type === 'change' && item.usingUp\n ? { ...item, using: item.usingUp }\n : item;\n } else {\n if (item.type === 'rename') {\n shape[item.name] = { ...item, name: key };\n } else {\n shape[key] =\n item.type === 'add'\n ? { ...item, type: 'drop' }\n : item.type === 'drop'\n ? { ...item, type: 'add' }\n : item.type === 'change'\n ? { ...item, from: item.to, to: item.from, using: item.usingDown }\n : item;\n }\n }\n }\n }\n\n const [schema, table] = getSchemaAndTableFromName(name);\n\n return {\n type: 'changeTable',\n schema,\n name: table,\n comment: comment\n ? up\n ? Array.isArray(comment)\n ? comment[1]\n : comment\n : Array.isArray(comment)\n ? comment[0]\n : null\n : undefined,\n shape,\n ...(up\n ? changeTableData\n : { add: changeTableData.drop, drop: changeTableData.add }),\n };\n};\n\ntype PrimaryKeys = {\n columns: string[];\n change?: true;\n options?: { name?: string };\n};\n\nconst astToQueries = (ast: RakeDbAst.ChangeTable): Sql[] => {\n const result: Sql[] = [];\n\n if (ast.comment !== undefined) {\n result.push({\n text: `COMMENT ON TABLE ${quoteWithSchema(ast)} IS ${quote(ast.comment)}`,\n values: [],\n });\n }\n\n const addPrimaryKeys: PrimaryKeys = ast.add.primaryKey\n ? { ...ast.add.primaryKey }\n : {\n columns: [],\n };\n const dropPrimaryKeys: PrimaryKeys = ast.drop.primaryKey\n ? { ...ast.drop.primaryKey }\n : {\n columns: [],\n };\n\n for (const key in ast.shape) {\n const item = ast.shape[key];\n\n if (item.type === 'add') {\n if (item.item.isPrimaryKey) {\n addPrimaryKeys.columns.push(key);\n }\n } else if (item.type === 'drop') {\n if (item.item.isPrimaryKey) {\n dropPrimaryKeys.columns.push(key);\n }\n } else if (item.type === 'change') {\n if (item.from.primaryKey) {\n dropPrimaryKeys.columns.push(key);\n dropPrimaryKeys.change = true;\n }\n\n if (item.to.primaryKey) {\n addPrimaryKeys.columns.push(key);\n addPrimaryKeys.change = true;\n }\n }\n }\n\n const alterTable: string[] = [];\n const values: unknown[] = [];\n const addIndexes: TableData.Index[] = [...ast.add.indexes];\n const dropIndexes: TableData.Index[] = [...ast.drop.indexes];\n const addForeignKeys: TableData.ForeignKey[] = [...ast.add.foreignKeys];\n const dropForeignKeys: TableData.ForeignKey[] = [...ast.drop.foreignKeys];\n const comments: ColumnComment[] = [];\n\n for (const key in ast.shape) {\n const item = ast.shape[key];\n\n if (item.type === 'add') {\n addColumnIndex(addIndexes, key, item.item);\n addColumnComment(comments, key, item.item);\n\n alterTable.push(\n `ADD COLUMN ${columnToSql(\n key,\n item.item,\n values,\n addPrimaryKeys.columns.length > 1,\n )}`,\n );\n } else if (item.type === 'drop') {\n addColumnIndex(dropIndexes, key, item.item);\n\n alterTable.push(\n `DROP COLUMN \"${key}\"${item.dropMode ? ` ${item.dropMode}` : ''}`,\n );\n } else if (item.type === 'change') {\n const { from, to } = item;\n if (from.type !== to.type || from.collate !== to.collate) {\n alterTable.push(\n `ALTER COLUMN \"${key}\" TYPE ${to.type}${\n to.collate ? ` COLLATE ${quote(to.collate)}` : ''\n }${item.using ? ` USING ${getRaw(item.using, values)}` : ''}`,\n );\n }\n\n if (from.default !== to.default) {\n const value =\n typeof to.default === 'object' && to.default && isRaw(to.default)\n ? getRaw(to.default, values)\n : quote(to.default);\n\n const expr =\n value === undefined ? 'DROP DEFAULT' : `SET DEFAULT ${value}`;\n\n alterTable.push(`ALTER COLUMN \"${key}\" ${expr}`);\n }\n\n if (from.nullable !== to.nullable) {\n alterTable.push(\n `ALTER COLUMN \"${key}\" ${to.nullable ? 'DROP' : 'SET'} NOT NULL`,\n );\n }\n\n if (from.compression !== to.compression) {\n alterTable.push(\n `ALTER COLUMN \"${key}\" SET COMPRESSION ${\n to.compression || 'DEFAULT'\n }`,\n );\n }\n\n const foreignKeysLen = Math.max(\n from.foreignKeys?.length || 0,\n to.foreignKeys?.length || 0,\n );\n for (let i = 0; i < foreignKeysLen; i++) {\n const fromFkey = from.foreignKeys?.[i];\n const toFkey = to.foreignKeys?.[i];\n\n if (\n (fromFkey || toFkey) &&\n (!fromFkey ||\n !toFkey ||\n fromFkey.name !== toFkey.name ||\n fromFkey.match !== toFkey.match ||\n fromFkey.onUpdate !== toFkey.onUpdate ||\n fromFkey.onDelete !== toFkey.onDelete ||\n fromFkey.dropMode !== toFkey.dropMode ||\n fromFkey.table !== toFkey.table ||\n fromFkey.columns.join(',') !== toFkey.columns.join(','))\n ) {\n if (fromFkey) {\n dropForeignKeys.push({\n columns: [key],\n fnOrTable: fromFkey.table,\n foreignColumns: fromFkey.columns,\n options: fromFkey,\n });\n }\n\n if (toFkey) {\n addForeignKeys.push({\n columns: [key],\n fnOrTable: toFkey.table,\n foreignColumns: toFkey.columns,\n options: toFkey,\n });\n }\n }\n }\n\n const indexesLen = Math.max(\n from.indexes?.length || 0,\n to.indexes?.length || 0,\n );\n for (let i = 0; i < indexesLen; i++) {\n const fromIndex = from.indexes?.[i];\n const toIndex = to.indexes?.[i];\n\n if (\n (fromIndex || toIndex) &&\n (!fromIndex ||\n !toIndex ||\n fromIndex.collate !== toIndex.collate ||\n fromIndex.opclass !== toIndex.opclass ||\n fromIndex.order !== toIndex.order ||\n fromIndex.name !== toIndex.name ||\n fromIndex.unique !== toIndex.unique ||\n fromIndex.using !== toIndex.using ||\n fromIndex.include !== toIndex.include ||\n (Array.isArray(fromIndex.include) &&\n Array.isArray(toIndex.include) &&\n fromIndex.include.join(',') !== toIndex.include.join(',')) ||\n fromIndex.with !== toIndex.with ||\n fromIndex.tablespace !== toIndex.tablespace ||\n fromIndex.where !== toIndex.where ||\n fromIndex.dropMode !== toIndex.dropMode)\n ) {\n if (fromIndex) {\n dropIndexes.push({\n columns: [\n {\n column: key,\n ...fromIndex,\n },\n ],\n options: fromIndex,\n });\n }\n\n if (toIndex) {\n addIndexes.push({\n columns: [\n {\n column: key,\n ...toIndex,\n },\n ],\n options: toIndex,\n });\n }\n }\n }\n\n if (from.comment !== to.comment) {\n comments.push({ column: key, comment: to.comment || null });\n }\n } else if (item.type === 'rename') {\n alterTable.push(`RENAME COLUMN \"${key}\" TO \"${item.name}\"`);\n }\n }\n\n const prependAlterTable: string[] = [];\n\n if (\n ast.drop.primaryKey ||\n dropPrimaryKeys.change ||\n dropPrimaryKeys.columns.length > 1\n ) {\n const name = dropPrimaryKeys.options?.name || `${ast.name}_pkey`;\n prependAlterTable.push(`DROP CONSTRAINT \"${name}\"`);\n }\n\n prependAlterTable.push(\n ...dropForeignKeys.map(\n (foreignKey) => `\\n DROP ${constraintToSql(ast, false, foreignKey)}`,\n ),\n );\n\n alterTable.unshift(...prependAlterTable);\n\n if (\n ast.add.primaryKey ||\n addPrimaryKeys.change ||\n addPrimaryKeys.columns.length > 1\n ) {\n alterTable.push(`ADD ${primaryKeyToSql(addPrimaryKeys)}`);\n }\n\n alterTable.push(\n ...addForeignKeys.map(\n (foreignKey) => `\\n ADD ${constraintToSql(ast, true, foreignKey)}`,\n ),\n );\n\n if (alterTable.length) {\n result.push({\n text:\n `ALTER TABLE ${quoteWithSchema(ast)}` +\n `\\n ${alterTable.join(',\\n ')}`,\n values,\n });\n }\n\n result.push(...indexesToQuery(false, ast, dropIndexes));\n result.push(...indexesToQuery(true, ast, addIndexes));\n result.push(...commentsToQuery(ast, comments));\n\n return result;\n};\n","import { ColumnType, Operators } from 'pqb';\nimport { ColumnsShapeCallback, JoinTableOptions, Migration } from './migration';\nimport {\n getSchemaAndTableFromName,\n joinWords,\n quoteWithSchema,\n} from '../common';\nimport { getPrimaryKeysOfTable } from './migrationUtils';\nimport { singular } from 'pluralize';\nimport { createTable } from './createTable';\n\nclass UnknownColumn extends ColumnType {\n operators = Operators.any;\n\n constructor(public dataType: string) {\n super();\n }\n\n toCode() {\n return 'unknown';\n }\n}\n\nexport const createJoinTable = async (\n migration: Migration,\n up: boolean,\n tables: string[],\n options: JoinTableOptions,\n fn?: ColumnsShapeCallback,\n) => {\n const tableName = options.tableName || joinWords(...tables);\n\n if (!up) {\n return createTable(\n migration,\n up,\n tableName,\n { ...options, noPrimaryKey: true },\n () => ({}),\n );\n }\n\n const tablesWithPrimaryKeys = await Promise.all(\n tables.map(async (table) => {\n const primaryKeys = await getPrimaryKeysOfTable(migration, table).then(\n (items) =>\n items.map((item) => ({\n ...item,\n joinedName: joinWords(singular(table), item.name),\n })),\n );\n\n const [schema, name] = getSchemaAndTableFromName(table);\n if (!primaryKeys.length) {\n throw new Error(\n `Primary key for table ${quoteWithSchema({\n schema,\n name,\n })} is not defined`,\n );\n }\n\n return [schema, table, primaryKeys] as const;\n }),\n );\n\n return createTable(migration, up, tableName, options, (t) => {\n const result: Record<string, ColumnType> = {};\n\n tablesWithPrimaryKeys.forEach(([schema, table, primaryKeys]) => {\n if (primaryKeys.length === 1) {\n const [{ type, joinedName, name }] = primaryKeys;\n\n const column = new UnknownColumn(type);\n\n result[joinedName] = column.foreignKey(\n schema ? `${schema}.${table}` : table,\n name,\n );\n\n return;\n }\n\n primaryKeys.forEach(({ joinedName, type }) => {\n result[joinedName] = new UnknownColumn(type);\n });\n\n t.foreignKey(\n primaryKeys.map((key) => key.joinedName) as [string, ...string[]],\n table,\n primaryKeys.map((key) => key.name) as [string, ...string[]],\n );\n });\n\n if (fn) {\n Object.assign(result, fn(t));\n }\n\n t.primaryKey(\n tablesWithPrimaryKeys.flatMap(([, , primaryKeys]) =>\n primaryKeys.map((item) => item.joinedName),\n ),\n );\n\n return result;\n });\n};\n","import {\n ColumnsShape,\n ColumnType,\n ColumnTypes,\n ForeignKeyOptions,\n IndexColumnOptions,\n IndexOptions,\n logParamToLogObject,\n MaybeArray,\n QueryArraysResult,\n QueryInput,\n QueryLogObject,\n QueryResult,\n QueryResultRow,\n Sql,\n TransactionAdapter,\n TypeParsers,\n raw,\n TextColumn,\n AdapterOptions,\n} from 'pqb';\nimport { createTable } from './createTable';\nimport { changeTable, TableChangeData, TableChanger } from './changeTable';\nimport {\n RakeDbConfig,\n quoteWithSchema,\n getSchemaAndTableFromName,\n} from '../common';\nimport { createJoinTable } from './createJoinTable';\nimport { RakeDbAst } from '../ast';\n\nexport type DropMode = 'CASCADE' | 'RESTRICT';\n\nexport type TableOptions = {\n dropMode?: DropMode;\n comment?: string;\n noPrimaryKey?: boolean;\n};\n\ntype TextColumnCreator = () => TextColumn;\n\nexport type MigrationColumnTypes = Omit<ColumnTypes, 'text' | 'string'> & {\n text: TextColumnCreator;\n string: TextColumnCreator;\n};\n\nexport type ColumnsShapeCallback = (\n t: MigrationColumnTypes & { raw: typeof raw },\n) => ColumnsShape;\n\nexport type ChangeTableOptions = { comment?: string | [string, string] | null };\nexport type ChangeTableCallback = (t: TableChanger) => TableChangeData;\n\nexport type ColumnComment = { column: string; comment: string | null };\n\nexport type JoinTableOptions = {\n tableName?: string;\n comment?: string;\n dropMode?: DropMode;\n};\n\nexport type ExtensionOptions = {\n schema?: string;\n version?: string;\n cascade?: boolean;\n};\n\nexport class Migration extends TransactionAdapter {\n public log?: QueryLogObject;\n\n constructor(\n tx: TransactionAdapter,\n public up: boolean,\n public options: RakeDbConfig,\n public adapterOptions: AdapterOptions,\n public appCodeUpdaterCache: object,\n ) {\n super(tx, tx.client, tx.types);\n this.log = logParamToLogObject(options.logger || console, options.log);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async query<T extends QueryResultRow = any>(\n query: QueryInput,\n types: TypeParsers = this.types,\n log = this.log,\n ): Promise<QueryResult<T>> {\n return wrapWithLog(log, query, () => super.query(query, types));\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async arrays<R extends any[] = any[]>(\n query: QueryInput,\n types: TypeParsers = this.types,\n log = this.log,\n ): Promise<QueryArraysResult<R>> {\n return wrapWithLog(log, query, () => super.arrays(query, types));\n }\n\n createTable(\n tableName: string,\n options: TableOptions,\n fn: ColumnsShapeCallback,\n ): Promise<void>;\n createTable(tableName: string, fn: ColumnsShapeCallback): Promise<void>;\n createTable(\n tableName: string,\n cbOrOptions: ColumnsShapeCallback | TableOptions,\n cb?: ColumnsShapeCallback,\n ): Promise<void> {\n const options = typeof cbOrOptions === 'function' ? {} : cbOrOptions;\n const fn = (cb || cbOrOptions) as ColumnsShapeCallback;\n\n return createTable(this, this.up, tableName, options, fn);\n }\n\n dropTable(\n tableName: string,\n options: TableOptions,\n fn: ColumnsShapeCallback,\n ): Promise<void>;\n dropTable(tableName: string, fn: ColumnsShapeCallback): Promise<void>;\n dropTable(\n tableName: string,\n cbOrOptions: ColumnsShapeCallback | TableOptions,\n cb?: ColumnsShapeCallback,\n ) {\n const options = typeof cbOrOptions === 'function' ? {} : cbOrOptions;\n const fn = (cb || cbOrOptions) as ColumnsShapeCallback;\n\n return createTable(this, !this.up, tableName, options, fn);\n }\n\n createJoinTable(\n tables: string[],\n options?: JoinTableOptions,\n fn?: ColumnsShapeCallback,\n ): Promise<void>;\n createJoinTable(tables: string[], fn?: ColumnsShapeCallback): Promise<void>;\n async createJoinTable(\n tables: string[],\n cbOrOptions?: ColumnsShapeCallback | JoinTableOptions,\n cb?: ColumnsShapeCallback,\n ): Promise<void> {\n const options = typeof cbOrOptions === 'function' ? {} : cbOrOptions || {};\n const fn = (cb || cbOrOptions) as ColumnsShapeCallback | undefined;\n\n return createJoinTable(this, this.up, tables, options, fn);\n }\n\n dropJoinTable(\n tables: string[],\n options?: JoinTableOptions,\n fn?: ColumnsShapeCallback,\n ): Promise<void>;\n dropJoinTable(tables: string[], fn?: ColumnsShapeCallback): Promise<void>;\n async dropJoinTable(\n tables: string[],\n cbOrOptions?: ColumnsShapeCallback | JoinTableOptions,\n cb?: ColumnsShapeCallback,\n ): Promise<void> {\n const options = typeof cbOrOptions === 'function' ? {} : cbOrOptions || {};\n const fn = (cb || cbOrOptions) as ColumnsShapeCallback | undefined;\n\n return createJoinTable(this, !this.up, tables, options, fn);\n }\n\n changeTable(\n tableName: string,\n options: ChangeTableOptions,\n fn?: ChangeTableCallback,\n ): Promise<void>;\n changeTable(tableName: string, fn: ChangeTableCallback): Promise<void>;\n changeTable(\n tableName: string,\n cbOrOptions: ChangeTableCallback | ChangeTableOptions,\n cb?: ChangeTableCallback,\n ) {\n const [fn, options] =\n typeof cbOrOptions === 'function' ? [cbOrOptions, {}] : [cb, cbOrOptions];\n\n return changeTable(this, this.up, tableName, options, fn);\n }\n\n async renameTable(from: string, to: string): Promise<void> {\n const [fromSchema, f] = getSchemaAndTableFromName(this.up ? from : to);\n const [toSchema, t] = getSchemaAndTableFromName(this.up ? to : from);\n const ast: RakeDbAst.RenameTable = {\n type: 'renameTable',\n fromSchema,\n from: f,\n toSchema,\n to: t,\n };\n\n await this.query(\n `ALTER TABLE ${quoteWithSchema({\n schema: ast.fromSchema,\n name: ast.from,\n })} RENAME TO ${quoteWithSchema({\n schema: ast.toSchema,\n name: ast.to,\n })}`,\n );\n\n await runCodeUpdater(this, ast);\n }\n\n addColumn(\n tableName: string,\n columnName: string,\n fn: (t: MigrationColumnTypes) => ColumnType,\n ) {\n return addColumn(this, this.up, tableName, columnName, fn);\n }\n\n dropColumn(\n tableName: string,\n columnName: string,\n fn: (t: MigrationColumnTypes) => ColumnType,\n ) {\n return addColumn(this, !this.up, tableName, columnName, fn);\n }\n\n addIndex(\n tableName: string,\n columns: MaybeArray<string | IndexColumnOptions>,\n options?: IndexOptions,\n ) {\n return addIndex(this, this.up, tableName, columns, options);\n }\n\n dropIndex(\n tableName: string,\n columns: MaybeArray<string | IndexColumnOptions>,\n options?: IndexOptions,\n ) {\n return addIndex(this, !this.up, tableName, columns, options);\n }\n\n addForeignKey(\n tableName: string,\n columns: [string, ...string[]],\n foreignTable: string,\n foreignColumns: [string, ...string[]],\n options?: ForeignKeyOptions,\n ) {\n return addForeignKey(\n this,\n this.up,\n tableName,\n columns,\n foreignTable,\n foreignColumns,\n options,\n );\n }\n\n dropForeignKey(\n tableName: string,\n columns: [string, ...string[]],\n foreignTable: string,\n foreignColumns: [string, ...string[]],\n options?: ForeignKeyOptions,\n ) {\n return addForeignKey(\n this,\n !this.up,\n tableName,\n columns,\n foreignTable,\n foreignColumns,\n options,\n );\n }\n\n addPrimaryKey(\n tableName: string,\n columns: string[],\n options?: { name?: string },\n ) {\n return addPrimaryKey(this, this.up, tableName, columns, options);\n }\n\n dropPrimaryKey(\n tableName: string,\n columns: string[],\n options?: { name?: string },\n ) {\n return addPrimaryKey(this, !this.up, tableName, columns, options);\n }\n\n renameColumn(tableName: string, from: string, to: string) {\n return this.changeTable(tableName, (t) => ({\n [from]: t.rename(to),\n }));\n }\n\n createSchema(schemaName: string) {\n return createSchema(this, this.up, schemaName);\n }\n\n dropSchema(schemaName: string) {\n return createSchema(this, !this.up, schemaName);\n }\n\n createExtension(\n name: string,\n options: ExtensionOptions & { ifNotExists?: boolean } = {},\n ) {\n return createExtension(this, this.up, name, options);\n }\n\n dropExtension(\n name: string,\n options: { ifExists?: boolean; cascade?: boolean } = {},\n ) {\n return createExtension(this, !this.up, name, options);\n }\n\n async tableExists(tableName: string) {\n return queryExists(this, {\n text: `SELECT 1 FROM \"information_schema\".\"tables\" WHERE \"table_name\" = $1`,\n values: [tableName],\n });\n }\n\n async columnExists(tableName: string, columnName: string): Promise<boolean> {\n return queryExists(this, {\n text: `SELECT 1 FROM \"information_schema\".\"columns\" WHERE \"table_name\" = $1 AND \"column_name\" = $2`,\n values: [tableName, columnName],\n });\n }\n\n async constraintExists(constraintName: string): Promise<boolean> {\n return queryExists(this, {\n text: `SELECT 1 FROM \"information_schema\".\"table_constraints\" WHERE \"constraint_name\" = $1`,\n values: [constraintName],\n });\n }\n}\n\nconst wrapWithLog = async <Result>(\n log: QueryLogObject | undefined,\n query: QueryInput,\n fn: () => Promise<Result>,\n): Promise<Result> => {\n if (!log) {\n return fn();\n } else {\n const sql = (\n typeof query === 'string'\n ? { text: query, values: [] }\n : query.values\n ? query\n : { ...query, values: [] }\n ) as Sql;\n\n const logData = log.beforeQuery(sql);\n\n try {\n const result = await fn();\n log.afterQuery(sql, logData);\n return result;\n } catch (err) {\n log.onError(err as Error, sql, logData);\n throw err;\n }\n }\n};\n\nconst addColumn = (\n migration: Migration,\n up: boolean,\n tableName: string,\n columnName: string,\n fn: (t: MigrationColumnTypes) => ColumnType,\n) => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n [columnName]: t.add(fn(t)),\n }));\n};\n\nconst addIndex = (\n migration: Migration,\n up: boolean,\n tableName: string,\n columns: MaybeArray<string | IndexColumnOptions>,\n options?: IndexOptions,\n) => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n ...t.add(t.index(columns, options)),\n }));\n};\n\nconst addForeignKey = (\n migration: Migration,\n up: boolean,\n tableName: string,\n columns: [string, ...string[]],\n foreignTable: string,\n foreignColumns: [string, ...string[]],\n options?: ForeignKeyOptions,\n) => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n ...t.add(t.foreignKey(columns, foreignTable, foreignColumns, options)),\n }));\n};\n\nconst addPrimaryKey = (\n migration: Migration,\n up: boolean,\n tableName: string,\n columns: string[],\n options?: { name?: string },\n) => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n ...t.add(t.primaryKey(columns, options)),\n }));\n};\n\nconst createSchema = async (\n migration: Migration,\n up: boolean,\n name: string,\n) => {\n const ast: RakeDbAst.Schema = {\n type: 'schema',\n action: up ? 'create' : 'drop',\n name,\n };\n\n await migration.query(\n `${ast.action === 'create' ? 'CREATE' : 'DROP'} SCHEMA \"${name}\"`,\n );\n\n await runCodeUpdater(migration, ast);\n};\n\nconst createExtension = async (\n migration: Migration,\n up: boolean,\n name: string,\n options: ExtensionOptions & {\n checkExists?: boolean;\n },\n) => {\n const ast: RakeDbAst.Extension = {\n type: 'extension',\n action: up ? 'create' : 'drop',\n name,\n ...options,\n };\n\n let query;\n if (ast.action === 'drop') {\n query = `DROP EXTENSION${ast.ifNotExists ? ' IF EXISTS' : ''} \"${\n ast.name\n }\"${ast.cascade ? ' CASCADE' : ''}`;\n } else {\n query = `CREATE EXTENSION${ast.ifExists ? ' IF NOT EXISTS' : ''} \"${\n ast.name\n }\"${ast.schema ? ` SCHEMA \"${ast.schema}\"` : ''}${\n ast.version ? ` VERSION '${ast.version}'` : ''\n }${ast.cascade ? ' CASCADE' : ''}`;\n }\n\n await migration.query(query);\n\n await runCodeUpdater(migration, ast);\n};\n\nconst queryExists = (\n db: Migration,\n sql: { text: string; values: unknown[] },\n) => {\n return db.query(sql).then(({ rowCount }) => rowCount > 0);\n};\n\nexport const runCodeUpdater = (migration: Migration, ast: RakeDbAst) => {\n return migration.options.appCodeUpdater?.({\n ast,\n options: migration.adapterOptions,\n cache: migration.appCodeUpdaterCache,\n });\n};\n","import { Adapter, AdapterOptions, MaybeArray, toArray } from 'pqb';\nimport {\n createSchemaMigrations,\n getMigrationFiles,\n RakeDbConfig,\n MigrationFile,\n quoteWithSchema,\n} from '../common';\nimport {\n getCurrentPromise,\n setCurrentMigrationUp,\n setCurrentMigration,\n ChangeCallback,\n change,\n getCurrentChangeCallback,\n} from '../migration/change';\nimport { Migration } from '../migration/migration';\n\nconst migrateOrRollback = async (\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig,\n args: string[],\n up: boolean,\n) => {\n config = { ...config };\n const files = await getMigrationFiles(config, up);\n\n let count = up ? Infinity : 1;\n let argI = 0;\n const num = args[0] === 'all' ? Infinity : parseInt(args[0]);\n if (!isNaN(num)) {\n argI++;\n count = num;\n }\n\n const arg = args[argI];\n if (arg === '--code') {\n config.useCodeUpdater = args[argI + 1] !== 'false';\n }\n\n if (!config.useCodeUpdater) delete config.appCodeUpdater;\n\n const appCodeUpdaterCache = {};\n\n for (const opts of toArray(options)) {\n const db = new Adapter(opts);\n const migratedVersions = await getMigratedVersionsMap(db, config);\n try {\n for (const file of files) {\n if (\n (up && migratedVersions[file.version]) ||\n (!up && !migratedVersions[file.version])\n ) {\n continue;\n }\n\n if (count-- <= 0) break;\n\n await processMigration(db, up, file, config, opts, appCodeUpdaterCache);\n config.logger?.log(`${file.path} ${up ? 'migrated' : 'rolled back'}`);\n }\n } finally {\n await db.close();\n }\n // use appCodeUpdater only for the first provided options\n delete config.appCodeUpdater;\n }\n};\n\nconst changeCache: Record<string, ChangeCallback | undefined> = {};\n\nconst processMigration = async (\n db: Adapter,\n up: boolean,\n file: MigrationFile,\n config: RakeDbConfig,\n options: AdapterOptions,\n appCodeUpdaterCache: object,\n) => {\n await db.transaction(async (tx) => {\n const db = new Migration(tx, up, config, options, appCodeUpdaterCache);\n setCurrentMigration(db);\n setCurrentMigrationUp(up);\n\n const callback = changeCache[file.path];\n if (callback) {\n change(callback);\n } else {\n config.requireTs(file.path);\n changeCache[file.path] = getCurrentChangeCallback();\n }\n\n await getCurrentPromise();\n await (up ? saveMigratedVersion : removeMigratedVersion)(\n db,\n file.version,\n config,\n );\n });\n};\n\nconst saveMigratedVersion = async (\n db: Adapter,\n version: string,\n config: RakeDbConfig,\n) => {\n await db.query(\n `INSERT INTO ${quoteWithSchema({\n name: config.migrationsTable,\n })} VALUES ('${version}')`,\n );\n};\n\nconst removeMigratedVersion = async (\n db: Adapter,\n version: string,\n config: RakeDbConfig,\n) => {\n await db.query(\n `DELETE FROM ${quoteWithSchema({\n name: config.migrationsTable,\n })} WHERE version = '${version}'`,\n );\n};\n\nconst getMigratedVersionsMap = async (\n db: Adapter,\n config: RakeDbConfig,\n): Promise<Record<string, boolean>> => {\n try {\n const result = await db.arrays<[string]>(\n `SELECT * FROM ${quoteWithSchema({ name: config.migrationsTable })}`,\n );\n return Object.fromEntries(result.rows.map((row) => [row[0], true]));\n } catch (err) {\n if ((err as Record<string, unknown>).code === '42P01') {\n await createSchemaMigrations(db, config);\n return {};\n }\n throw err;\n }\n};\n\nexport const migrate = (\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig,\n args: string[] = [],\n) => migrateOrRollback(options, config, args, true);\n\nexport const rollback = (\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig,\n args: string[] = [],\n) => migrateOrRollback(options, config, args, false);\n","import { Adapter, AdapterOptions, MaybeArray, toArray } from 'pqb';\nimport {\n getDatabaseAndUserFromOptions,\n setAdminCredentialsToOptions,\n setAdapterOptions,\n createSchemaMigrations,\n RakeDbConfig,\n migrationConfigDefaults,\n} from '../common';\nimport { migrate } from './migrateOrRollback';\n\nconst execute = async (\n options: AdapterOptions,\n sql: string,\n): Promise<'ok' | 'already' | 'forbidden' | { error: unknown }> => {\n const db = new Adapter(options);\n try {\n await db.query(sql);\n return 'ok';\n } catch (error) {\n const err = error as Record<string, unknown>;\n if (err.code === '42P04' || err.code === '3D000') {\n return 'already';\n } else if (err.code === '42501') {\n return 'forbidden';\n } else {\n return { error };\n }\n } finally {\n await db.close();\n }\n};\n\nconst createOrDrop = async (\n options: AdapterOptions,\n adminOptions: AdapterOptions,\n config: RakeDbConfig,\n args: {\n sql(params: { database: string; user: string }): string;\n successMessage(params: { database: string }): string;\n alreadyMessage(params: { database: string }): string;\n createVersionsTable?: boolean;\n },\n) => {\n const params = getDatabaseAndUserFromOptions(options);\n\n const result = await execute(\n setAdapterOptions(adminOptions, { database: 'postgres' }),\n args.sql(params),\n );\n if (result === 'ok') {\n console.log(args.successMessage(params));\n } else if (result === 'already') {\n console.log(args.alreadyMessage(params));\n } else if (result === 'forbidden') {\n await createOrDrop(\n options,\n await setAdminCredentialsToOptions(options),\n config,\n args,\n );\n return;\n } else {\n throw result.error;\n }\n\n if (!args.createVersionsTable) return;\n\n const db = new Adapter(options);\n await createSchemaMigrations(db, config);\n await db.close();\n};\n\nexport const createDb = async (\n arg: MaybeArray<AdapterOptions>,\n config: RakeDbConfig,\n) => {\n for (const options of toArray(arg)) {\n await createOrDrop(options, options, config, {\n sql({ database, user }) {\n return `CREATE DATABASE \"${database}\" OWNER \"${user}\"`;\n },\n successMessage({ database }) {\n return `Database ${database} successfully created`;\n },\n alreadyMessage({ database }) {\n return `Database ${database} already exists`;\n },\n createVersionsTable: true,\n });\n }\n};\n\nexport const dropDb = async (arg: MaybeArray<AdapterOptions>) => {\n for (const options of toArray(arg)) {\n await createOrDrop(options, options, migrationConfigDefaults, {\n sql({ database }) {\n return `DROP DATABASE \"${database}\"`;\n },\n successMessage({ database }) {\n return `Database ${database} was successfully dropped`;\n },\n alreadyMessage({ database }) {\n return `Database ${database} does not exist`;\n },\n });\n }\n};\n\nexport const resetDb = async (\n arg: MaybeArray<AdapterOptions>,\n config: RakeDbConfig,\n) => {\n await dropDb(arg);\n await createDb(arg, config);\n await migrate(arg, config);\n};\n","import {\n getFirstWordAndRest,\n getTextAfterFrom,\n getTextAfterTo,\n RakeDbConfig,\n} from '../common';\nimport { mkdir, writeFile } from 'fs/promises';\nimport path from 'path';\n\nexport const writeMigrationFile = async (\n config: RakeDbConfig,\n name: string,\n content: string,\n) => {\n await mkdir(path.resolve(config.migrationsPath), { recursive: true });\n\n const filePath = path.resolve(\n config.migrationsPath,\n `${makeFileTimeStamp()}_${name}.ts`,\n );\n await writeFile(filePath, content);\n console.log(`Created ${filePath}`);\n};\n\nexport const generate = async (config: RakeDbConfig, args: string[]) => {\n const name = args[0];\n if (!name) throw new Error('Migration name is missing');\n\n await writeMigrationFile(config, name, makeContent(name, args.slice(1)));\n};\n\nconst makeFileTimeStamp = () => {\n const now = new Date();\n return [\n now.getUTCFullYear(),\n now.getUTCMonth() + 1,\n now.getUTCDate(),\n now.getUTCHours(),\n now.getUTCMinutes(),\n now.getUTCSeconds(),\n ]\n .map((value) => (value < 10 ? `0${value}` : value))\n .join('');\n};\n\nconst makeContent = (name: string, args: string[]): string => {\n let content = `import { change } from 'rake-db';\\n\\nchange(async (db) => {`;\n\n const [first, rest] = getFirstWordAndRest(name);\n if (rest) {\n if (first === 'create' || first === 'drop') {\n content += `\\n await db.${\n first === 'create' ? 'createTable' : 'dropTable'\n }('${rest}', (t) => ({`;\n content += makeColumnsContent(args);\n content += '\\n }));';\n } else if (first === 'change') {\n content += `\\n await db.changeTable('${rest}', (t) => ({`;\n content += '\\n }));';\n } else if (first === 'add' || first === 'remove') {\n const table =\n first === 'add' ? getTextAfterTo(rest) : getTextAfterFrom(rest);\n content += `\\n await db.changeTable(${\n table ? `'${table}'` : 'tableName'\n }, (t) => ({`;\n content += makeColumnsContent(args, first);\n content += '\\n }));';\n }\n }\n\n return content + '\\n});\\n';\n};\n\nconst makeColumnsContent = (args: string[], method?: string) => {\n let content = '';\n const prepend = method ? `t.${method}(` : '';\n const append = method ? ')' : '';\n\n for (const arg of args) {\n const [name, def] = arg.split(':');\n if (!def) {\n throw new Error(\n `Column argument should be similar to name:type, name:type.method1.method2, name:type(arg).method(arg). Example: name:varchar(20).nullable. Received: ${arg}`,\n );\n }\n\n const methods = def\n .split('.')\n .map((method) => (method.endsWith(')') ? `.${method}` : `.${method}()`));\n content += `\\n ${name}: ${prepend}t${methods.join('')}${append},`;\n }\n return content;\n};\n","import { Adapter } from 'pqb';\n\nexport namespace DbStructure {\n export type Table = {\n schemaName: string;\n name: string;\n comment?: string;\n };\n\n export type View = {\n schemaName: string;\n name: string;\n };\n\n export type Procedure = {\n schemaName: string;\n name: string;\n returnSet: boolean;\n returnType: string;\n kind: string;\n isTrigger: boolean;\n types: string[];\n argTypes: string[];\n argModes: ('i' | 'o')[];\n argNames?: string[];\n };\n\n export type Column = {\n schemaName: string;\n tableName: string;\n name: string;\n type: string;\n maxChars?: number;\n numericPrecision?: number;\n numericScale?: number;\n dateTimePrecision?: number;\n default?: string;\n isNullable: boolean;\n collation?: string;\n compression?: 'p' | 'l'; // p for pglz, l for lz4\n comment?: string;\n };\n\n export type Index = {\n schemaName: string;\n tableName: string;\n name: string;\n using: string;\n isUnique: boolean;\n columns: (({ column: string } | { expression: string }) & {\n collate?: string;\n opclass?: string;\n order?: string;\n })[];\n include?: string[];\n with?: string;\n tablespace?: string;\n where?: string;\n };\n\n // a = no action, r = restrict, c = cascade, n = set null, d = set default\n type ForeignKeyAction = 'a' | 'r' | 'c' | 'n' | 'd';\n\n export type ForeignKey = {\n schemaName: string;\n tableName: string;\n foreignTableSchemaName: string;\n foreignTableName: string;\n name: string;\n columnNames: string[];\n foreignColumnNames: string[];\n match: 'f' | 'p' | 's'; // FULL | PARTIAL | SIMPLE\n onUpdate: ForeignKeyAction;\n onDelete: ForeignKeyAction;\n };\n\n export type PrimaryKey = {\n schemaName: string;\n tableName: string;\n name: string;\n columnNames: string[];\n };\n\n export type Trigger = {\n schemaName: string;\n tableName: string;\n triggerSchema: string;\n name: string;\n events: string[];\n activation: string;\n condition?: string;\n definition: string;\n };\n\n export type Extension = {\n schemaName: string;\n name: string;\n version?: string;\n };\n}\n\nconst filterSchema = (table: string) =>\n `${table} !~ '^pg_' AND ${table} != 'information_schema'`;\n\nexport class DbStructure {\n constructor(private db: Adapter) {}\n\n async getSchemas(): Promise<string[]> {\n const { rows } = await this.db.arrays<[string]>(\n `SELECT n.nspname \"name\"\nFROM pg_catalog.pg_namespace n\nWHERE ${filterSchema('n.nspname')}\nORDER BY \"name\"`,\n );\n return rows.flat();\n }\n\n async getTables() {\n const { rows } = await this.db.query<DbStructure.Table>(\n `SELECT\n nspname AS \"schemaName\",\n relname AS \"name\",\n obj_description(c.oid) AS comment\nFROM pg_class c\nJOIN pg_catalog.pg_namespace n ON n.oid = relnamespace\nWHERE relkind = 'r'\n AND ${filterSchema('nspname')}\nORDER BY relname`,\n );\n return rows;\n }\n\n async getViews() {\n const { rows } = await this.db.query<DbStructure.View[]>(\n `SELECT\n table_schema \"schemaName\",\n table_name \"name\"\nFROM information_schema.tables\nWHERE table_type = 'VIEW'\n AND ${filterSchema('table_schema')}\nORDER BY table_name`,\n );\n return rows;\n }\n\n async getProcedures() {\n const { rows } = await this.db.query<DbStructure.Procedure[]>(\n `SELECT\n n.nspname AS \"schemaName\",\n proname AS name,\n proretset AS \"returnSet\",\n (\n SELECT typname FROM pg_type WHERE oid = prorettype\n ) AS \"returnType\",\n prokind AS \"kind\",\n coalesce((\n SELECT true FROM information_schema.triggers\n WHERE n.nspname = trigger_schema AND trigger_name = proname\n LIMIT 1\n ), false) AS \"isTrigger\",\n coalesce((\n SELECT json_agg(pg_type.typname)\n FROM unnest(coalesce(proallargtypes, proargtypes)) typeId\n JOIN pg_type ON pg_type.oid = typeId\n ), '[]') AS \"types\",\n coalesce(to_json(proallargtypes::int[]), to_json(proargtypes::int[])) AS \"argTypes\",\n coalesce(to_json(proargmodes), '[]') AS \"argModes\",\n to_json(proargnames) AS \"argNames\"\nFROM pg_proc p\nJOIN pg_namespace n ON p.pronamespace = n.oid\nWHERE ${filterSchema('n.nspname')}`,\n );\n return rows;\n }\n\n async getColumns() {\n const { rows } = await this.db.query<DbStructure.Column>(\n `SELECT\n table_schema \"schemaName\",\n table_name \"tableName\",\n column_name \"name\",\n udt_name \"type\",\n character_maximum_length AS \"maxChars\",\n numeric_precision AS \"numericPrecision\",\n numeric_scale AS \"numericScale\",\n datetime_precision AS \"dateTimePrecision\",\n column_default \"default\",\n is_nullable::boolean \"isNullable\",\n collation_name AS \"collation\",\n NULLIF(a.attcompression, '') AS compression,\n pgd.description AS \"comment\"\nFROM information_schema.columns c\nLEFT JOIN pg_catalog.pg_statio_all_tables AS st\n ON c.table_schema = st.schemaname\n AND c.table_name = st.relname\nLEFT JOIN pg_catalog.pg_description pgd\n ON pgd.objoid = st.relid\n AND pgd.objsubid = c.ordinal_position\nLEFT JOIN pg_catalog.pg_attribute a\n ON a.attrelid = st.relid\n AND a.attnum = c.ordinal_position\nWHERE ${filterSchema('table_schema')}\nORDER BY c.ordinal_position`,\n );\n return rows;\n }\n\n async getIndexes() {\n const { rows } = await this.db.query<DbStructure.Index>(\n `SELECT\n n.nspname \"schemaName\",\n t.relname \"tableName\",\n ic.relname \"name\",\n am.amname AS \"using\",\n i.indisunique \"isUnique\",\n (\n SELECT json_agg(\n (\n CASE WHEN t.e = 0\n THEN jsonb_build_object('expression', pg_get_indexdef(i.indexrelid, t.i::int4, false))\n ELSE jsonb_build_object('column', (\n (\n SELECT attname\n FROM pg_catalog.pg_attribute\n WHERE attrelid = i.indrelid\n AND attnum = t.e\n )\n ))\n END\n ) || (\n CASE WHEN i.indcollation[t.i - 1] = 0\n THEN '{}'::jsonb\n ELSE (\n SELECT (\n CASE WHEN collname = 'default'\n THEN '{}'::jsonb\n ELSE jsonb_build_object('collate', collname)\n END\n )\n FROM pg_catalog.pg_collation\n WHERE oid = i.indcollation[t.i - 1]\n )\n END\n ) || (\n SELECT\n CASE WHEN opcdefault AND attoptions IS NULL\n THEN '{}'::jsonb\n ELSE jsonb_build_object(\n 'opclass', opcname || COALESCE('(' || array_to_string(attoptions, ', ') || ')', '')\n )\n END\n FROM pg_opclass\n LEFT JOIN pg_attribute\n ON attrelid = i.indexrelid\n AND attnum = t.i\n WHERE oid = i.indclass[t.i - 1]\n ) || (\n CASE WHEN i.indoption[t.i - 1] = 0\n THEN '{}'::jsonb\n ELSE jsonb_build_object(\n 'order',\n CASE\n WHEN i.indoption[t.i - 1] = 1 THEN 'DESC NULLS LAST'\n WHEN i.indoption[t.i - 1] = 2 THEN 'ASC NULLS FIRST'\n WHEN i.indoption[t.i - 1] = 3 THEN 'DESC'\n ELSE NULL\n END\n )\n END\n )\n )\n FROM unnest(i.indkey[:indnkeyatts - 1]) WITH ORDINALITY AS t(e, i)\n ) \"columns\",\n (\n SELECT json_agg(\n (\n SELECT attname\n FROM pg_catalog.pg_attribute\n WHERE attrelid = i.indrelid\n AND attnum = j.e\n )\n )\n FROM unnest(i.indkey[indnkeyatts:]) AS j(e)\n ) AS \"include\",\n NULLIF(pg_catalog.array_to_string(\n ic.reloptions || array(SELECT 'toast.' || x FROM pg_catalog.unnest(tc.reloptions) x),\n ', '\n ), '') AS \"with\",\n (\n SELECT tablespace\n FROM pg_indexes\n WHERE schemaname = n.nspname\n AND indexname = ic.relname\n ) AS tablespace,\n pg_get_expr(i.indpred, i.indrelid) AS \"where\"\nFROM pg_index i\nJOIN pg_class t ON t.oid = i.indrelid\nJOIN pg_namespace n ON n.oid = t.relnamespace\nJOIN pg_class ic ON ic.oid = i.indexrelid\nJOIN pg_am am ON am.oid = ic.relam\nLEFT JOIN pg_catalog.pg_class tc ON (ic.reltoastrelid = tc.oid)\nWHERE ${filterSchema('n.nspname')}\n AND NOT i.indisprimary\nORDER BY ic.relname`,\n );\n return rows;\n }\n\n async getForeignKeys() {\n const { rows } = await this.db.query<DbStructure.ForeignKey>(\n `SELECT\n s.nspname AS \"schemaName\",\n t.relname AS \"tableName\",\n fs.nspname AS \"foreignTableSchemaName\",\n ft.relname AS \"foreignTableName\",\n c.conname AS \"name\",\n (\n SELECT json_agg(ccu.column_name)\n FROM information_schema.key_column_usage ccu\n WHERE ccu.constraint_name = c.conname\n AND ccu.table_schema = cs.nspname\n ) AS \"columnNames\",\n (\n SELECT json_agg(ccu.column_name)\n FROM information_schema.constraint_column_usage ccu\n WHERE ccu.constraint_name = c.conname\n AND ccu.table_schema = cs.nspname\n ) AS \"foreignColumnNames\",\n c.confmatchtype AS match,\n c.confupdtype AS \"onUpdate\",\n c.confdeltype AS \"onDelete\"\nFROM pg_catalog.pg_constraint c\nJOIN pg_class t ON t.oid = conrelid\nJOIN pg_catalog.pg_namespace s ON s.oid = t.relnamespace\nJOIN pg_class ft ON ft.oid = confrelid\nJOIN pg_catalog.pg_namespace fs ON fs.oid = ft.relnamespace\nJOIN pg_catalog.pg_namespace cs ON cs.oid = c.connamespace\nWHERE contype = 'f'\nORDER BY c.conname`,\n );\n return rows;\n }\n\n async getPrimaryKeys() {\n const { rows } = await this.db.query<DbStructure.PrimaryKey>(\n `SELECT tc.table_schema AS \"schemaName\",\n tc.table_name AS \"tableName\",\n tc.constraint_name AS \"name\",\n json_agg(ccu.column_name) \"columnNames\"\nFROM information_schema.table_constraints tc\nJOIN information_schema.constraint_column_usage ccu\n ON ccu.constraint_name = tc.constraint_name\n AND ccu.table_schema = tc.table_schema\nWHERE tc.constraint_type = 'PRIMARY KEY'\n AND ${filterSchema('tc.table_schema')}\nGROUP BY \"schemaName\", \"tableName\", \"name\"\nORDER BY \"name\"`,\n );\n return rows;\n }\n\n async getTriggers() {\n const { rows } = await this.db.query<DbStructure.Trigger>(\n `SELECT event_object_schema AS \"schemaName\",\n event_object_table AS \"tableName\",\n trigger_schema AS \"triggerSchema\",\n trigger_name AS name,\n json_agg(event_manipulation) AS events,\n action_timing AS activation,\n action_condition AS condition,\n action_statement AS definition\nFROM information_schema.triggers\nWHERE ${filterSchema('event_object_schema')}\nGROUP BY event_object_schema, event_object_table, trigger_schema, trigger_name, action_timing, action_condition, action_statement\nORDER BY trigger_name`,\n );\n return rows;\n }\n\n async getExtensions() {\n const { rows } = await this.db.query<DbStructure.Extension>(\n `SELECT\n nspname AS \"schemaName\",\n extname AS \"name\",\n extversion AS version\nFROM pg_extension\nJOIN pg_catalog.pg_namespace n ON n.oid = extnamespace\n AND ${filterSchema('n.nspname')}`,\n );\n return rows;\n }\n}\n","import { DbStructure } from './dbStructure';\nimport { RakeDbAst } from '../ast';\nimport {\n columnsByType,\n ColumnsShape,\n ForeignKeyOptions,\n instantiateColumn,\n singleQuote,\n} from 'pqb';\n\nconst matchMap = {\n s: undefined,\n f: 'FULL',\n p: 'PARTIAL',\n};\n\nconst fkeyActionMap = {\n a: undefined, // default\n r: 'RESTRICT',\n c: 'CASCADE',\n n: 'SET NULL',\n d: 'SET DEFAULT',\n};\n\nexport const structureToAst = async (db: DbStructure): Promise<RakeDbAst[]> => {\n const ast: RakeDbAst[] = [];\n\n const [\n schemas,\n tables,\n allColumns,\n allPrimaryKeys,\n allIndexes,\n allForeignKeys,\n extensions,\n ] = await Promise.all([\n db.getSchemas(),\n db.getTables(),\n db.getColumns(),\n db.getPrimaryKeys(),\n db.getIndexes(),\n db.getForeignKeys(),\n db.getExtensions(),\n ]);\n\n for (const name of schemas) {\n if (name === 'public') continue;\n\n ast.push({\n type: 'schema',\n action: 'create',\n name,\n });\n }\n\n for (const table of tables) {\n const { schemaName, name } = table;\n\n if (name === 'schemaMigrations') continue;\n\n const belongsToTable = makeBelongsToTable(schemaName, name);\n\n const columns = allColumns.filter(belongsToTable);\n const primaryKey = allPrimaryKeys.find(belongsToTable);\n const tableIndexes = allIndexes.filter(belongsToTable);\n const tableForeignKeys = allForeignKeys.filter(belongsToTable);\n\n const shape: ColumnsShape = {};\n for (let item of columns) {\n const isSerial = getIsSerial(item);\n if (isSerial) {\n item = { ...item, default: undefined };\n }\n\n const klass = columnsByType[getColumnType(item, isSerial)];\n if (!klass) {\n throw new Error(`Column type \\`${item.type}\\` is not supported`);\n }\n\n let column = instantiateColumn(klass, item);\n\n if (\n primaryKey?.columnNames.length === 1 &&\n primaryKey?.columnNames[0] === item.name\n ) {\n column = column.primaryKey();\n }\n\n const indexes = tableIndexes.filter(\n (it) =>\n it.columns.length === 1 &&\n 'column' in it.columns[0] &&\n it.columns[0].column === item.name,\n );\n for (const index of indexes) {\n const options = index.columns[0];\n column = column.index({\n collate: options.collate,\n opclass: options.opclass,\n order: options.order,\n name: index.name,\n using: index.using === 'btree' ? undefined : index.using,\n unique: index.isUnique,\n include: index.include,\n with: index.with,\n tablespace: index.tablespace,\n where: index.where,\n });\n }\n\n const foreignKeys = tableForeignKeys.filter(\n (it) => it.columnNames.length === 1 && it.columnNames[0] === item.name,\n );\n for (const foreignKey of foreignKeys) {\n column = column.foreignKey(\n foreignKey.foreignTableName,\n foreignKey.foreignColumnNames[0],\n {\n name: foreignKey.name,\n match: matchMap[foreignKey.match],\n onUpdate: fkeyActionMap[foreignKey.onUpdate],\n onDelete: fkeyActionMap[foreignKey.onDelete],\n } as ForeignKeyOptions,\n );\n }\n\n shape[item.name] = column;\n }\n\n ast.push({\n type: 'table',\n action: 'create',\n schema: schemaName === 'public' ? undefined : schemaName,\n comment: table.comment,\n name: name,\n shape,\n noPrimaryKey: primaryKey ? 'error' : 'ignore',\n primaryKey:\n primaryKey && primaryKey.columnNames.length > 1\n ? {\n columns: primaryKey.columnNames,\n options:\n primaryKey.name === `${name}_pkey`\n ? undefined\n : { name: primaryKey.name },\n }\n : undefined,\n indexes: tableIndexes\n .filter(\n (index) =>\n index.columns.length > 1 ||\n index.columns.some((it) => 'expression' in it),\n )\n .map((index) => ({\n columns: index.columns.map((it) => ({\n ...('column' in it\n ? { column: it.column }\n : { expression: it.expression }),\n collate: it.collate,\n opclass: it.opclass,\n order: it.order,\n })),\n options: {\n name: index.name,\n using: index.using === 'btree' ? undefined : index.using,\n unique: index.isUnique,\n include: index.include,\n with: index.with,\n tablespace: index.tablespace,\n where: index.where,\n },\n })),\n foreignKeys: tableForeignKeys\n .filter((it) => it.columnNames.length > 1)\n .map((it) => ({\n columns: it.columnNames,\n fnOrTable: it.foreignTableName,\n foreignColumns: it.foreignColumnNames,\n options: {\n name: it.name,\n match: matchMap[it.match],\n onUpdate: fkeyActionMap[it.onUpdate],\n onDelete: fkeyActionMap[it.onDelete],\n } as ForeignKeyOptions,\n })),\n });\n }\n\n for (const it of extensions) {\n ast.push({\n type: 'extension',\n action: 'create',\n name: it.name,\n schema: it.schemaName === 'public' ? undefined : it.schemaName,\n version: it.version,\n });\n }\n\n return ast;\n};\n\nconst makeBelongsToTable =\n (schema: string | undefined, table: string) =>\n (item: { schemaName: string; tableName: string }) =>\n item.schemaName === schema && item.tableName === table;\n\nconst getIsSerial = (item: DbStructure.Column) => {\n if (item.type === 'int2' || item.type === 'int4' || item.type === 'int8') {\n const { default: def, schemaName, tableName, name } = item;\n const seq = `${tableName}_${name}_seq`;\n if (\n def &&\n (def === `nextval(${singleQuote(`${seq}`)}::regclass)` ||\n def === `nextval(${singleQuote(`\"${seq}\"`)}::regclass)` ||\n def === `nextval(${singleQuote(`${schemaName}.${seq}`)}::regclass)` ||\n def === `nextval(${singleQuote(`\"${schemaName}\".${seq}`)}::regclass)` ||\n def === `nextval(${singleQuote(`${schemaName}.\"${seq}\"`)}::regclass)` ||\n def === `nextval(${singleQuote(`\"${schemaName}\".\"${seq}\"`)}::regclass)`)\n ) {\n return true;\n }\n }\n\n return false;\n};\n\nconst getColumnType = (item: DbStructure.Column, isSerial: boolean) => {\n if (isSerial) {\n return item.type === 'int2'\n ? 'smallserial'\n : item.type === 'int4'\n ? 'serial'\n : 'bigserial';\n }\n\n return item.type;\n};\n","import { RakeDbAst } from '../ast';\nimport {\n addCode,\n Code,\n codeToString,\n ColumnType,\n foreignKeyToCode,\n indexToCode,\n isRaw,\n primaryKeyToCode,\n quoteObjectKey,\n singleQuote,\n TimestampColumn,\n} from 'pqb';\nimport { quoteSchemaTable } from '../common';\n\nexport const astToMigration = (ast: RakeDbAst[]): string | undefined => {\n const code: Code[] = [];\n for (const item of ast) {\n if (item.type === 'schema' && item.action === 'create') {\n code.push(createSchema(item));\n } else if (item.type === 'table' && item.action === 'create') {\n if (code.length) code.push([]);\n code.push(...createTable(item));\n }\n }\n\n if (!code.length) return;\n\n return `import { change } from 'rake-db';\n\nchange(async (db) => {\n${codeToString(code, ' ', ' ')}\n});\n`;\n};\n\nconst createSchema = (ast: RakeDbAst.Schema) => {\n return `await db.createSchema(${singleQuote(ast.name)});`;\n};\n\nconst createTable = (ast: RakeDbAst.Table) => {\n const code: Code[] = [];\n addCode(code, `await db.createTable(${quoteSchemaTable(ast)}, (t) => ({`);\n\n const hasTimestamps =\n isTimestamp(ast.shape.createdAt) && isTimestamp(ast.shape.updatedAt);\n\n for (const key in ast.shape) {\n if (hasTimestamps && (key === 'createdAt' || key === 'updatedAt')) continue;\n\n const line: Code[] = [`${quoteObjectKey(key)}: `];\n for (const part of ast.shape[key].toCode('t')) {\n addCode(line, part);\n }\n addCode(line, ',');\n code.push(line);\n }\n\n if (hasTimestamps) {\n code.push(['...t.timestamps(),']);\n }\n\n if (ast.primaryKey) {\n code.push([primaryKeyToCode(ast.primaryKey, 't')]);\n }\n\n for (const index of ast.indexes) {\n code.push(indexToCode(index, 't'));\n }\n\n for (const foreignKey of ast.foreignKeys) {\n code.push(foreignKeyToCode(foreignKey, 't'));\n }\n\n addCode(code, '}));');\n\n return code;\n};\n\nconst isTimestamp = (column?: ColumnType) => {\n if (!column) return false;\n\n const { default: def } = column.data;\n return (\n column instanceof TimestampColumn &&\n !column.data.isNullable &&\n def &&\n typeof def === 'object' &&\n isRaw(def) &&\n def.__raw === 'now()'\n );\n};\n","import { RakeDbConfig } from '../common';\nimport { Adapter, AdapterOptions } from 'pqb';\nimport { DbStructure } from './dbStructure';\nimport { structureToAst } from './structureToAst';\nimport { astToMigration } from './astToMigration';\nimport { writeMigrationFile } from '../commands/generate';\n\nexport const pullDbStructure = async (\n options: AdapterOptions,\n config: RakeDbConfig,\n) => {\n const adapter = new Adapter(options);\n const db = new DbStructure(adapter);\n const ast = await structureToAst(db);\n\n await adapter.close();\n\n const result = astToMigration(ast);\n if (!result) return;\n\n await writeMigrationFile(config, 'pull', result);\n};\n","import { AdapterOptions, MaybeArray, toArray } from 'pqb';\nimport { createDb, dropDb, resetDb } from './commands/createOrDrop';\nimport { migrate, rollback } from './commands/migrateOrRollback';\nimport { getMigrationConfigWithDefaults, RakeDbConfig } from './common';\nimport { generate } from './commands/generate';\nimport { pullDbStructure } from './pull/pull';\n\nexport const rakeDb = async (\n options: MaybeArray<AdapterOptions>,\n partialConfig: Partial<RakeDbConfig> = {},\n args: string[] = process.argv.slice(2),\n) => {\n const config = getMigrationConfigWithDefaults(partialConfig);\n\n const command = args[0]?.split(':')[0];\n\n if (command === 'create') {\n await createDb(options, config);\n } else if (command === 'drop') {\n await dropDb(options);\n } else if (command === 'reset') {\n await resetDb(options, config);\n } else if (command === 'migrate') {\n await migrate(options, config, args.slice(1));\n } else if (command === 'rollback') {\n await rollback(options, config, args.slice(1));\n } else if (command === 'g' || command === 'generate') {\n await generate(config, args.slice(1));\n } else if (command === 'pull') {\n await pullDbStructure(toArray(options)[0], config);\n } else {\n printHelp();\n }\n};\n\nconst printHelp = () =>\n console.log(\n `Usage: rake-db [command] [arguments]\n\nCommands:\n create create databases\n drop drop databases\n reset drop, create and migrate databases\n g, generate generate migration file, see below\n migrate migrate pending migrations\n rollback rollback the last migrated\n no or unknown command prints this message\n \nMigrate arguments:\n no arguments run all pending migrations\n number run specific number of pending migrations\n\nRollback arguments:\n no arguments rollback one last applied migration\n number rollback specific number of applied migrations\n all rollback all applied migrations\n\nMigrate and rollback common arguments:\n --code run code updater, overrides \\`useCodeUpdater\\` option\n --code false do not run code updater\n \nGenerate arguments:\n- (required) first argument is migration name\n * create* template for create table\n * change* template for change table\n * add*To* template for add columns\n * remove*From* template for remove columns\n * drop* template for drop table\n\n- other arguments considered as columns with types and optional methods:\n rake-db g createTable id:serial.primaryKey name:text.nullable\n`,\n );\n"],"names":["path","__spreadValues","__spreadProps","Enquirer","readdir","singleQuote","quote","isRaw","getRaw","toArray","columnTypes","raw","createTable","getColumnTypes","getTableData","makeAst","astToQueries","ColumnType","emptyObject","resetTableData","changeTableData","Operators","singular","TransactionAdapter","logParamToLogObject","createSchema","Adapter","db","mkdir","writeFile","method","columnsByType","instantiateColumn","codeToString","addCode","quoteObjectKey","primaryKeyToCode","indexToCode","foreignKeyToCode","TimestampColumn"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/common.ts","../src/migration/change.ts","../src/migration/migrationUtils.ts","../src/migration/createTable.ts","../src/migration/changeTable.ts","../src/migration/migration.ts","../src/commands/migrateOrRollback.ts","../src/commands/createOrDrop.ts","../src/commands/generate.ts","../src/pull/dbStructure.ts","../src/pull/structureToAst.ts","../src/pull/astToMigration.ts","../src/pull/pull.ts","../src/rakeDb.ts"],"sourcesContent":["import {\n Adapter,\n AdapterOptions,\n NoPrimaryKeyOption,\n QueryLogOptions,\n singleQuote,\n} from 'pqb';\nimport Enquirer from 'enquirer';\nimport path from 'path';\nimport { readdir } from 'fs/promises';\nimport { RakeDbAst } from './ast';\n\nexport type RakeDbConfig = {\n migrationsPath: string;\n migrationsTable: string;\n requireTs(path: string): void;\n noPrimaryKey?: NoPrimaryKeyOption;\n appCodeUpdater?: AppCodeUpdater;\n useCodeUpdater?: boolean;\n} & QueryLogOptions;\n\nexport type AppCodeUpdater = (params: {\n ast: RakeDbAst;\n options: AdapterOptions;\n cache: object;\n}) => Promise<void>;\n\nexport const migrationConfigDefaults = {\n migrationsPath: path.resolve('src', 'migrations'),\n migrationsTable: 'schemaMigrations',\n requireTs: require,\n log: true,\n logger: console,\n useCodeUpdater: true,\n};\n\nexport const getMigrationConfigWithDefaults = (\n config: Partial<RakeDbConfig>,\n) => {\n return { ...migrationConfigDefaults, ...config };\n};\n\nexport const getDatabaseAndUserFromOptions = (\n options: AdapterOptions,\n): { database: string; user: string } => {\n if (options.databaseURL) {\n const url = new URL(options.databaseURL);\n return {\n database: url.pathname.slice(1),\n user: url.username,\n };\n } else {\n return {\n database: options.database as string,\n user: options.user as string,\n };\n }\n};\n\nexport const setAdapterOptions = (\n options: AdapterOptions,\n set: { database?: string; user?: string; password?: string },\n): AdapterOptions => {\n if (options.databaseURL) {\n const url = new URL(options.databaseURL);\n\n if ('database' in set) {\n url.pathname = `/${set.database}`;\n }\n\n if (set.user !== undefined) {\n url.username = set.user;\n }\n\n if (set.password !== undefined) {\n url.password = set.password;\n }\n\n return { ...options, databaseURL: url.toString() };\n } else {\n return {\n ...options,\n ...set,\n };\n }\n};\n\nconst askAdminCredentials = async (): Promise<{\n user: string;\n password: string;\n}> => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const prompt = new (Enquirer as any).Snippet({\n message: `What are postgres admin login and password?`,\n fields: [\n {\n name: 'user',\n required: true,\n },\n {\n name: 'password',\n },\n ],\n values: {\n user: 'postgres',\n password: '',\n },\n template: 'Admin user: {{user}}\\nAdmin password: {{password}}',\n });\n\n const { values } = await prompt.run();\n if (!values.password) values.password = '';\n\n return values;\n};\n\nexport const setAdminCredentialsToOptions = async (\n options: AdapterOptions,\n): Promise<AdapterOptions> => {\n const values = await askAdminCredentials();\n return setAdapterOptions(options, values);\n};\n\nexport const createSchemaMigrations = async (\n db: Adapter,\n config: RakeDbConfig,\n) => {\n try {\n await db.query(\n `CREATE TABLE ${quoteWithSchema({\n name: config.migrationsTable,\n })} ( version TEXT NOT NULL )`,\n );\n console.log('Created versions table');\n } catch (err) {\n if ((err as Record<string, unknown>).code === '42P07') {\n console.log('Versions table exists');\n } else {\n throw err;\n }\n }\n};\n\nexport const getFirstWordAndRest = (\n input: string,\n): [string] | [string, string] => {\n const index = input.search(/(?=[A-Z])|[-_]/);\n if (index !== -1) {\n const restStart =\n input[index] === '-' || input[index] === '_' ? index + 1 : index;\n const rest = input.slice(restStart);\n return [input.slice(0, index), rest[0].toLowerCase() + rest.slice(1)];\n } else {\n return [input];\n }\n};\n\nconst getTextAfterRegExp = (\n input: string,\n regex: RegExp,\n length: number,\n): string | undefined => {\n let index = input.search(regex);\n if (index === -1) return;\n\n if (input[index] === '-' || input[index] === '_') index++;\n index += length;\n\n const start = input[index] == '-' || input[index] === '_' ? index + 1 : index;\n const text = input.slice(start);\n return text[0].toLowerCase() + text.slice(1);\n};\n\nexport const getTextAfterTo = (input: string): string | undefined => {\n return getTextAfterRegExp(input, /(To|-to|_to)[A-Z-_]/, 2);\n};\n\nexport const getTextAfterFrom = (input: string): string | undefined => {\n return getTextAfterRegExp(input, /(From|-from|_from)[A-Z-_]/, 4);\n};\n\nexport type MigrationFile = {\n path: string;\n version: string;\n};\n\nexport const getMigrationFiles = async (\n config: RakeDbConfig,\n up: boolean,\n): Promise<MigrationFile[]> => {\n const { migrationsPath } = config;\n\n let files: string[];\n try {\n files = await readdir(path.resolve(migrationsPath));\n } catch (_) {\n return [];\n }\n\n const sort = up ? sortAsc : sortDesc;\n return sort(files).map((file) => {\n if (!file.endsWith('.ts')) {\n throw new Error(\n `Only .ts files are supported for migration, received: ${file}`,\n );\n }\n\n const timestampMatch = file.match(/^(\\d{14})\\D/);\n if (!timestampMatch) {\n throw new Error(\n `Migration file name should start with 14 digit version, received ${file}`,\n );\n }\n\n return {\n path: path.resolve(migrationsPath, file),\n version: timestampMatch[1],\n };\n });\n};\n\nexport const sortAsc = (arr: string[]) => arr.sort();\n\nexport const sortDesc = (arr: string[]) => arr.sort((a, b) => (a > b ? -1 : 1));\n\nexport const joinWords = (...words: string[]) => {\n return words\n .slice(1)\n .reduce(\n (acc, word) => acc + word[0].toUpperCase() + word.slice(1),\n words[0],\n );\n};\n\nexport const joinColumns = (columns: string[]) => {\n return columns.map((column) => `\"${column}\"`).join(', ');\n};\n\nexport const quoteWithSchema = ({\n schema,\n name,\n}: {\n schema?: string;\n name: string;\n}) => {\n return schema ? `\"${schema}\".\"${name}\"` : `\"${name}\"`;\n};\n\nexport const getSchemaAndTableFromName = (\n name: string,\n): [string | undefined, string] => {\n const index = name.indexOf('.');\n return index !== -1\n ? [name.slice(0, index), name.slice(index + 1)]\n : [undefined, name];\n};\n\nexport const quoteSchemaTable = ({\n schema,\n name,\n}: {\n schema?: string;\n name: string;\n}) => {\n return singleQuote(schema ? `${schema}.${name}` : name);\n};\n","import { Migration } from './migration';\n\nlet currentMigration: Migration | undefined;\nlet currentPromise: Promise<void> | undefined;\nlet currentUp = true;\nlet currentChangeCallback: ChangeCallback | undefined;\n\nexport type ChangeCallback = (db: Migration, up: boolean) => Promise<void>;\n\nexport const change = (fn: ChangeCallback) => {\n if (!currentMigration) throw new Error('Database instance is not set');\n currentPromise = fn(currentMigration, currentUp);\n currentChangeCallback = fn;\n};\n\nexport const setCurrentMigration = (db: Migration) => {\n currentMigration = db;\n};\n\nexport const setCurrentMigrationUp = (up: boolean) => {\n currentUp = up;\n};\n\nexport const getCurrentPromise = () => currentPromise;\n\nexport const getCurrentChangeCallback = () => currentChangeCallback;\n","import {\n ColumnType,\n ForeignKeyTable,\n ForeignKeyOptions,\n getRaw,\n isRaw,\n quote,\n Sql,\n TableData,\n toArray,\n} from 'pqb';\nimport { ColumnComment, Migration } from './migration';\nimport {\n getSchemaAndTableFromName,\n joinColumns,\n quoteWithSchema,\n} from '../common';\n\nexport const columnToSql = (\n key: string,\n item: ColumnType,\n values: unknown[],\n hasMultiplePrimaryKeys: boolean,\n): string => {\n const line = [`\"${key}\" ${item.toSQL()}`];\n\n if (item.data.compression) {\n line.push(`COMPRESSION ${item.data.compression}`);\n }\n\n if (item.data.collate) {\n line.push(`COLLATE ${quote(item.data.collate)}`);\n }\n\n if (item.isPrimaryKey && !hasMultiplePrimaryKeys) {\n line.push('PRIMARY KEY');\n } else if (!item.data.isNullable) {\n line.push('NOT NULL');\n }\n\n if (item.data.default !== undefined) {\n if (\n typeof item.data.default === 'object' &&\n item.data.default &&\n isRaw(item.data.default)\n ) {\n line.push(`DEFAULT ${getRaw(item.data.default, values)}`);\n } else {\n line.push(`DEFAULT ${quote(item.data.default)}`);\n }\n }\n\n const { foreignKeys } = item.data;\n if (foreignKeys) {\n for (const foreignKey of foreignKeys) {\n const [schema, table] = getForeignKeyTable(\n 'fn' in foreignKey ? foreignKey.fn : foreignKey.table,\n );\n\n if (foreignKey.name) {\n line.push(`CONSTRAINT \"${foreignKey.name}\"`);\n }\n\n line.push(referencesToSql(schema, table, foreignKey.columns, foreignKey));\n }\n }\n\n return line.join(' ');\n};\n\nexport const addColumnIndex = (\n indexes: TableData.Index[],\n key: string,\n item: ColumnType,\n) => {\n if (item.data.indexes) {\n indexes.push(\n ...item.data.indexes.map((index) => ({\n columns: [{ ...index, column: key }],\n options: index,\n })),\n );\n }\n};\n\nexport const addColumnComment = (\n comments: ColumnComment[],\n key: string,\n item: ColumnType,\n) => {\n if (item.data.comment) {\n comments.push({ column: key, comment: item.data.comment });\n }\n};\n\nexport const getForeignKeyTable = (\n fnOrTable: (() => ForeignKeyTable) | string,\n): [string | undefined, string] => {\n if (typeof fnOrTable === 'string') {\n return getSchemaAndTableFromName(fnOrTable);\n }\n\n const item = new (fnOrTable())();\n return [item.schema, item.table];\n};\n\nexport const getForeignKeyName = (table: string, columns: string[]) => {\n return `${table}_${columns.join('_')}_fkey`;\n};\n\nexport const constraintToSql = (\n { name }: { schema?: string; name: string },\n up: boolean,\n foreignKey: TableData['foreignKeys'][number],\n) => {\n const constraintName =\n foreignKey.options.name || getForeignKeyName(name, foreignKey.columns);\n\n if (!up) {\n const { dropMode } = foreignKey.options;\n return `CONSTRAINT \"${constraintName}\"${dropMode ? ` ${dropMode}` : ''}`;\n }\n\n const [schema, table] = getForeignKeyTable(foreignKey.fnOrTable);\n return `CONSTRAINT \"${constraintName}\" FOREIGN KEY (${joinColumns(\n foreignKey.columns,\n )}) ${referencesToSql(\n schema,\n table,\n foreignKey.foreignColumns,\n foreignKey.options,\n )}`;\n};\n\nexport const referencesToSql = (\n schema: string | undefined,\n table: string,\n columns: string[],\n foreignKey: Pick<ForeignKeyOptions, 'match' | 'onDelete' | 'onUpdate'>,\n) => {\n const sql: string[] = [\n `REFERENCES ${quoteWithSchema({ schema, name: table })}(${joinColumns(\n columns,\n )})`,\n ];\n\n if (foreignKey.match) {\n sql.push(`MATCH ${foreignKey.match.toUpperCase()}`);\n }\n\n if (foreignKey.onDelete) {\n sql.push(`ON DELETE ${foreignKey.onDelete.toUpperCase()}`);\n }\n\n if (foreignKey.onUpdate) {\n sql.push(`ON UPDATE ${foreignKey.onUpdate.toUpperCase()}`);\n }\n\n return sql.join(' ');\n};\n\nexport const getIndexName = (\n table: string,\n columns: TableData.Index['columns'],\n) => {\n return `${table}_${columns\n .map((it) =>\n 'column' in it\n ? it.column\n : it.expression.match(/\\w+/g)?.join('_') || 'expression',\n )\n .join('_')}_idx`;\n};\n\nexport const indexesToQuery = (\n up: boolean,\n { schema, name }: { schema?: string; name: string },\n indexes: TableData.Index[],\n): Sql[] => {\n return indexes.map(({ columns, options }) => {\n const indexName = options.name || getIndexName(name, columns);\n\n if (!up) {\n return {\n text: `DROP INDEX \"${indexName}\"${\n options.dropMode ? ` ${options.dropMode}` : ''\n }`,\n values: [],\n };\n }\n\n const values: unknown[] = [];\n\n const sql: string[] = ['CREATE'];\n\n if (options.unique) {\n sql.push('UNIQUE');\n }\n\n sql.push(`INDEX \"${indexName}\" ON ${quoteWithSchema({ schema, name })}`);\n\n if (options.using) {\n sql.push(`USING ${options.using}`);\n }\n\n const columnsSql: string[] = [];\n\n columns.forEach((column) => {\n const columnSql: string[] = [\n 'column' in column ? `\"${column.column}\"` : `(${column.expression})`,\n ];\n\n if (column.collate) {\n columnSql.push(`COLLATE '${column.collate}'`);\n }\n\n if (column.opclass) {\n columnSql.push(column.opclass);\n }\n\n if (column.order) {\n columnSql.push(column.order);\n }\n\n columnsSql.push(columnSql.join(' '));\n });\n\n sql.push(`(${columnsSql.join(', ')})`);\n\n if (options.include) {\n sql.push(\n `INCLUDE (${toArray(options.include)\n .map((column) => `\"${column}\"`)\n .join(', ')})`,\n );\n }\n\n if (options.with) {\n sql.push(`WITH (${options.with})`);\n }\n\n if (options.tablespace) {\n sql.push(`TABLESPACE ${options.tablespace}`);\n }\n\n if (options.where) {\n sql.push(\n `WHERE ${\n typeof options.where === 'object' &&\n options.where &&\n isRaw(options.where)\n ? getRaw(options.where, values)\n : options.where\n }`,\n );\n }\n\n return { text: sql.join(' '), values };\n });\n};\n\nexport const commentsToQuery = (\n schemaTable: { schema?: string; name: string },\n comments: ColumnComment[],\n): Sql[] => {\n return comments.map(({ column, comment }) => ({\n text: `COMMENT ON COLUMN ${quoteWithSchema(\n schemaTable,\n )}.\"${column}\" IS ${quote(comment)}`,\n values: [],\n }));\n};\n\nexport const primaryKeyToSql = (\n primaryKey: Exclude<TableData['primaryKey'], undefined>,\n) => {\n const name = primaryKey.options?.name;\n return `${name ? `CONSTRAINT \"${name}\" ` : ''}PRIMARY KEY (${joinColumns(\n primaryKey.columns,\n )})`;\n};\n\nexport const getPrimaryKeysOfTable = async (\n db: Migration,\n tableName: string,\n): Promise<{ name: string; type: string }[]> => {\n const { rows } = await db.query<{ name: string; type: string }>(\n {\n text: `SELECT\n pg_attribute.attname AS name,\n format_type(pg_attribute.atttypid, pg_attribute.atttypmod) AS type\nFROM pg_index, pg_class, pg_attribute, pg_namespace\nWHERE\n pg_class.oid = $1::regclass AND\n indrelid = pg_class.oid AND\n nspname = 'public' AND\n pg_class.relnamespace = pg_namespace.oid AND\n pg_attribute.attrelid = pg_class.oid AND\n pg_attribute.attnum = any(pg_index.indkey) AND\n indisprimary`,\n values: [tableName],\n },\n db.types,\n undefined,\n );\n\n return rows;\n};\n","import {\n ColumnsShape,\n columnTypes,\n getColumnTypes,\n getTableData,\n NoPrimaryKeyOption,\n quote,\n raw,\n Sql,\n TableData,\n} from 'pqb';\nimport {\n ColumnComment,\n ColumnsShapeCallback,\n Migration,\n runCodeUpdater,\n TableOptions,\n} from './migration';\nimport {\n addColumnComment,\n addColumnIndex,\n columnToSql,\n commentsToQuery,\n constraintToSql,\n indexesToQuery,\n primaryKeyToSql,\n} from './migrationUtils';\nimport { getSchemaAndTableFromName, quoteWithSchema } from '../common';\nimport { RakeDbAst } from '../ast';\n\nconst types = Object.assign(Object.create(columnTypes), {\n raw,\n});\n\nexport const createTable = async (\n migration: Migration,\n up: boolean,\n tableName: string,\n options: TableOptions,\n fn: ColumnsShapeCallback,\n) => {\n const shape = getColumnTypes(types, fn);\n const tableData = getTableData();\n const ast = makeAst(\n up,\n tableName,\n shape,\n tableData,\n options,\n migration.options.noPrimaryKey,\n );\n\n validatePrimaryKey(ast);\n\n const queries = astToQueries(ast);\n for (const query of queries) {\n await migration.query(query);\n }\n\n await runCodeUpdater(migration, ast);\n};\n\nconst makeAst = (\n up: boolean,\n tableName: string,\n shape: ColumnsShape,\n tableData: TableData,\n options: TableOptions,\n noPrimaryKey?: NoPrimaryKeyOption,\n): RakeDbAst.Table => {\n const shapePKeys: string[] = [];\n for (const key in shape) {\n if (shape[key].isPrimaryKey) {\n shapePKeys.push(key);\n }\n }\n\n const primaryKey = tableData.primaryKey;\n\n const [schema, table] = getSchemaAndTableFromName(tableName);\n\n return {\n type: 'table',\n action: up ? 'create' : 'drop',\n schema,\n name: table,\n shape,\n ...tableData,\n primaryKey:\n shapePKeys.length <= 1\n ? primaryKey\n : primaryKey\n ? { ...primaryKey, columns: [...shapePKeys, ...primaryKey.columns] }\n : { columns: shapePKeys },\n ...options,\n noPrimaryKey: options.noPrimaryKey ? 'ignore' : noPrimaryKey || 'error',\n };\n};\n\nconst validatePrimaryKey = (ast: RakeDbAst.Table) => {\n if (ast.noPrimaryKey !== 'ignore') {\n let hasPrimaryKey = !!ast.primaryKey?.columns?.length;\n if (!hasPrimaryKey) {\n for (const key in ast.shape) {\n if (ast.shape[key].isPrimaryKey) {\n hasPrimaryKey = true;\n break;\n }\n }\n }\n\n if (!hasPrimaryKey) {\n const message = `Table ${ast.name} has no primary key`;\n if (ast.noPrimaryKey === 'error') {\n throw new Error(message);\n } else {\n console.warn(message);\n }\n }\n }\n};\n\nconst astToQueries = (ast: RakeDbAst.Table): Sql[] => {\n if (ast.action === 'drop') {\n return [\n {\n text: `DROP TABLE ${quoteWithSchema(ast)}${\n ast.dropMode ? ` ${ast.dropMode}` : ''\n }`,\n values: [],\n },\n ];\n }\n\n const lines: string[] = [];\n const values: unknown[] = [];\n const indexes: TableData.Index[] = [];\n const comments: ColumnComment[] = [];\n\n for (const key in ast.shape) {\n const item = ast.shape[key];\n addColumnIndex(indexes, key, item);\n addColumnComment(comments, key, item);\n lines.push(`\\n ${columnToSql(key, item, values, !!ast.primaryKey)}`);\n }\n\n if (ast.primaryKey) {\n lines.push(`\\n ${primaryKeyToSql(ast.primaryKey)}`);\n }\n\n ast.foreignKeys.forEach((foreignKey) => {\n lines.push(`\\n ${constraintToSql(ast, true, foreignKey)}`);\n });\n\n indexes.push(...ast.indexes);\n\n const result: Sql[] = [\n {\n text: `CREATE TABLE ${quoteWithSchema(ast)} (${lines.join(',')}\\n)`,\n values,\n },\n ...indexesToQuery(true, ast, indexes),\n ...commentsToQuery(ast, comments),\n ];\n\n if (ast.comment) {\n result.push({\n text: `COMMENT ON TABLE ${quoteWithSchema(ast)} IS ${quote(ast.comment)}`,\n values: [],\n });\n }\n\n return result;\n};\n","import {\n ColumnType,\n resetTableData,\n getTableData,\n EmptyObject,\n emptyObject,\n TableData,\n RawExpression,\n raw,\n columnTypes,\n Sql,\n quote,\n getRaw,\n isRaw,\n} from 'pqb';\nimport {\n ChangeTableCallback,\n ChangeTableOptions,\n ColumnComment,\n DropMode,\n Migration,\n MigrationColumnTypes,\n runCodeUpdater,\n} from './migration';\nimport { RakeDbAst } from '../ast';\nimport { getSchemaAndTableFromName, quoteWithSchema } from '../common';\nimport {\n addColumnComment,\n addColumnIndex,\n columnToSql,\n commentsToQuery,\n constraintToSql,\n indexesToQuery,\n primaryKeyToSql,\n} from './migrationUtils';\n\ntype ChangeTableData = { add: TableData; drop: TableData };\nconst newChangeTableData = (): ChangeTableData => ({\n add: { indexes: [], foreignKeys: [] },\n drop: { indexes: [], foreignKeys: [] },\n});\n\nlet changeTableData = newChangeTableData();\n\nconst resetChangeTableData = () => {\n changeTableData = newChangeTableData();\n};\n\nconst mergeTableData = (a: TableData, b: TableData) => {\n if (b.primaryKey) {\n if (!a.primaryKey) {\n a.primaryKey = b.primaryKey;\n } else {\n a.primaryKey = {\n columns: [...a.primaryKey.columns, ...b.primaryKey.columns],\n options: { ...a.primaryKey.options, ...b.primaryKey.options },\n };\n }\n }\n a.indexes = [...a.indexes, ...b.indexes];\n a.foreignKeys = [...a.foreignKeys, ...b.foreignKeys];\n};\n\nfunction add(\n item: ColumnType,\n options?: { dropMode?: DropMode },\n): RakeDbAst.ChangeTableItem.Column;\nfunction add(emptyObject: EmptyObject): EmptyObject;\nfunction add(\n items: Record<string, ColumnType>,\n options?: { dropMode?: DropMode },\n): Record<string, RakeDbAst.ChangeTableItem.Column>;\nfunction add(\n item: ColumnType | EmptyObject | Record<string, ColumnType>,\n options?: { dropMode?: DropMode },\n):\n | RakeDbAst.ChangeTableItem.Column\n | EmptyObject\n | Record<string, RakeDbAst.ChangeTableItem.Column> {\n if (item instanceof ColumnType) {\n return { type: 'add', item, dropMode: options?.dropMode };\n } else if (item === emptyObject) {\n mergeTableData(changeTableData.add, getTableData());\n resetTableData();\n return emptyObject;\n } else {\n const result: Record<string, RakeDbAst.ChangeTableItem.Column> = {};\n for (const key in item) {\n result[key] = {\n type: 'add',\n item: (item as Record<string, ColumnType>)[key],\n dropMode: options?.dropMode,\n };\n }\n return result;\n }\n}\n\nconst drop = ((item, options) => {\n if (item instanceof ColumnType) {\n return { type: 'drop', item, dropMode: options?.dropMode };\n } else if (item === emptyObject) {\n mergeTableData(changeTableData.drop, getTableData());\n resetTableData();\n return emptyObject;\n } else {\n const result: Record<string, RakeDbAst.ChangeTableItem.Column> = {};\n for (const key in item) {\n result[key] = {\n type: 'drop',\n item: (item as Record<string, ColumnType>)[key],\n dropMode: options?.dropMode,\n };\n }\n return result;\n }\n}) as typeof add;\n\ntype Change = RakeDbAst.ChangeTableItem.Change & ChangeOptions;\n\ntype ChangeOptions = {\n usingUp?: RawExpression;\n usingDown?: RawExpression;\n};\n\nconst columnTypeToColumnChange = (\n item: ColumnType | Change,\n): RakeDbAst.ColumnChange => {\n if (item instanceof ColumnType) {\n const foreignKeys = item.data.foreignKeys;\n if (foreignKeys?.some((it) => 'fn' in it)) {\n throw new Error('Callback in foreignKey is not allowed in migration');\n }\n\n return {\n column: item,\n type: item.toSQL(),\n nullable: item.data.isNullable,\n primaryKey: item.isPrimaryKey,\n ...item.data,\n foreignKeys: foreignKeys as RakeDbAst.ColumnChange['foreignKeys'],\n };\n }\n\n return item.to;\n};\n\ntype TableChangeMethods = typeof tableChangeMethods;\nconst tableChangeMethods = {\n raw: raw,\n add,\n drop,\n change(\n from: ColumnType | Change,\n to: ColumnType | Change,\n options?: ChangeOptions,\n ): Change {\n return {\n type: 'change',\n from: columnTypeToColumnChange(from),\n to: columnTypeToColumnChange(to),\n ...options,\n };\n },\n default(value: unknown | RawExpression): Change {\n return { type: 'change', from: { default: null }, to: { default: value } };\n },\n nullable(): Change {\n return {\n type: 'change',\n from: { nullable: false },\n to: { nullable: true },\n };\n },\n nonNullable(): Change {\n return {\n type: 'change',\n from: { nullable: true },\n to: { nullable: false },\n };\n },\n comment(comment: string | null): Change {\n return { type: 'change', from: { comment: null }, to: { comment } };\n },\n rename(name: string): RakeDbAst.ChangeTableItem.Rename {\n return { type: 'rename', name };\n },\n};\n\nexport type TableChanger = MigrationColumnTypes & TableChangeMethods;\n\nexport type TableChangeData = Record<\n string,\n | RakeDbAst.ChangeTableItem.Column\n | RakeDbAst.ChangeTableItem.Rename\n | Change\n | EmptyObject\n>;\n\nexport const changeTable = async (\n migration: Migration,\n up: boolean,\n tableName: string,\n options: ChangeTableOptions,\n fn?: ChangeTableCallback,\n) => {\n resetTableData();\n resetChangeTableData();\n\n const tableChanger = Object.create(columnTypes) as TableChanger;\n Object.assign(tableChanger, tableChangeMethods);\n\n const changeData = fn?.(tableChanger) || {};\n\n const ast = makeAst(up, tableName, changeData, changeTableData, options);\n\n const queries = astToQueries(ast);\n for (const query of queries) {\n await migration.query(query);\n }\n\n await runCodeUpdater(migration, ast);\n};\n\nconst makeAst = (\n up: boolean,\n name: string,\n changeData: TableChangeData,\n changeTableData: ChangeTableData,\n options: ChangeTableOptions,\n): RakeDbAst.ChangeTable => {\n const { comment } = options;\n\n const shape: Record<string, RakeDbAst.ChangeTableItem> = {};\n for (const key in changeData) {\n const item = changeData[key];\n if ('type' in item) {\n if (up) {\n shape[key] =\n item.type === 'change' && item.usingUp\n ? { ...item, using: item.usingUp }\n : item;\n } else {\n if (item.type === 'rename') {\n shape[item.name] = { ...item, name: key };\n } else {\n shape[key] =\n item.type === 'add'\n ? { ...item, type: 'drop' }\n : item.type === 'drop'\n ? { ...item, type: 'add' }\n : item.type === 'change'\n ? { ...item, from: item.to, to: item.from, using: item.usingDown }\n : item;\n }\n }\n }\n }\n\n const [schema, table] = getSchemaAndTableFromName(name);\n\n return {\n type: 'changeTable',\n schema,\n name: table,\n comment: comment\n ? up\n ? Array.isArray(comment)\n ? comment[1]\n : comment\n : Array.isArray(comment)\n ? comment[0]\n : null\n : undefined,\n shape,\n ...(up\n ? changeTableData\n : { add: changeTableData.drop, drop: changeTableData.add }),\n };\n};\n\ntype PrimaryKeys = {\n columns: string[];\n change?: true;\n options?: { name?: string };\n};\n\nconst astToQueries = (ast: RakeDbAst.ChangeTable): Sql[] => {\n const result: Sql[] = [];\n\n if (ast.comment !== undefined) {\n result.push({\n text: `COMMENT ON TABLE ${quoteWithSchema(ast)} IS ${quote(ast.comment)}`,\n values: [],\n });\n }\n\n const addPrimaryKeys: PrimaryKeys = ast.add.primaryKey\n ? { ...ast.add.primaryKey }\n : {\n columns: [],\n };\n const dropPrimaryKeys: PrimaryKeys = ast.drop.primaryKey\n ? { ...ast.drop.primaryKey }\n : {\n columns: [],\n };\n\n for (const key in ast.shape) {\n const item = ast.shape[key];\n\n if (item.type === 'add') {\n if (item.item.isPrimaryKey) {\n addPrimaryKeys.columns.push(key);\n }\n } else if (item.type === 'drop') {\n if (item.item.isPrimaryKey) {\n dropPrimaryKeys.columns.push(key);\n }\n } else if (item.type === 'change') {\n if (item.from.primaryKey) {\n dropPrimaryKeys.columns.push(key);\n dropPrimaryKeys.change = true;\n }\n\n if (item.to.primaryKey) {\n addPrimaryKeys.columns.push(key);\n addPrimaryKeys.change = true;\n }\n }\n }\n\n const alterTable: string[] = [];\n const values: unknown[] = [];\n const addIndexes: TableData.Index[] = [...ast.add.indexes];\n const dropIndexes: TableData.Index[] = [...ast.drop.indexes];\n const addForeignKeys: TableData.ForeignKey[] = [...ast.add.foreignKeys];\n const dropForeignKeys: TableData.ForeignKey[] = [...ast.drop.foreignKeys];\n const comments: ColumnComment[] = [];\n\n for (const key in ast.shape) {\n const item = ast.shape[key];\n\n if (item.type === 'add') {\n addColumnIndex(addIndexes, key, item.item);\n addColumnComment(comments, key, item.item);\n\n alterTable.push(\n `ADD COLUMN ${columnToSql(\n key,\n item.item,\n values,\n addPrimaryKeys.columns.length > 1,\n )}`,\n );\n } else if (item.type === 'drop') {\n addColumnIndex(dropIndexes, key, item.item);\n\n alterTable.push(\n `DROP COLUMN \"${key}\"${item.dropMode ? ` ${item.dropMode}` : ''}`,\n );\n } else if (item.type === 'change') {\n const { from, to } = item;\n if (from.type !== to.type || from.collate !== to.collate) {\n alterTable.push(\n `ALTER COLUMN \"${key}\" TYPE ${to.type}${\n to.collate ? ` COLLATE ${quote(to.collate)}` : ''\n }${item.using ? ` USING ${getRaw(item.using, values)}` : ''}`,\n );\n }\n\n if (from.default !== to.default) {\n const value =\n typeof to.default === 'object' && to.default && isRaw(to.default)\n ? getRaw(to.default, values)\n : quote(to.default);\n\n const expr =\n value === undefined ? 'DROP DEFAULT' : `SET DEFAULT ${value}`;\n\n alterTable.push(`ALTER COLUMN \"${key}\" ${expr}`);\n }\n\n if (from.nullable !== to.nullable) {\n alterTable.push(\n `ALTER COLUMN \"${key}\" ${to.nullable ? 'DROP' : 'SET'} NOT NULL`,\n );\n }\n\n if (from.compression !== to.compression) {\n alterTable.push(\n `ALTER COLUMN \"${key}\" SET COMPRESSION ${\n to.compression || 'DEFAULT'\n }`,\n );\n }\n\n const foreignKeysLen = Math.max(\n from.foreignKeys?.length || 0,\n to.foreignKeys?.length || 0,\n );\n for (let i = 0; i < foreignKeysLen; i++) {\n const fromFkey = from.foreignKeys?.[i];\n const toFkey = to.foreignKeys?.[i];\n\n if (\n (fromFkey || toFkey) &&\n (!fromFkey ||\n !toFkey ||\n fromFkey.name !== toFkey.name ||\n fromFkey.match !== toFkey.match ||\n fromFkey.onUpdate !== toFkey.onUpdate ||\n fromFkey.onDelete !== toFkey.onDelete ||\n fromFkey.dropMode !== toFkey.dropMode ||\n fromFkey.table !== toFkey.table ||\n fromFkey.columns.join(',') !== toFkey.columns.join(','))\n ) {\n if (fromFkey) {\n dropForeignKeys.push({\n columns: [key],\n fnOrTable: fromFkey.table,\n foreignColumns: fromFkey.columns,\n options: fromFkey,\n });\n }\n\n if (toFkey) {\n addForeignKeys.push({\n columns: [key],\n fnOrTable: toFkey.table,\n foreignColumns: toFkey.columns,\n options: toFkey,\n });\n }\n }\n }\n\n const indexesLen = Math.max(\n from.indexes?.length || 0,\n to.indexes?.length || 0,\n );\n for (let i = 0; i < indexesLen; i++) {\n const fromIndex = from.indexes?.[i];\n const toIndex = to.indexes?.[i];\n\n if (\n (fromIndex || toIndex) &&\n (!fromIndex ||\n !toIndex ||\n fromIndex.collate !== toIndex.collate ||\n fromIndex.opclass !== toIndex.opclass ||\n fromIndex.order !== toIndex.order ||\n fromIndex.name !== toIndex.name ||\n fromIndex.unique !== toIndex.unique ||\n fromIndex.using !== toIndex.using ||\n fromIndex.include !== toIndex.include ||\n (Array.isArray(fromIndex.include) &&\n Array.isArray(toIndex.include) &&\n fromIndex.include.join(',') !== toIndex.include.join(',')) ||\n fromIndex.with !== toIndex.with ||\n fromIndex.tablespace !== toIndex.tablespace ||\n fromIndex.where !== toIndex.where ||\n fromIndex.dropMode !== toIndex.dropMode)\n ) {\n if (fromIndex) {\n dropIndexes.push({\n columns: [\n {\n column: key,\n ...fromIndex,\n },\n ],\n options: fromIndex,\n });\n }\n\n if (toIndex) {\n addIndexes.push({\n columns: [\n {\n column: key,\n ...toIndex,\n },\n ],\n options: toIndex,\n });\n }\n }\n }\n\n if (from.comment !== to.comment) {\n comments.push({ column: key, comment: to.comment || null });\n }\n } else if (item.type === 'rename') {\n alterTable.push(`RENAME COLUMN \"${key}\" TO \"${item.name}\"`);\n }\n }\n\n const prependAlterTable: string[] = [];\n\n if (\n ast.drop.primaryKey ||\n dropPrimaryKeys.change ||\n dropPrimaryKeys.columns.length > 1\n ) {\n const name = dropPrimaryKeys.options?.name || `${ast.name}_pkey`;\n prependAlterTable.push(`DROP CONSTRAINT \"${name}\"`);\n }\n\n prependAlterTable.push(\n ...dropForeignKeys.map(\n (foreignKey) => `\\n DROP ${constraintToSql(ast, false, foreignKey)}`,\n ),\n );\n\n alterTable.unshift(...prependAlterTable);\n\n if (\n ast.add.primaryKey ||\n addPrimaryKeys.change ||\n addPrimaryKeys.columns.length > 1\n ) {\n alterTable.push(`ADD ${primaryKeyToSql(addPrimaryKeys)}`);\n }\n\n alterTable.push(\n ...addForeignKeys.map(\n (foreignKey) => `\\n ADD ${constraintToSql(ast, true, foreignKey)}`,\n ),\n );\n\n if (alterTable.length) {\n result.push({\n text:\n `ALTER TABLE ${quoteWithSchema(ast)}` +\n `\\n ${alterTable.join(',\\n ')}`,\n values,\n });\n }\n\n result.push(...indexesToQuery(false, ast, dropIndexes));\n result.push(...indexesToQuery(true, ast, addIndexes));\n result.push(...commentsToQuery(ast, comments));\n\n return result;\n};\n","import {\n ColumnsShape,\n ColumnType,\n ColumnTypes,\n ForeignKeyOptions,\n IndexColumnOptions,\n IndexOptions,\n logParamToLogObject,\n MaybeArray,\n QueryArraysResult,\n QueryInput,\n QueryLogObject,\n QueryResult,\n QueryResultRow,\n Sql,\n TransactionAdapter,\n TypeParsers,\n raw,\n TextColumn,\n AdapterOptions,\n} from 'pqb';\nimport { createTable } from './createTable';\nimport { changeTable, TableChangeData, TableChanger } from './changeTable';\nimport {\n RakeDbConfig,\n quoteWithSchema,\n getSchemaAndTableFromName,\n} from '../common';\nimport { RakeDbAst } from '../ast';\n\nexport type DropMode = 'CASCADE' | 'RESTRICT';\n\nexport type TableOptions = {\n dropMode?: DropMode;\n comment?: string;\n noPrimaryKey?: boolean;\n};\n\ntype TextColumnCreator = () => TextColumn;\n\nexport type MigrationColumnTypes = Omit<ColumnTypes, 'text' | 'string'> & {\n text: TextColumnCreator;\n string: TextColumnCreator;\n};\n\nexport type ColumnsShapeCallback = (\n t: MigrationColumnTypes & { raw: typeof raw },\n) => ColumnsShape;\n\nexport type ChangeTableOptions = { comment?: string | [string, string] | null };\nexport type ChangeTableCallback = (t: TableChanger) => TableChangeData;\n\nexport type ColumnComment = { column: string; comment: string | null };\n\nexport type JoinTableOptions = {\n tableName?: string;\n comment?: string;\n dropMode?: DropMode;\n};\n\nexport type ExtensionOptions = {\n schema?: string;\n version?: string;\n cascade?: boolean;\n};\n\nexport class Migration extends TransactionAdapter {\n public log?: QueryLogObject;\n\n constructor(\n tx: TransactionAdapter,\n public up: boolean,\n public options: RakeDbConfig,\n public adapterOptions: AdapterOptions,\n public appCodeUpdaterCache: object,\n ) {\n super(tx, tx.client, tx.types);\n this.log = logParamToLogObject(options.logger || console, options.log);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async query<T extends QueryResultRow = any>(\n query: QueryInput,\n types: TypeParsers = this.types,\n log = this.log,\n ): Promise<QueryResult<T>> {\n return wrapWithLog(log, query, () => super.query(query, types));\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async arrays<R extends any[] = any[]>(\n query: QueryInput,\n types: TypeParsers = this.types,\n log = this.log,\n ): Promise<QueryArraysResult<R>> {\n return wrapWithLog(log, query, () => super.arrays(query, types));\n }\n\n createTable(\n tableName: string,\n options: TableOptions,\n fn: ColumnsShapeCallback,\n ): Promise<void>;\n createTable(tableName: string, fn: ColumnsShapeCallback): Promise<void>;\n createTable(\n tableName: string,\n cbOrOptions: ColumnsShapeCallback | TableOptions,\n cb?: ColumnsShapeCallback,\n ): Promise<void> {\n const options = typeof cbOrOptions === 'function' ? {} : cbOrOptions;\n const fn = (cb || cbOrOptions) as ColumnsShapeCallback;\n\n return createTable(this, this.up, tableName, options, fn);\n }\n\n dropTable(\n tableName: string,\n options: TableOptions,\n fn: ColumnsShapeCallback,\n ): Promise<void>;\n dropTable(tableName: string, fn: ColumnsShapeCallback): Promise<void>;\n dropTable(\n tableName: string,\n cbOrOptions: ColumnsShapeCallback | TableOptions,\n cb?: ColumnsShapeCallback,\n ) {\n const options = typeof cbOrOptions === 'function' ? {} : cbOrOptions;\n const fn = (cb || cbOrOptions) as ColumnsShapeCallback;\n\n return createTable(this, !this.up, tableName, options, fn);\n }\n\n changeTable(\n tableName: string,\n options: ChangeTableOptions,\n fn?: ChangeTableCallback,\n ): Promise<void>;\n changeTable(tableName: string, fn: ChangeTableCallback): Promise<void>;\n changeTable(\n tableName: string,\n cbOrOptions: ChangeTableCallback | ChangeTableOptions,\n cb?: ChangeTableCallback,\n ) {\n const [fn, options] =\n typeof cbOrOptions === 'function' ? [cbOrOptions, {}] : [cb, cbOrOptions];\n\n return changeTable(this, this.up, tableName, options, fn);\n }\n\n async renameTable(from: string, to: string): Promise<void> {\n const [fromSchema, f] = getSchemaAndTableFromName(this.up ? from : to);\n const [toSchema, t] = getSchemaAndTableFromName(this.up ? to : from);\n const ast: RakeDbAst.RenameTable = {\n type: 'renameTable',\n fromSchema,\n from: f,\n toSchema,\n to: t,\n };\n\n await this.query(\n `ALTER TABLE ${quoteWithSchema({\n schema: ast.fromSchema,\n name: ast.from,\n })} RENAME TO ${quoteWithSchema({\n schema: ast.toSchema,\n name: ast.to,\n })}`,\n );\n\n await runCodeUpdater(this, ast);\n }\n\n addColumn(\n tableName: string,\n columnName: string,\n fn: (t: MigrationColumnTypes) => ColumnType,\n ) {\n return addColumn(this, this.up, tableName, columnName, fn);\n }\n\n dropColumn(\n tableName: string,\n columnName: string,\n fn: (t: MigrationColumnTypes) => ColumnType,\n ) {\n return addColumn(this, !this.up, tableName, columnName, fn);\n }\n\n addIndex(\n tableName: string,\n columns: MaybeArray<string | IndexColumnOptions>,\n options?: IndexOptions,\n ) {\n return addIndex(this, this.up, tableName, columns, options);\n }\n\n dropIndex(\n tableName: string,\n columns: MaybeArray<string | IndexColumnOptions>,\n options?: IndexOptions,\n ) {\n return addIndex(this, !this.up, tableName, columns, options);\n }\n\n addForeignKey(\n tableName: string,\n columns: [string, ...string[]],\n foreignTable: string,\n foreignColumns: [string, ...string[]],\n options?: ForeignKeyOptions,\n ) {\n return addForeignKey(\n this,\n this.up,\n tableName,\n columns,\n foreignTable,\n foreignColumns,\n options,\n );\n }\n\n dropForeignKey(\n tableName: string,\n columns: [string, ...string[]],\n foreignTable: string,\n foreignColumns: [string, ...string[]],\n options?: ForeignKeyOptions,\n ) {\n return addForeignKey(\n this,\n !this.up,\n tableName,\n columns,\n foreignTable,\n foreignColumns,\n options,\n );\n }\n\n addPrimaryKey(\n tableName: string,\n columns: string[],\n options?: { name?: string },\n ) {\n return addPrimaryKey(this, this.up, tableName, columns, options);\n }\n\n dropPrimaryKey(\n tableName: string,\n columns: string[],\n options?: { name?: string },\n ) {\n return addPrimaryKey(this, !this.up, tableName, columns, options);\n }\n\n renameColumn(tableName: string, from: string, to: string) {\n return this.changeTable(tableName, (t) => ({\n [from]: t.rename(to),\n }));\n }\n\n createSchema(schemaName: string) {\n return createSchema(this, this.up, schemaName);\n }\n\n dropSchema(schemaName: string) {\n return createSchema(this, !this.up, schemaName);\n }\n\n createExtension(\n name: string,\n options: ExtensionOptions & { ifNotExists?: boolean } = {},\n ) {\n return createExtension(this, this.up, name, options);\n }\n\n dropExtension(\n name: string,\n options: { ifExists?: boolean; cascade?: boolean } = {},\n ) {\n return createExtension(this, !this.up, name, options);\n }\n\n async tableExists(tableName: string) {\n return queryExists(this, {\n text: `SELECT 1 FROM \"information_schema\".\"tables\" WHERE \"table_name\" = $1`,\n values: [tableName],\n });\n }\n\n async columnExists(tableName: string, columnName: string): Promise<boolean> {\n return queryExists(this, {\n text: `SELECT 1 FROM \"information_schema\".\"columns\" WHERE \"table_name\" = $1 AND \"column_name\" = $2`,\n values: [tableName, columnName],\n });\n }\n\n async constraintExists(constraintName: string): Promise<boolean> {\n return queryExists(this, {\n text: `SELECT 1 FROM \"information_schema\".\"table_constraints\" WHERE \"constraint_name\" = $1`,\n values: [constraintName],\n });\n }\n}\n\nconst wrapWithLog = async <Result>(\n log: QueryLogObject | undefined,\n query: QueryInput,\n fn: () => Promise<Result>,\n): Promise<Result> => {\n if (!log) {\n return fn();\n } else {\n const sql = (\n typeof query === 'string'\n ? { text: query, values: [] }\n : query.values\n ? query\n : { ...query, values: [] }\n ) as Sql;\n\n const logData = log.beforeQuery(sql);\n\n try {\n const result = await fn();\n log.afterQuery(sql, logData);\n return result;\n } catch (err) {\n log.onError(err as Error, sql, logData);\n throw err;\n }\n }\n};\n\nconst addColumn = (\n migration: Migration,\n up: boolean,\n tableName: string,\n columnName: string,\n fn: (t: MigrationColumnTypes) => ColumnType,\n) => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n [columnName]: t.add(fn(t)),\n }));\n};\n\nconst addIndex = (\n migration: Migration,\n up: boolean,\n tableName: string,\n columns: MaybeArray<string | IndexColumnOptions>,\n options?: IndexOptions,\n) => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n ...t.add(t.index(columns, options)),\n }));\n};\n\nconst addForeignKey = (\n migration: Migration,\n up: boolean,\n tableName: string,\n columns: [string, ...string[]],\n foreignTable: string,\n foreignColumns: [string, ...string[]],\n options?: ForeignKeyOptions,\n) => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n ...t.add(t.foreignKey(columns, foreignTable, foreignColumns, options)),\n }));\n};\n\nconst addPrimaryKey = (\n migration: Migration,\n up: boolean,\n tableName: string,\n columns: string[],\n options?: { name?: string },\n) => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n ...t.add(t.primaryKey(columns, options)),\n }));\n};\n\nconst createSchema = async (\n migration: Migration,\n up: boolean,\n name: string,\n) => {\n const ast: RakeDbAst.Schema = {\n type: 'schema',\n action: up ? 'create' : 'drop',\n name,\n };\n\n await migration.query(\n `${ast.action === 'create' ? 'CREATE' : 'DROP'} SCHEMA \"${name}\"`,\n );\n\n await runCodeUpdater(migration, ast);\n};\n\nconst createExtension = async (\n migration: Migration,\n up: boolean,\n name: string,\n options: ExtensionOptions & {\n checkExists?: boolean;\n },\n) => {\n const ast: RakeDbAst.Extension = {\n type: 'extension',\n action: up ? 'create' : 'drop',\n name,\n ...options,\n };\n\n let query;\n if (ast.action === 'drop') {\n query = `DROP EXTENSION${ast.ifNotExists ? ' IF EXISTS' : ''} \"${\n ast.name\n }\"${ast.cascade ? ' CASCADE' : ''}`;\n } else {\n query = `CREATE EXTENSION${ast.ifExists ? ' IF NOT EXISTS' : ''} \"${\n ast.name\n }\"${ast.schema ? ` SCHEMA \"${ast.schema}\"` : ''}${\n ast.version ? ` VERSION '${ast.version}'` : ''\n }${ast.cascade ? ' CASCADE' : ''}`;\n }\n\n await migration.query(query);\n\n await runCodeUpdater(migration, ast);\n};\n\nconst queryExists = (\n db: Migration,\n sql: { text: string; values: unknown[] },\n) => {\n return db.query(sql).then(({ rowCount }) => rowCount > 0);\n};\n\nexport const runCodeUpdater = (migration: Migration, ast: RakeDbAst) => {\n return migration.options.appCodeUpdater?.({\n ast,\n options: migration.adapterOptions,\n cache: migration.appCodeUpdaterCache,\n });\n};\n","import { Adapter, AdapterOptions, MaybeArray, toArray } from 'pqb';\nimport {\n createSchemaMigrations,\n getMigrationFiles,\n RakeDbConfig,\n MigrationFile,\n quoteWithSchema,\n} from '../common';\nimport {\n getCurrentPromise,\n setCurrentMigrationUp,\n setCurrentMigration,\n ChangeCallback,\n change,\n getCurrentChangeCallback,\n} from '../migration/change';\nimport { Migration } from '../migration/migration';\n\nconst migrateOrRollback = async (\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig,\n args: string[],\n up: boolean,\n) => {\n config = { ...config };\n const files = await getMigrationFiles(config, up);\n\n let count = up ? Infinity : 1;\n let argI = 0;\n const num = args[0] === 'all' ? Infinity : parseInt(args[0]);\n if (!isNaN(num)) {\n argI++;\n count = num;\n }\n\n const arg = args[argI];\n if (arg === '--code') {\n config.useCodeUpdater = args[argI + 1] !== 'false';\n }\n\n if (!config.useCodeUpdater) delete config.appCodeUpdater;\n\n const appCodeUpdaterCache = {};\n\n for (const opts of toArray(options)) {\n const db = new Adapter(opts);\n const migratedVersions = await getMigratedVersionsMap(db, config);\n try {\n for (const file of files) {\n if (\n (up && migratedVersions[file.version]) ||\n (!up && !migratedVersions[file.version])\n ) {\n continue;\n }\n\n if (count-- <= 0) break;\n\n await processMigration(db, up, file, config, opts, appCodeUpdaterCache);\n config.logger?.log(`${file.path} ${up ? 'migrated' : 'rolled back'}`);\n }\n } finally {\n await db.close();\n }\n // use appCodeUpdater only for the first provided options\n delete config.appCodeUpdater;\n }\n};\n\nconst changeCache: Record<string, ChangeCallback | undefined> = {};\n\nconst processMigration = async (\n db: Adapter,\n up: boolean,\n file: MigrationFile,\n config: RakeDbConfig,\n options: AdapterOptions,\n appCodeUpdaterCache: object,\n) => {\n await db.transaction(async (tx) => {\n const db = new Migration(tx, up, config, options, appCodeUpdaterCache);\n setCurrentMigration(db);\n setCurrentMigrationUp(up);\n\n const callback = changeCache[file.path];\n if (callback) {\n change(callback);\n } else {\n config.requireTs(file.path);\n changeCache[file.path] = getCurrentChangeCallback();\n }\n\n await getCurrentPromise();\n await (up ? saveMigratedVersion : removeMigratedVersion)(\n db,\n file.version,\n config,\n );\n });\n};\n\nconst saveMigratedVersion = async (\n db: Adapter,\n version: string,\n config: RakeDbConfig,\n) => {\n await db.query(\n `INSERT INTO ${quoteWithSchema({\n name: config.migrationsTable,\n })} VALUES ('${version}')`,\n );\n};\n\nconst removeMigratedVersion = async (\n db: Adapter,\n version: string,\n config: RakeDbConfig,\n) => {\n await db.query(\n `DELETE FROM ${quoteWithSchema({\n name: config.migrationsTable,\n })} WHERE version = '${version}'`,\n );\n};\n\nconst getMigratedVersionsMap = async (\n db: Adapter,\n config: RakeDbConfig,\n): Promise<Record<string, boolean>> => {\n try {\n const result = await db.arrays<[string]>(\n `SELECT * FROM ${quoteWithSchema({ name: config.migrationsTable })}`,\n );\n return Object.fromEntries(result.rows.map((row) => [row[0], true]));\n } catch (err) {\n if ((err as Record<string, unknown>).code === '42P01') {\n await createSchemaMigrations(db, config);\n return {};\n }\n throw err;\n }\n};\n\nexport const migrate = (\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig,\n args: string[] = [],\n) => migrateOrRollback(options, config, args, true);\n\nexport const rollback = (\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig,\n args: string[] = [],\n) => migrateOrRollback(options, config, args, false);\n","import { Adapter, AdapterOptions, MaybeArray, toArray } from 'pqb';\nimport {\n getDatabaseAndUserFromOptions,\n setAdminCredentialsToOptions,\n setAdapterOptions,\n createSchemaMigrations,\n RakeDbConfig,\n migrationConfigDefaults,\n} from '../common';\nimport { migrate } from './migrateOrRollback';\n\nconst execute = async (\n options: AdapterOptions,\n sql: string,\n): Promise<'ok' | 'already' | 'forbidden' | { error: unknown }> => {\n const db = new Adapter(options);\n try {\n await db.query(sql);\n return 'ok';\n } catch (error) {\n const err = error as Record<string, unknown>;\n if (err.code === '42P04' || err.code === '3D000') {\n return 'already';\n } else if (err.code === '42501') {\n return 'forbidden';\n } else {\n return { error };\n }\n } finally {\n await db.close();\n }\n};\n\nconst createOrDrop = async (\n options: AdapterOptions,\n adminOptions: AdapterOptions,\n config: RakeDbConfig,\n args: {\n sql(params: { database: string; user: string }): string;\n successMessage(params: { database: string }): string;\n alreadyMessage(params: { database: string }): string;\n createVersionsTable?: boolean;\n },\n) => {\n const params = getDatabaseAndUserFromOptions(options);\n\n const result = await execute(\n setAdapterOptions(adminOptions, { database: 'postgres' }),\n args.sql(params),\n );\n if (result === 'ok') {\n console.log(args.successMessage(params));\n } else if (result === 'already') {\n console.log(args.alreadyMessage(params));\n } else if (result === 'forbidden') {\n await createOrDrop(\n options,\n await setAdminCredentialsToOptions(options),\n config,\n args,\n );\n return;\n } else {\n throw result.error;\n }\n\n if (!args.createVersionsTable) return;\n\n const db = new Adapter(options);\n await createSchemaMigrations(db, config);\n await db.close();\n};\n\nexport const createDb = async (\n arg: MaybeArray<AdapterOptions>,\n config: RakeDbConfig,\n) => {\n for (const options of toArray(arg)) {\n await createOrDrop(options, options, config, {\n sql({ database, user }) {\n return `CREATE DATABASE \"${database}\" OWNER \"${user}\"`;\n },\n successMessage({ database }) {\n return `Database ${database} successfully created`;\n },\n alreadyMessage({ database }) {\n return `Database ${database} already exists`;\n },\n createVersionsTable: true,\n });\n }\n};\n\nexport const dropDb = async (arg: MaybeArray<AdapterOptions>) => {\n for (const options of toArray(arg)) {\n await createOrDrop(options, options, migrationConfigDefaults, {\n sql({ database }) {\n return `DROP DATABASE \"${database}\"`;\n },\n successMessage({ database }) {\n return `Database ${database} was successfully dropped`;\n },\n alreadyMessage({ database }) {\n return `Database ${database} does not exist`;\n },\n });\n }\n};\n\nexport const resetDb = async (\n arg: MaybeArray<AdapterOptions>,\n config: RakeDbConfig,\n) => {\n await dropDb(arg);\n await createDb(arg, config);\n await migrate(arg, config);\n};\n","import {\n getFirstWordAndRest,\n getTextAfterFrom,\n getTextAfterTo,\n RakeDbConfig,\n} from '../common';\nimport { mkdir, writeFile } from 'fs/promises';\nimport path from 'path';\n\nexport const writeMigrationFile = async (\n config: RakeDbConfig,\n name: string,\n content: string,\n) => {\n await mkdir(path.resolve(config.migrationsPath), { recursive: true });\n\n const filePath = path.resolve(\n config.migrationsPath,\n `${makeFileTimeStamp()}_${name}.ts`,\n );\n await writeFile(filePath, content);\n console.log(`Created ${filePath}`);\n};\n\nexport const generate = async (config: RakeDbConfig, args: string[]) => {\n const name = args[0];\n if (!name) throw new Error('Migration name is missing');\n\n await writeMigrationFile(config, name, makeContent(name, args.slice(1)));\n};\n\nconst makeFileTimeStamp = () => {\n const now = new Date();\n return [\n now.getUTCFullYear(),\n now.getUTCMonth() + 1,\n now.getUTCDate(),\n now.getUTCHours(),\n now.getUTCMinutes(),\n now.getUTCSeconds(),\n ]\n .map((value) => (value < 10 ? `0${value}` : value))\n .join('');\n};\n\nconst makeContent = (name: string, args: string[]): string => {\n let content = `import { change } from 'rake-db';\\n\\nchange(async (db) => {`;\n\n const [first, rest] = getFirstWordAndRest(name);\n if (rest) {\n if (first === 'create' || first === 'drop') {\n content += `\\n await db.${\n first === 'create' ? 'createTable' : 'dropTable'\n }('${rest}', (t) => ({`;\n content += makeColumnsContent(args);\n content += '\\n }));';\n } else if (first === 'change') {\n content += `\\n await db.changeTable('${rest}', (t) => ({`;\n content += '\\n }));';\n } else if (first === 'add' || first === 'remove') {\n const table =\n first === 'add' ? getTextAfterTo(rest) : getTextAfterFrom(rest);\n content += `\\n await db.changeTable(${\n table ? `'${table}'` : 'tableName'\n }, (t) => ({`;\n content += makeColumnsContent(args, first);\n content += '\\n }));';\n }\n }\n\n return content + '\\n});\\n';\n};\n\nconst makeColumnsContent = (args: string[], method?: string) => {\n let content = '';\n const prepend = method ? `t.${method}(` : '';\n const append = method ? ')' : '';\n\n for (const arg of args) {\n const [name, def] = arg.split(':');\n if (!def) {\n throw new Error(\n `Column argument should be similar to name:type, name:type.method1.method2, name:type(arg).method(arg). Example: name:varchar(20).nullable. Received: ${arg}`,\n );\n }\n\n const methods = def\n .split('.')\n .map((method) => (method.endsWith(')') ? `.${method}` : `.${method}()`));\n content += `\\n ${name}: ${prepend}t${methods.join('')}${append},`;\n }\n return content;\n};\n","import { Adapter } from 'pqb';\n\nexport namespace DbStructure {\n export type Table = {\n schemaName: string;\n name: string;\n comment?: string;\n };\n\n export type View = {\n schemaName: string;\n name: string;\n };\n\n export type Procedure = {\n schemaName: string;\n name: string;\n returnSet: boolean;\n returnType: string;\n kind: string;\n isTrigger: boolean;\n types: string[];\n argTypes: string[];\n argModes: ('i' | 'o')[];\n argNames?: string[];\n };\n\n export type Column = {\n schemaName: string;\n tableName: string;\n name: string;\n type: string;\n maxChars?: number;\n numericPrecision?: number;\n numericScale?: number;\n dateTimePrecision?: number;\n default?: string;\n isNullable: boolean;\n collation?: string;\n compression?: 'p' | 'l'; // p for pglz, l for lz4\n comment?: string;\n };\n\n export type Index = {\n schemaName: string;\n tableName: string;\n name: string;\n using: string;\n isUnique: boolean;\n columns: (({ column: string } | { expression: string }) & {\n collate?: string;\n opclass?: string;\n order?: string;\n })[];\n include?: string[];\n with?: string;\n tablespace?: string;\n where?: string;\n };\n\n // a = no action, r = restrict, c = cascade, n = set null, d = set default\n type ForeignKeyAction = 'a' | 'r' | 'c' | 'n' | 'd';\n\n export type ForeignKey = {\n schemaName: string;\n tableName: string;\n foreignTableSchemaName: string;\n foreignTableName: string;\n name: string;\n columnNames: string[];\n foreignColumnNames: string[];\n match: 'f' | 'p' | 's'; // FULL | PARTIAL | SIMPLE\n onUpdate: ForeignKeyAction;\n onDelete: ForeignKeyAction;\n };\n\n export type PrimaryKey = {\n schemaName: string;\n tableName: string;\n name: string;\n columnNames: string[];\n };\n\n export type Trigger = {\n schemaName: string;\n tableName: string;\n triggerSchema: string;\n name: string;\n events: string[];\n activation: string;\n condition?: string;\n definition: string;\n };\n\n export type Extension = {\n schemaName: string;\n name: string;\n version?: string;\n };\n}\n\nconst filterSchema = (table: string) =>\n `${table} !~ '^pg_' AND ${table} != 'information_schema'`;\n\nexport class DbStructure {\n constructor(private db: Adapter) {}\n\n async getSchemas(): Promise<string[]> {\n const { rows } = await this.db.arrays<[string]>(\n `SELECT n.nspname \"name\"\nFROM pg_catalog.pg_namespace n\nWHERE ${filterSchema('n.nspname')}\nORDER BY \"name\"`,\n );\n return rows.flat();\n }\n\n async getTables() {\n const { rows } = await this.db.query<DbStructure.Table>(\n `SELECT\n nspname AS \"schemaName\",\n relname AS \"name\",\n obj_description(c.oid) AS comment\nFROM pg_class c\nJOIN pg_catalog.pg_namespace n ON n.oid = relnamespace\nWHERE relkind = 'r'\n AND ${filterSchema('nspname')}\nORDER BY relname`,\n );\n return rows;\n }\n\n async getViews() {\n const { rows } = await this.db.query<DbStructure.View[]>(\n `SELECT\n table_schema \"schemaName\",\n table_name \"name\"\nFROM information_schema.tables\nWHERE table_type = 'VIEW'\n AND ${filterSchema('table_schema')}\nORDER BY table_name`,\n );\n return rows;\n }\n\n async getProcedures() {\n const { rows } = await this.db.query<DbStructure.Procedure[]>(\n `SELECT\n n.nspname AS \"schemaName\",\n proname AS name,\n proretset AS \"returnSet\",\n (\n SELECT typname FROM pg_type WHERE oid = prorettype\n ) AS \"returnType\",\n prokind AS \"kind\",\n coalesce((\n SELECT true FROM information_schema.triggers\n WHERE n.nspname = trigger_schema AND trigger_name = proname\n LIMIT 1\n ), false) AS \"isTrigger\",\n coalesce((\n SELECT json_agg(pg_type.typname)\n FROM unnest(coalesce(proallargtypes, proargtypes)) typeId\n JOIN pg_type ON pg_type.oid = typeId\n ), '[]') AS \"types\",\n coalesce(to_json(proallargtypes::int[]), to_json(proargtypes::int[])) AS \"argTypes\",\n coalesce(to_json(proargmodes), '[]') AS \"argModes\",\n to_json(proargnames) AS \"argNames\"\nFROM pg_proc p\nJOIN pg_namespace n ON p.pronamespace = n.oid\nWHERE ${filterSchema('n.nspname')}`,\n );\n return rows;\n }\n\n async getColumns() {\n const { rows } = await this.db.query<DbStructure.Column>(\n `SELECT\n table_schema \"schemaName\",\n table_name \"tableName\",\n column_name \"name\",\n udt_name \"type\",\n character_maximum_length AS \"maxChars\",\n numeric_precision AS \"numericPrecision\",\n numeric_scale AS \"numericScale\",\n datetime_precision AS \"dateTimePrecision\",\n column_default \"default\",\n is_nullable::boolean \"isNullable\",\n collation_name AS \"collation\",\n NULLIF(a.attcompression, '') AS compression,\n pgd.description AS \"comment\"\nFROM information_schema.columns c\nLEFT JOIN pg_catalog.pg_statio_all_tables AS st\n ON c.table_schema = st.schemaname\n AND c.table_name = st.relname\nLEFT JOIN pg_catalog.pg_description pgd\n ON pgd.objoid = st.relid\n AND pgd.objsubid = c.ordinal_position\nLEFT JOIN pg_catalog.pg_attribute a\n ON a.attrelid = st.relid\n AND a.attnum = c.ordinal_position\nWHERE ${filterSchema('table_schema')}\nORDER BY c.ordinal_position`,\n );\n return rows;\n }\n\n async getIndexes() {\n const { rows } = await this.db.query<DbStructure.Index>(\n `SELECT\n n.nspname \"schemaName\",\n t.relname \"tableName\",\n ic.relname \"name\",\n am.amname AS \"using\",\n i.indisunique \"isUnique\",\n (\n SELECT json_agg(\n (\n CASE WHEN t.e = 0\n THEN jsonb_build_object('expression', pg_get_indexdef(i.indexrelid, t.i::int4, false))\n ELSE jsonb_build_object('column', (\n (\n SELECT attname\n FROM pg_catalog.pg_attribute\n WHERE attrelid = i.indrelid\n AND attnum = t.e\n )\n ))\n END\n ) || (\n CASE WHEN i.indcollation[t.i - 1] = 0\n THEN '{}'::jsonb\n ELSE (\n SELECT (\n CASE WHEN collname = 'default'\n THEN '{}'::jsonb\n ELSE jsonb_build_object('collate', collname)\n END\n )\n FROM pg_catalog.pg_collation\n WHERE oid = i.indcollation[t.i - 1]\n )\n END\n ) || (\n SELECT\n CASE WHEN opcdefault AND attoptions IS NULL\n THEN '{}'::jsonb\n ELSE jsonb_build_object(\n 'opclass', opcname || COALESCE('(' || array_to_string(attoptions, ', ') || ')', '')\n )\n END\n FROM pg_opclass\n LEFT JOIN pg_attribute\n ON attrelid = i.indexrelid\n AND attnum = t.i\n WHERE oid = i.indclass[t.i - 1]\n ) || (\n CASE WHEN i.indoption[t.i - 1] = 0\n THEN '{}'::jsonb\n ELSE jsonb_build_object(\n 'order',\n CASE\n WHEN i.indoption[t.i - 1] = 1 THEN 'DESC NULLS LAST'\n WHEN i.indoption[t.i - 1] = 2 THEN 'ASC NULLS FIRST'\n WHEN i.indoption[t.i - 1] = 3 THEN 'DESC'\n ELSE NULL\n END\n )\n END\n )\n )\n FROM unnest(i.indkey[:indnkeyatts - 1]) WITH ORDINALITY AS t(e, i)\n ) \"columns\",\n (\n SELECT json_agg(\n (\n SELECT attname\n FROM pg_catalog.pg_attribute\n WHERE attrelid = i.indrelid\n AND attnum = j.e\n )\n )\n FROM unnest(i.indkey[indnkeyatts:]) AS j(e)\n ) AS \"include\",\n NULLIF(pg_catalog.array_to_string(\n ic.reloptions || array(SELECT 'toast.' || x FROM pg_catalog.unnest(tc.reloptions) x),\n ', '\n ), '') AS \"with\",\n (\n SELECT tablespace\n FROM pg_indexes\n WHERE schemaname = n.nspname\n AND indexname = ic.relname\n ) AS tablespace,\n pg_get_expr(i.indpred, i.indrelid) AS \"where\"\nFROM pg_index i\nJOIN pg_class t ON t.oid = i.indrelid\nJOIN pg_namespace n ON n.oid = t.relnamespace\nJOIN pg_class ic ON ic.oid = i.indexrelid\nJOIN pg_am am ON am.oid = ic.relam\nLEFT JOIN pg_catalog.pg_class tc ON (ic.reltoastrelid = tc.oid)\nWHERE ${filterSchema('n.nspname')}\n AND NOT i.indisprimary\nORDER BY ic.relname`,\n );\n return rows;\n }\n\n async getForeignKeys() {\n const { rows } = await this.db.query<DbStructure.ForeignKey>(\n `SELECT\n s.nspname AS \"schemaName\",\n t.relname AS \"tableName\",\n fs.nspname AS \"foreignTableSchemaName\",\n ft.relname AS \"foreignTableName\",\n c.conname AS \"name\",\n (\n SELECT json_agg(ccu.column_name)\n FROM information_schema.key_column_usage ccu\n WHERE ccu.constraint_name = c.conname\n AND ccu.table_schema = cs.nspname\n ) AS \"columnNames\",\n (\n SELECT json_agg(ccu.column_name)\n FROM information_schema.constraint_column_usage ccu\n WHERE ccu.constraint_name = c.conname\n AND ccu.table_schema = cs.nspname\n ) AS \"foreignColumnNames\",\n c.confmatchtype AS match,\n c.confupdtype AS \"onUpdate\",\n c.confdeltype AS \"onDelete\"\nFROM pg_catalog.pg_constraint c\nJOIN pg_class t ON t.oid = conrelid\nJOIN pg_catalog.pg_namespace s ON s.oid = t.relnamespace\nJOIN pg_class ft ON ft.oid = confrelid\nJOIN pg_catalog.pg_namespace fs ON fs.oid = ft.relnamespace\nJOIN pg_catalog.pg_namespace cs ON cs.oid = c.connamespace\nWHERE contype = 'f'\nORDER BY c.conname`,\n );\n return rows;\n }\n\n async getPrimaryKeys() {\n const { rows } = await this.db.query<DbStructure.PrimaryKey>(\n `SELECT tc.table_schema AS \"schemaName\",\n tc.table_name AS \"tableName\",\n tc.constraint_name AS \"name\",\n json_agg(ccu.column_name) \"columnNames\"\nFROM information_schema.table_constraints tc\nJOIN information_schema.constraint_column_usage ccu\n ON ccu.constraint_name = tc.constraint_name\n AND ccu.table_schema = tc.table_schema\nWHERE tc.constraint_type = 'PRIMARY KEY'\n AND ${filterSchema('tc.table_schema')}\nGROUP BY \"schemaName\", \"tableName\", \"name\"\nORDER BY \"name\"`,\n );\n return rows;\n }\n\n async getTriggers() {\n const { rows } = await this.db.query<DbStructure.Trigger>(\n `SELECT event_object_schema AS \"schemaName\",\n event_object_table AS \"tableName\",\n trigger_schema AS \"triggerSchema\",\n trigger_name AS name,\n json_agg(event_manipulation) AS events,\n action_timing AS activation,\n action_condition AS condition,\n action_statement AS definition\nFROM information_schema.triggers\nWHERE ${filterSchema('event_object_schema')}\nGROUP BY event_object_schema, event_object_table, trigger_schema, trigger_name, action_timing, action_condition, action_statement\nORDER BY trigger_name`,\n );\n return rows;\n }\n\n async getExtensions() {\n const { rows } = await this.db.query<DbStructure.Extension>(\n `SELECT\n nspname AS \"schemaName\",\n extname AS \"name\",\n extversion AS version\nFROM pg_extension\nJOIN pg_catalog.pg_namespace n ON n.oid = extnamespace\n AND ${filterSchema('n.nspname')}`,\n );\n return rows;\n }\n}\n","import { DbStructure } from './dbStructure';\nimport { RakeDbAst } from '../ast';\nimport {\n columnsByType,\n ColumnsShape,\n ForeignKeyOptions,\n instantiateColumn,\n singleQuote,\n} from 'pqb';\nimport { getForeignKeyName, getIndexName } from '../migration/migrationUtils';\n\nconst matchMap = {\n s: undefined,\n f: 'FULL',\n p: 'PARTIAL',\n};\n\nconst fkeyActionMap = {\n a: undefined, // default\n r: 'RESTRICT',\n c: 'CASCADE',\n n: 'SET NULL',\n d: 'SET DEFAULT',\n};\n\nexport const structureToAst = async (db: DbStructure): Promise<RakeDbAst[]> => {\n const ast: RakeDbAst[] = [];\n\n const [\n schemas,\n tables,\n allColumns,\n allPrimaryKeys,\n allIndexes,\n allForeignKeys,\n extensions,\n ] = await Promise.all([\n db.getSchemas(),\n db.getTables(),\n db.getColumns(),\n db.getPrimaryKeys(),\n db.getIndexes(),\n db.getForeignKeys(),\n db.getExtensions(),\n ]);\n\n for (const name of schemas) {\n if (name === 'public') continue;\n\n ast.push({\n type: 'schema',\n action: 'create',\n name,\n });\n }\n\n for (const table of tables) {\n const { schemaName, name } = table;\n\n if (name === 'schemaMigrations') continue;\n\n const belongsToTable = makeBelongsToTable(schemaName, name);\n\n const columns = allColumns.filter(belongsToTable);\n const primaryKey = allPrimaryKeys.find(belongsToTable);\n const tableIndexes = allIndexes.filter(belongsToTable);\n const tableForeignKeys = allForeignKeys.filter(belongsToTable);\n\n const shape: ColumnsShape = {};\n for (let item of columns) {\n const isSerial = getIsSerial(item);\n if (isSerial) {\n item = { ...item, default: undefined };\n }\n\n const klass = columnsByType[getColumnType(item, isSerial)];\n if (!klass) {\n throw new Error(`Column type \\`${item.type}\\` is not supported`);\n }\n\n let column = instantiateColumn(klass, item);\n\n if (\n primaryKey?.columnNames.length === 1 &&\n primaryKey?.columnNames[0] === item.name\n ) {\n column = column.primaryKey();\n }\n\n const indexes = tableIndexes.filter(\n (it) =>\n it.columns.length === 1 &&\n 'column' in it.columns[0] &&\n it.columns[0].column === item.name,\n );\n for (const index of indexes) {\n const options = index.columns[0];\n column = column.index({\n collate: options.collate,\n opclass: options.opclass,\n order: options.order,\n name:\n index.name !== getIndexName(name, index.columns)\n ? index.name\n : undefined,\n using: index.using === 'btree' ? undefined : index.using,\n unique: index.isUnique,\n include: index.include,\n with: index.with,\n tablespace: index.tablespace,\n where: index.where,\n });\n }\n\n const foreignKeys = tableForeignKeys.filter(\n (it) => it.columnNames.length === 1 && it.columnNames[0] === item.name,\n );\n for (const foreignKey of foreignKeys) {\n column = column.foreignKey(\n foreignKey.foreignTableName,\n foreignKey.foreignColumnNames[0],\n {\n name:\n foreignKey.name &&\n foreignKey.name !==\n getForeignKeyName(name, foreignKey.columnNames)\n ? foreignKey.name\n : undefined,\n match: matchMap[foreignKey.match],\n onUpdate: fkeyActionMap[foreignKey.onUpdate],\n onDelete: fkeyActionMap[foreignKey.onDelete],\n } as ForeignKeyOptions,\n );\n }\n\n shape[item.name] = column;\n }\n\n ast.push({\n type: 'table',\n action: 'create',\n schema: schemaName === 'public' ? undefined : schemaName,\n comment: table.comment,\n name: name,\n shape,\n noPrimaryKey: primaryKey ? 'error' : 'ignore',\n primaryKey:\n primaryKey && primaryKey.columnNames.length > 1\n ? {\n columns: primaryKey.columnNames,\n options:\n primaryKey.name === `${name}_pkey`\n ? undefined\n : { name: primaryKey.name },\n }\n : undefined,\n indexes: tableIndexes\n .filter(\n (index) =>\n index.columns.length > 1 ||\n index.columns.some((it) => 'expression' in it),\n )\n .map((index) => ({\n columns: index.columns.map((it) => ({\n ...('column' in it\n ? { column: it.column }\n : { expression: it.expression }),\n collate: it.collate,\n opclass: it.opclass,\n order: it.order,\n })),\n options: {\n name:\n index.name !== getIndexName(name, index.columns)\n ? index.name\n : undefined,\n using: index.using === 'btree' ? undefined : index.using,\n unique: index.isUnique,\n include: index.include,\n with: index.with,\n tablespace: index.tablespace,\n where: index.where,\n },\n })),\n foreignKeys: tableForeignKeys\n .filter((it) => it.columnNames.length > 1)\n .map((it) => ({\n columns: it.columnNames,\n fnOrTable: it.foreignTableName,\n foreignColumns: it.foreignColumnNames,\n options: {\n name:\n it.name && it.name !== getForeignKeyName(name, it.columnNames)\n ? it.name\n : undefined,\n match: matchMap[it.match],\n onUpdate: fkeyActionMap[it.onUpdate],\n onDelete: fkeyActionMap[it.onDelete],\n } as ForeignKeyOptions,\n })),\n });\n }\n\n for (const it of extensions) {\n ast.push({\n type: 'extension',\n action: 'create',\n name: it.name,\n schema: it.schemaName === 'public' ? undefined : it.schemaName,\n version: it.version,\n });\n }\n\n return ast;\n};\n\nconst makeBelongsToTable =\n (schema: string | undefined, table: string) =>\n (item: { schemaName: string; tableName: string }) =>\n item.schemaName === schema && item.tableName === table;\n\nconst getIsSerial = (item: DbStructure.Column) => {\n if (item.type === 'int2' || item.type === 'int4' || item.type === 'int8') {\n const { default: def, schemaName, tableName, name } = item;\n const seq = `${tableName}_${name}_seq`;\n if (\n def &&\n (def === `nextval(${singleQuote(`${seq}`)}::regclass)` ||\n def === `nextval(${singleQuote(`\"${seq}\"`)}::regclass)` ||\n def === `nextval(${singleQuote(`${schemaName}.${seq}`)}::regclass)` ||\n def === `nextval(${singleQuote(`\"${schemaName}\".${seq}`)}::regclass)` ||\n def === `nextval(${singleQuote(`${schemaName}.\"${seq}\"`)}::regclass)` ||\n def === `nextval(${singleQuote(`\"${schemaName}\".\"${seq}\"`)}::regclass)`)\n ) {\n return true;\n }\n }\n\n return false;\n};\n\nconst getColumnType = (item: DbStructure.Column, isSerial: boolean) => {\n if (isSerial) {\n return item.type === 'int2'\n ? 'smallserial'\n : item.type === 'int4'\n ? 'serial'\n : 'bigserial';\n }\n\n return item.type;\n};\n","import { RakeDbAst } from '../ast';\nimport {\n addCode,\n Code,\n codeToString,\n ColumnType,\n foreignKeyToCode,\n indexToCode,\n isRaw,\n primaryKeyToCode,\n quoteObjectKey,\n singleQuote,\n TimestampColumn,\n} from 'pqb';\nimport { quoteSchemaTable } from '../common';\n\nexport const astToMigration = (ast: RakeDbAst[]): string | undefined => {\n const code: Code[] = [];\n for (const item of ast) {\n if (item.type === 'schema' && item.action === 'create') {\n code.push(createSchema(item));\n } else if (item.type === 'table' && item.action === 'create') {\n if (code.length) code.push([]);\n code.push(...createTable(item));\n }\n }\n\n if (!code.length) return;\n\n return `import { change } from 'rake-db';\n\nchange(async (db) => {\n${codeToString(code, ' ', ' ')}\n});\n`;\n};\n\nconst createSchema = (ast: RakeDbAst.Schema) => {\n return `await db.createSchema(${singleQuote(ast.name)});`;\n};\n\nconst createTable = (ast: RakeDbAst.Table) => {\n const code: Code[] = [];\n addCode(code, `await db.createTable(${quoteSchemaTable(ast)}, (t) => ({`);\n\n const hasTimestamps =\n isTimestamp(ast.shape.createdAt) && isTimestamp(ast.shape.updatedAt);\n\n for (const key in ast.shape) {\n if (hasTimestamps && (key === 'createdAt' || key === 'updatedAt')) continue;\n\n const line: Code[] = [`${quoteObjectKey(key)}: `];\n for (const part of ast.shape[key].toCode('t')) {\n addCode(line, part);\n }\n addCode(line, ',');\n code.push(line);\n }\n\n if (hasTimestamps) {\n code.push(['...t.timestamps(),']);\n }\n\n if (ast.primaryKey) {\n code.push([primaryKeyToCode(ast.primaryKey, 't')]);\n }\n\n for (const index of ast.indexes) {\n code.push(indexToCode(index, 't'));\n }\n\n for (const foreignKey of ast.foreignKeys) {\n code.push(foreignKeyToCode(foreignKey, 't'));\n }\n\n addCode(code, '}));');\n\n return code;\n};\n\nconst isTimestamp = (column?: ColumnType) => {\n if (!column) return false;\n\n const { default: def } = column.data;\n return (\n column instanceof TimestampColumn &&\n !column.data.isNullable &&\n def &&\n typeof def === 'object' &&\n isRaw(def) &&\n def.__raw === 'now()'\n );\n};\n","import { RakeDbConfig } from '../common';\nimport { Adapter, AdapterOptions } from 'pqb';\nimport { DbStructure } from './dbStructure';\nimport { structureToAst } from './structureToAst';\nimport { astToMigration } from './astToMigration';\nimport { writeMigrationFile } from '../commands/generate';\n\nexport const pullDbStructure = async (\n options: AdapterOptions,\n config: RakeDbConfig,\n) => {\n const adapter = new Adapter(options);\n const db = new DbStructure(adapter);\n const ast = await structureToAst(db);\n\n await adapter.close();\n\n const result = astToMigration(ast);\n if (!result) return;\n\n await writeMigrationFile(config, 'pull', result);\n};\n","import { AdapterOptions, MaybeArray, toArray } from 'pqb';\nimport { createDb, dropDb, resetDb } from './commands/createOrDrop';\nimport { migrate, rollback } from './commands/migrateOrRollback';\nimport { getMigrationConfigWithDefaults, RakeDbConfig } from './common';\nimport { generate } from './commands/generate';\nimport { pullDbStructure } from './pull/pull';\n\nexport const rakeDb = async (\n options: MaybeArray<AdapterOptions>,\n partialConfig: Partial<RakeDbConfig> = {},\n args: string[] = process.argv.slice(2),\n) => {\n const config = getMigrationConfigWithDefaults(partialConfig);\n\n const command = args[0]?.split(':')[0];\n\n if (command === 'create') {\n await createDb(options, config);\n } else if (command === 'drop') {\n await dropDb(options);\n } else if (command === 'reset') {\n await resetDb(options, config);\n } else if (command === 'migrate') {\n await migrate(options, config, args.slice(1));\n } else if (command === 'rollback') {\n await rollback(options, config, args.slice(1));\n } else if (command === 'g' || command === 'generate') {\n await generate(config, args.slice(1));\n } else if (command === 'pull') {\n await pullDbStructure(toArray(options)[0], config);\n } else {\n printHelp();\n }\n};\n\nconst printHelp = () =>\n console.log(\n `Usage: rake-db [command] [arguments]\n\nCommands:\n create create databases\n drop drop databases\n reset drop, create and migrate databases\n g, generate generate migration file, see below\n migrate migrate pending migrations\n rollback rollback the last migrated\n no or unknown command prints this message\n \nMigrate arguments:\n no arguments run all pending migrations\n number run specific number of pending migrations\n\nRollback arguments:\n no arguments rollback one last applied migration\n number rollback specific number of applied migrations\n all rollback all applied migrations\n\nMigrate and rollback common arguments:\n --code run code updater, overrides \\`useCodeUpdater\\` option\n --code false do not run code updater\n \nGenerate arguments:\n- (required) first argument is migration name\n * create* template for create table\n * change* template for change table\n * add*To* template for add columns\n * remove*From* template for remove columns\n * drop* template for drop table\n\n- other arguments considered as columns with types and optional methods:\n rake-db g createTable id:serial.primaryKey name:text.nullable\n`,\n );\n"],"names":["path","__spreadValues","__spreadProps","Enquirer","readdir","singleQuote","quote","isRaw","getRaw","toArray","columnTypes","raw","createTable","getColumnTypes","getTableData","makeAst","astToQueries","ColumnType","emptyObject","resetTableData","changeTableData","TransactionAdapter","logParamToLogObject","createSchema","Adapter","db","mkdir","writeFile","method","columnsByType","instantiateColumn","codeToString","addCode","quoteObjectKey","primaryKeyToCode","indexToCode","foreignKeyToCode","TimestampColumn"],"mappings":"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"}