rake-db 2.4.2 → 2.4.3
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.d.ts +8 -9
- package/dist/index.js +77 -52
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +80 -54
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
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/tableMethods.ts","../src/errors.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 DbResult,\n DefaultColumnTypes,\n EnumColumn,\n NoPrimaryKeyOption,\n QueryLogOptions,\n} from 'pqb';\nimport { singleQuote } from 'orchid-core';\nimport path from 'path';\nimport { readdir } from 'fs/promises';\nimport { RakeDbAst } from './ast';\nimport prompts from 'prompts';\nimport { TableQuery } from './migration/createTable';\n\ntype Db = DbResult<DefaultColumnTypes>;\n\nexport type RakeDbConfig = {\n basePath: string;\n migrationsPath: string;\n migrationsTable: string;\n snakeCase: boolean;\n commands: Record<\n string,\n (\n options: AdapterOptions[],\n config: RakeDbConfig,\n args: string[],\n ) => Promise<void>\n >;\n import(path: string): Promise<void>;\n noPrimaryKey?: NoPrimaryKeyOption;\n appCodeUpdater?: AppCodeUpdater;\n useCodeUpdater?: boolean;\n beforeMigrate?(db: Db): Promise<void>;\n afterMigrate?(db: Db): Promise<void>;\n beforeRollback?(db: Db): Promise<void>;\n afterRollback?(db: Db): Promise<void>;\n} & QueryLogOptions;\n\nexport type AppCodeUpdater = (params: {\n ast: RakeDbAst;\n options: AdapterOptions;\n basePath: string;\n cache: object;\n}) => Promise<void>;\n\nexport const migrationConfigDefaults: Omit<RakeDbConfig, 'basePath'> = {\n migrationsPath: path.join('src', 'db', 'migrations'),\n migrationsTable: 'schemaMigrations',\n snakeCase: false,\n commands: {},\n import: (path: string) => import(path),\n log: true,\n logger: console,\n useCodeUpdater: true,\n};\n\nexport const processRakeDbConfig = (\n config: Partial<RakeDbConfig>,\n): RakeDbConfig => {\n const result = { ...migrationConfigDefaults, ...config };\n\n if (!result.basePath) {\n let stack: NodeJS.CallSite[] | undefined;\n Error.prepareStackTrace = (_, s) => (stack = s);\n new Error().stack;\n if (stack) {\n const thisFile = stack[0]?.getFileName();\n const thisDir = thisFile && path.dirname(thisFile);\n for (const item of stack) {\n let file = item.getFileName();\n if (\n !file ||\n path.dirname(file) === thisDir ||\n /\\bnode_modules\\b/.test(file)\n ) {\n continue;\n }\n\n // on Windows with ESM file is file:///C:/path/to/file.ts\n // it is not a valid URL\n if (/file:\\/\\/\\/\\w+:\\//.test(file)) {\n file = decodeURI(file.slice(8));\n } else {\n try {\n file = new URL(file).pathname;\n } catch (_) {}\n }\n\n result.basePath = path.dirname(file);\n break;\n }\n }\n\n if (!result.basePath) {\n throw new Error(\n 'Failed to determine path to db script. Please set basePath option of rakeDb',\n );\n }\n }\n\n if (!path.isAbsolute(result.migrationsPath)) {\n result.migrationsPath = path.resolve(\n result.basePath,\n result.migrationsPath,\n );\n }\n\n return result as RakeDbConfig;\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\nexport const setAdminCredentialsToOptions = async (\n options: AdapterOptions,\n create?: boolean,\n): Promise<AdapterOptions | undefined> => {\n const confirm = await prompts([\n {\n message: `Would you like to share admin credentials to ${\n create ? 'create' : 'drop'\n } a database`,\n type: 'confirm',\n name: 'confirm',\n initial: true,\n },\n ]);\n\n if (!confirm.confirm) {\n return;\n }\n\n const values = await prompts([\n {\n message: 'Enter admin user:',\n type: 'text',\n name: 'user',\n initial: 'postgres',\n min: 1,\n },\n {\n message: 'Enter admin password:',\n type: 'password',\n name: 'password',\n },\n ]);\n\n return setAdapterOptions(options, {\n ...values,\n password: values.password || undefined,\n });\n};\n\nexport const createSchemaMigrations = async (\n db: Adapter,\n config: Pick<RakeDbConfig, 'migrationsTable'>,\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(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\nexport const makePopulateEnumQuery = (item: EnumColumn): TableQuery => {\n const [schema, name] = getSchemaAndTableFromName(item.enumName);\n return {\n text: `SELECT unnest(enum_range(NULL::${quoteWithSchema({\n schema,\n name,\n })}))::text`,\n then(result) {\n // populate empty options array with values from db\n item.options.push(...result.rows.map(([value]) => value));\n },\n };\n};\n","import { Migration } from './migration';\n\nlet currentChanges: ChangeCallback[] = [];\n\nexport type ChangeCallback = (db: Migration, up: boolean) => Promise<void>;\n\nexport const change = (fn: ChangeCallback) => {\n currentChanges.push(fn);\n};\n\nexport const clearChanges = () => {\n currentChanges = [];\n};\n\nexport const getCurrentChanges = () => currentChanges;\n","import {\n ColumnType,\n ForeignKeyTable,\n ForeignKeyOptions,\n getRaw,\n quote,\n Sql,\n TableData,\n} from 'pqb';\nimport { isRaw, toArray } from 'orchid-core';\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 = [`\"${item.data.name || 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.data.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.adapter.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.adapter.types,\n );\n\n return rows;\n};\n","import { EnumColumn } from 'pqb';\nimport { ColumnTypesBase } from 'orchid-core';\n\nexport const tableMethods = {\n enum(this: ColumnTypesBase, name: string) {\n // empty array will be filled during the migration by querying db\n return new EnumColumn(this, name, [] as unknown as [string, ...string[]]);\n },\n};\n","export class RakeDbError extends Error {}\n\nexport class NoPrimaryKey extends RakeDbError {}\n","import {\n ColumnsShape,\n columnTypes,\n EnumColumn,\n getColumnTypes,\n getTableData,\n NoPrimaryKeyOption,\n QueryArraysResult,\n quote,\n TableData,\n} from 'pqb';\nimport {\n ColumnComment,\n ColumnsShapeCallback,\n MigrationBase,\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 {\n getSchemaAndTableFromName,\n makePopulateEnumQuery,\n quoteWithSchema,\n} from '../common';\nimport { RakeDbAst } from '../ast';\nimport { tableMethods } from './tableMethods';\nimport { NoPrimaryKey } from '../errors';\nimport { snakeCaseKey } from 'orchid-core';\n\nconst types = Object.assign(Object.create(columnTypes), tableMethods);\n\nexport type TableQuery = {\n text: string;\n values?: unknown[];\n then?(result: QueryArraysResult): void;\n};\n\nexport const createTable = async (\n migration: MigrationBase,\n up: boolean,\n tableName: string,\n options: TableOptions,\n fn: ColumnsShapeCallback,\n) => {\n types[snakeCaseKey] = migration.options.snakeCase;\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 { then, ...query } of queries) {\n const result = await migration.adapter.arrays(query);\n then?.(result);\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].data.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].data.isPrimaryKey) {\n hasPrimaryKey = true;\n break;\n }\n }\n }\n\n if (!hasPrimaryKey) {\n const error = new NoPrimaryKey(\n `Table ${ast.name} has no primary key.\\nYou can suppress this error by setting { noPrimaryKey: true } after a table name.`,\n );\n if (ast.noPrimaryKey === 'error') {\n throw error;\n } else {\n console.warn(error.message);\n }\n }\n }\n};\n\nconst astToQueries = (ast: RakeDbAst.Table): TableQuery[] => {\n const queries: TableQuery[] = [];\n\n for (const key in ast.shape) {\n const item = ast.shape[key];\n if (!(item instanceof EnumColumn)) continue;\n\n queries.push(makePopulateEnumQuery(item));\n }\n\n if (ast.action === 'drop') {\n queries.push({\n text: `DROP TABLE ${quoteWithSchema(ast)}${\n ast.dropMode ? ` ${ast.dropMode}` : ''\n }`,\n });\n return queries;\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 queries.push(\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 queries.push({\n text: `COMMENT ON TABLE ${quoteWithSchema(ast)} IS ${quote(ast.comment)}`,\n });\n }\n\n return queries;\n};\n","import {\n ColumnType,\n resetTableData,\n getTableData,\n TableData,\n columnTypes,\n quote,\n getRaw,\n EnumColumn,\n} from 'pqb';\nimport {\n EmptyObject,\n emptyObject,\n RawExpression,\n isRaw,\n ColumnTypesBase,\n nameKey,\n snakeCaseKey,\n} from 'orchid-core';\nimport {\n ChangeTableCallback,\n ChangeTableOptions,\n ColumnComment,\n DropMode,\n MigrationBase,\n MigrationColumnTypes,\n runCodeUpdater,\n} from './migration';\nimport { RakeDbAst } from '../ast';\nimport {\n getSchemaAndTableFromName,\n makePopulateEnumQuery,\n quoteWithSchema,\n} from '../common';\nimport {\n addColumnComment,\n addColumnIndex,\n columnToSql,\n commentsToQuery,\n constraintToSql,\n indexesToQuery,\n primaryKeyToSql,\n} from './migrationUtils';\nimport { tableMethods } from './tableMethods';\nimport { TableQuery } from './createTable';\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 this: ColumnTypesBase,\n item: ColumnType,\n options?: { dropMode?: DropMode },\n): RakeDbAst.ChangeTableItem.Column;\nfunction add(this: ColumnTypesBase, emptyObject: EmptyObject): EmptyObject;\nfunction add(\n this: ColumnTypesBase,\n items: Record<string, ColumnType>,\n options?: { dropMode?: DropMode },\n): Record<string, RakeDbAst.ChangeTableItem.Column>;\nfunction add(\n this: ColumnTypesBase,\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 if (this[nameKey]) {\n item.data.name = this[nameKey];\n }\n\n return {\n type: 'add',\n item,\n dropMode: options?.dropMode,\n };\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 = function (item, options) {\n if (item instanceof ColumnType) {\n if (this[nameKey]) {\n item.data.name = this[nameKey];\n }\n\n return {\n type: 'drop',\n item,\n dropMode: options?.dropMode,\n };\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.data.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 ...tableMethods,\n add,\n drop,\n change(\n this: ColumnTypesBase,\n from: ColumnType | Change,\n to: ColumnType | Change,\n options?: ChangeOptions,\n ): Change {\n return {\n type: 'change',\n name: this[nameKey],\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: MigrationBase,\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 (tableChanger as { [snakeCaseKey]?: boolean })[snakeCaseKey] =\n migration.options.snakeCase;\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 const result = await migration.adapter.arrays(query);\n query.then?.(result);\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): TableQuery[] => {\n const queries: TableQuery[] = [];\n\n if (ast.comment !== undefined) {\n queries.push({\n text: `COMMENT ON TABLE ${quoteWithSchema(ast)} IS ${quote(ast.comment)}`,\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' in item) {\n const { item: column } = item;\n if (column instanceof EnumColumn) {\n queries.push(makePopulateEnumQuery(column));\n }\n }\n\n if (item.type === 'add') {\n if (item.item.data.isPrimaryKey) {\n addPrimaryKeys.columns.push(key);\n }\n } else if (item.type === 'drop') {\n if (item.item.data.isPrimaryKey) {\n dropPrimaryKeys.columns.push(key);\n }\n } else if (item.type === 'change') {\n if (item.from.column instanceof EnumColumn) {\n queries.push(makePopulateEnumQuery(item.from.column));\n }\n\n if (item.to.column instanceof EnumColumn) {\n queries.push(makePopulateEnumQuery(item.to.column));\n }\n\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 \"${item.item.data.name || key}\"${\n item.dropMode ? ` ${item.dropMode}` : ''\n }`,\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 \"${item.name || 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 \"${item.name || key}\" ${expr}`);\n }\n\n if (from.nullable !== to.nullable) {\n alterTable.push(\n `ALTER COLUMN \"${item.name || key}\" ${\n to.nullable ? 'DROP' : 'SET'\n } NOT NULL`,\n );\n }\n\n if (from.compression !== to.compression) {\n alterTable.push(\n `ALTER COLUMN \"${item.name || 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 queries.push({\n text:\n `ALTER TABLE ${quoteWithSchema(ast)}` +\n `\\n ${alterTable.join(',\\n ')}`,\n values,\n });\n }\n\n queries.push(...indexesToQuery(false, ast, dropIndexes));\n queries.push(...indexesToQuery(true, ast, addIndexes));\n queries.push(...commentsToQuery(ast, comments));\n\n return queries;\n};\n","import {\n ColumnsShape,\n ColumnType,\n ColumnTypes,\n ForeignKeyOptions,\n IndexColumnOptions,\n IndexOptions,\n logParamToLogObject,\n QueryLogObject,\n Sql,\n TransactionAdapter,\n TextColumn,\n AdapterOptions,\n createDb,\n DbResult,\n DefaultColumnTypes,\n EnumColumn,\n quote,\n} from 'pqb';\nimport { MaybeArray, QueryInput, raw } from 'orchid-core';\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<\n ColumnTypes,\n 'text' | 'string' | 'enum'\n> & {\n text: TextColumnCreator;\n string: TextColumnCreator;\n enum: (name: string) => EnumColumn;\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 Migration = DbResult<DefaultColumnTypes> & MigrationBase;\n\nexport const createMigrationInterface = (\n tx: TransactionAdapter,\n up: boolean,\n options: RakeDbConfig,\n adapterOptions: AdapterOptions,\n appCodeUpdaterCache: object,\n): Migration => {\n const adapter = new TransactionAdapter(tx, tx.client, tx.types);\n const { query, arrays } = adapter;\n const log = logParamToLogObject(options.logger || console, options.log);\n\n adapter.query = ((q, types) => {\n return wrapWithLog(log, q, () => query.call(adapter, q, types));\n }) as typeof adapter.query;\n\n adapter.arrays = ((q, types) => {\n return wrapWithLog(log, q, () => arrays.call(adapter, q, types));\n }) as typeof adapter.arrays;\n\n const db = createDb({ adapter }) as unknown as Migration;\n\n const { prototype: proto } = MigrationBase;\n for (const key of Object.getOwnPropertyNames(proto)) {\n (db as unknown as Record<string, unknown>)[key] =\n proto[key as keyof typeof proto];\n }\n\n return Object.assign(db, {\n adapter,\n log,\n up,\n options,\n adapterOptions,\n appCodeUpdaterCache,\n });\n};\n\nexport class MigrationBase {\n public adapter!: TransactionAdapter;\n public log?: QueryLogObject;\n public up!: boolean;\n public options!: RakeDbConfig;\n public adapterOptions!: AdapterOptions;\n public appCodeUpdaterCache!: object;\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.adapter.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: Omit<RakeDbAst.Extension, 'type' | 'action' | 'name'> = {},\n ) {\n return createExtension(this, this.up, name, options);\n }\n\n dropExtension(\n name: string,\n options: Omit<\n RakeDbAst.Extension,\n 'type' | 'action' | 'name' | 'values'\n > = {},\n ) {\n return createExtension(this, !this.up, name, options);\n }\n\n createEnum(\n name: string,\n values: string[],\n options?: Omit<RakeDbAst.Enum, 'type' | 'action' | 'name' | 'values'>,\n ) {\n return createEnum(this, this.up, name, values, options);\n }\n\n dropEnum(\n name: string,\n values: string[],\n options?: Omit<RakeDbAst.Enum, 'type' | 'action' | 'name' | 'values'>,\n ) {\n return createEnum(this, !this.up, name, values, 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: MigrationBase,\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: MigrationBase,\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: MigrationBase,\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: MigrationBase,\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: MigrationBase,\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.adapter.query(\n `${ast.action === 'create' ? 'CREATE' : 'DROP'} SCHEMA \"${name}\"`,\n );\n\n await runCodeUpdater(migration, ast);\n};\n\nconst createExtension = async (\n migration: MigrationBase,\n up: boolean,\n name: string,\n options: Omit<RakeDbAst.Extension, 'type' | 'action' | 'name'>,\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.dropIfExists ? ' IF EXISTS' : ''} \"${\n ast.name\n }\"${ast.cascade ? ' CASCADE' : ''}`;\n } else {\n query = `CREATE EXTENSION${\n ast.createIfNotExists ? ' IF NOT EXISTS' : ''\n } \"${ast.name}\"${ast.schema ? ` SCHEMA \"${ast.schema}\"` : ''}${\n ast.version ? ` VERSION '${ast.version}'` : ''\n }${ast.cascade ? ' CASCADE' : ''}`;\n }\n\n await migration.adapter.query(query);\n\n await runCodeUpdater(migration, ast);\n};\n\nconst createEnum = async (\n migration: MigrationBase,\n up: boolean,\n name: string,\n values: string[],\n options: Omit<RakeDbAst.Enum, 'type' | 'action' | 'name' | 'values'> = {},\n) => {\n const [schema, enumName] = getSchemaAndTableFromName(name);\n\n const ast: RakeDbAst.Enum = {\n type: 'enum',\n action: up ? 'create' : 'drop',\n schema,\n name: enumName,\n values,\n ...options,\n };\n\n let query;\n const quotedName = quoteWithSchema(ast);\n if (ast.action === 'create') {\n query = `CREATE TYPE ${quotedName} AS ENUM (${values\n .map(quote)\n .join(', ')})`;\n } else {\n query = `DROP TYPE${ast.dropIfExists ? ' IF EXISTS' : ''} ${quotedName}${\n ast.cascade ? ' CASCADE' : ''\n }`;\n }\n\n await migration.adapter.query(query);\n\n await runCodeUpdater(migration, ast);\n};\n\nconst queryExists = (\n db: MigrationBase,\n sql: { text: string; values: unknown[] },\n) => {\n return db.adapter.query(sql).then(({ rowCount }) => rowCount > 0);\n};\n\nexport const runCodeUpdater = (migration: MigrationBase, ast: RakeDbAst) => {\n return migration.options.appCodeUpdater?.({\n ast,\n options: migration.adapterOptions,\n basePath: migration.options.basePath,\n cache: migration.appCodeUpdaterCache,\n });\n};\n","import {\n Adapter,\n AdapterOptions,\n createDb,\n DbResult,\n DefaultColumnTypes,\n} from 'pqb';\nimport { MaybeArray, toArray } from 'orchid-core';\nimport {\n createSchemaMigrations,\n getMigrationFiles,\n RakeDbConfig,\n MigrationFile,\n quoteWithSchema,\n} from '../common';\nimport {\n clearChanges,\n ChangeCallback,\n getCurrentChanges,\n} from '../migration/change';\nimport { createMigrationInterface } from '../migration/migration';\nimport * as url from 'url';\n\nconst getDb = (adapter: Adapter) => createDb({ adapter });\n\nexport const 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 adapter = new Adapter(opts);\n let db: DbResult<DefaultColumnTypes> | undefined;\n\n if (up) {\n await config.beforeMigrate?.((db ??= getDb(adapter)));\n } else {\n await config.beforeRollback?.((db ??= getDb(adapter)));\n }\n\n const migratedVersions = await getMigratedVersionsMap(adapter, 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(\n adapter,\n up,\n file,\n config,\n opts,\n appCodeUpdaterCache,\n );\n config.logger?.log(`${file.path} ${up ? 'migrated' : 'rolled back'}`);\n }\n\n if (up) {\n await config.afterMigrate?.((db ??= getDb(adapter)));\n } else {\n await config.afterRollback?.((db ??= getDb(adapter)));\n }\n } finally {\n await adapter.close();\n }\n // use appCodeUpdater only for the first provided options\n delete config.appCodeUpdater;\n }\n};\n\nexport const 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 = createMigrationInterface(\n tx,\n up,\n config,\n options,\n appCodeUpdaterCache,\n );\n clearChanges();\n\n let changes = changeCache[file.path];\n if (!changes) {\n try {\n await config.import(file.path);\n } catch (err) {\n // throw if unknown error\n if ((err as { code: string }).code !== 'ERR_UNSUPPORTED_ESM_URL_SCHEME')\n throw err;\n\n // this error happens on windows in ESM mode, try import transformed url\n await config.import(url.pathToFileURL(file.path).pathname);\n }\n changes = getCurrentChanges();\n changeCache[file.path] = changes;\n }\n\n for (const fn of up ? changes : changes.reverse()) {\n await fn(db, up);\n }\n\n await (up ? saveMigratedVersion : removeMigratedVersion)(\n db.adapter,\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 } from 'pqb';\nimport { MaybeArray, toArray } from 'orchid-core';\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<\n 'ok' | 'already' | 'forbidden' | 'ssl required' | { error: unknown }\n> => {\n const db = new Adapter(options);\n\n try {\n await db.query(sql);\n return 'ok';\n } catch (error) {\n const err = error as Record<string, unknown>;\n\n if (\n typeof err.message === 'string' &&\n err.message.includes('sslmode=require')\n ) {\n return 'ssl required';\n }\n\n if (err.code === '42P04' || err.code === '3D000') {\n return 'already';\n } else if (\n err.code === '42501' ||\n (typeof err.message === 'string' &&\n err.message.includes('password authentication failed'))\n ) {\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: Pick<RakeDbConfig, 'migrationsTable'>,\n args: {\n sql(params: { database: string; user: string }): string;\n successMessage(params: { database: string }): string;\n alreadyMessage(params: { database: string }): string;\n create?: 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 === 'ssl required') {\n console.log('SSL is required: append ?ssl=true to the database url string');\n return;\n } else if (result === 'forbidden') {\n let message = `Permission denied to ${\n args.create ? 'create' : 'drop'\n } database.`;\n\n const host = adminOptions.databaseURL\n ? new URL(adminOptions.databaseURL).hostname\n : adminOptions.host;\n\n const isLocal = host === 'localhost';\n if (!isLocal) {\n message += `\\nDon't use this command for database service providers, only for a local db.`;\n }\n\n console.log(message);\n\n const updatedOptions = await setAdminCredentialsToOptions(\n options,\n args.create,\n );\n if (!updatedOptions) return;\n\n await createOrDrop(options, updatedOptions, config, args);\n return;\n } else {\n throw result.error;\n }\n\n if (!args.create) 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 create: 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(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 export type Enum = {\n schemaName: string;\n name: string;\n values: 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 async getEnums() {\n const { rows } = await this.db.query<DbStructure.Enum>(\n `SELECT\n n.nspname as \"schemaName\",\n t.typname as name,\n json_agg(e.enumlabel) as values\nFROM pg_type t\nJOIN pg_enum e ON t.oid = e.enumtypid\nJOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace\nWHERE ${filterSchema('n.nspname')}\nGROUP BY n.nspname, t.typname`,\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 TableData,\n} from 'pqb';\nimport { singleQuote } from 'orchid-core';\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\ntype Data = {\n schemas: string[];\n tables: DbStructure.Table[];\n columns: DbStructure.Column[];\n primaryKeys: DbStructure.PrimaryKey[];\n indexes: DbStructure.Index[];\n foreignKeys: DbStructure.ForeignKey[];\n extensions: DbStructure.Extension[];\n enums: DbStructure.Enum[];\n};\n\ntype PendingTables = Record<\n string,\n { table: DbStructure.Table; dependsOn: Set<string> }\n>;\n\nexport const structureToAst = async (db: DbStructure): Promise<RakeDbAst[]> => {\n const ast: RakeDbAst[] = [];\n\n const data = await getData(db);\n\n for (const name of data.schemas) {\n if (name === 'public') continue;\n\n ast.push({\n type: 'schema',\n action: 'create',\n name,\n });\n }\n\n const pendingTables: PendingTables = {};\n for (const table of data.tables) {\n const key = `${table.schemaName}.${table.name}`;\n const dependsOn = new Set<string>();\n\n for (const fk of data.foreignKeys) {\n if (fk.schemaName !== table.schemaName || fk.tableName !== table.name)\n continue;\n\n const otherKey = `${fk.foreignTableSchemaName}.${fk.foreignTableName}`;\n if (otherKey !== key) {\n dependsOn.add(otherKey);\n }\n }\n\n pendingTables[key] = { table, dependsOn };\n }\n\n for (const key in pendingTables) {\n const { table, dependsOn } = pendingTables[key];\n if (!dependsOn.size) {\n pushTableAst(ast, data, table, pendingTables);\n }\n }\n\n const outerFKeys: [DbStructure.ForeignKey, DbStructure.Table][] = [];\n\n for (const it of data.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 for (const it of data.enums) {\n ast.push({\n type: 'enum',\n action: 'create',\n name: it.name,\n schema: it.schemaName === 'public' ? undefined : it.schemaName,\n values: it.values,\n });\n }\n\n for (const key in pendingTables) {\n const innerFKeys: DbStructure.ForeignKey[] = [];\n const { table } = pendingTables[key];\n\n for (const fkey of data.foreignKeys) {\n if (fkey.schemaName !== table.schemaName || fkey.tableName !== table.name)\n continue;\n\n const otherKey = `${fkey.foreignTableSchemaName}.${fkey.foreignTableName}`;\n if (!pendingTables[otherKey] || otherKey === key) {\n innerFKeys.push(fkey);\n } else {\n outerFKeys.push([fkey, table]);\n }\n }\n\n pushTableAst(ast, data, table, pendingTables, innerFKeys);\n }\n\n for (const [fkey, table] of outerFKeys) {\n ast.push({\n ...foreignKeyToAst(fkey),\n type: 'foreignKey',\n action: 'create',\n tableSchema: table.schemaName === 'public' ? undefined : table.schemaName,\n tableName: fkey.tableName,\n });\n }\n\n return ast;\n};\n\nconst getData = async (db: DbStructure): Promise<Data> => {\n const [\n schemas,\n tables,\n columns,\n primaryKeys,\n indexes,\n foreignKeys,\n extensions,\n enums,\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 db.getEnums(),\n ]);\n\n return {\n schemas,\n tables,\n columns,\n primaryKeys,\n indexes,\n foreignKeys,\n extensions,\n enums,\n };\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\nconst pushTableAst = (\n ast: RakeDbAst[],\n data: Data,\n table: DbStructure.Table,\n pendingTables: PendingTables,\n innerFKeys = data.foreignKeys,\n) => {\n const { schemaName, name } = table;\n\n const key = `${schemaName}.${table.name}`;\n delete pendingTables[key];\n\n if (name === 'schemaMigrations') return;\n\n const belongsToTable = makeBelongsToTable(schemaName, name);\n\n const columns = data.columns.filter(belongsToTable);\n const primaryKey = data.primaryKeys.find(belongsToTable);\n const tableIndexes = data.indexes.filter(belongsToTable);\n const tableForeignKeys = innerFKeys.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 !== 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 delete column.data.name;\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(foreignKeyToAst),\n });\n\n for (const otherKey in pendingTables) {\n const item = pendingTables[otherKey];\n if (item.dependsOn.delete(key) && item.dependsOn.size === 0) {\n pushTableAst(ast, data, item.table, pendingTables);\n }\n }\n};\n\nconst foreignKeyToAst = (\n fkey: DbStructure.ForeignKey,\n): TableData.ForeignKey => ({\n columns: fkey.columnNames,\n fnOrTable: fkey.foreignTableName,\n foreignColumns: fkey.foreignColumnNames,\n options: {\n name:\n fkey.name &&\n fkey.name !== getForeignKeyName(fkey.tableName, fkey.columnNames)\n ? fkey.name\n : undefined,\n match: matchMap[fkey.match],\n onUpdate: fkeyActionMap[fkey.onUpdate],\n onDelete: fkeyActionMap[fkey.onDelete],\n } as ForeignKeyOptions,\n});\n","import { RakeDbAst } from '../ast';\nimport {\n codeToString,\n ColumnType,\n foreignKeyArgsToCode,\n foreignKeyToCode,\n indexToCode,\n primaryKeyToCode,\n TimestampColumn,\n} from 'pqb';\nimport { addCode, Code, isRaw, quoteObjectKey, singleQuote } from 'orchid-core';\nimport { quoteSchemaTable, RakeDbConfig } from '../common';\n\nexport const astToMigration = (\n config: RakeDbConfig,\n ast: RakeDbAst[],\n): string | undefined => {\n const first: Code[] = [];\n const tables: Code[] = [];\n const foreignKeys: Code[] = [];\n for (const item of ast) {\n if (item.type === 'schema' && item.action === 'create') {\n first.push(createSchema(item));\n } else if (item.type === 'extension' && item.action === 'create') {\n if (first.length) first.push([]);\n first.push(...createExtension(item));\n } else if (item.type === 'enum' && item.action === 'create') {\n if (first.length) first.push([]);\n first.push(...createEnum(item));\n } else if (item.type === 'table' && item.action === 'create') {\n tables.push(createTable(config, item));\n } else if (item.type === 'foreignKey') {\n if (foreignKeys.length) foreignKeys.push([]);\n foreignKeys.push(...createForeignKey(item));\n }\n }\n\n if (!first.length && !tables.length && !foreignKeys.length) return;\n\n let code = `import { change } from 'rake-db';\n`;\n\n if (first.length) {\n code += `\nchange(async (db) => {\n${codeToString(first, ' ', ' ')}\n});\n`;\n }\n\n if (tables.length) {\n for (const table of tables) {\n code += `\nchange(async (db) => {\n${codeToString(table, ' ', ' ')}\n});\n`;\n }\n }\n\n if (foreignKeys.length) {\n code += `\nchange(async (db) => {\n${codeToString(foreignKeys, ' ', ' ')}\n});\n`;\n }\n\n return code;\n};\n\nconst createSchema = (ast: RakeDbAst.Schema) => {\n return `await db.createSchema(${singleQuote(ast.name)});`;\n};\n\nconst createExtension = (ast: RakeDbAst.Extension): Code[] => {\n const code: Code[] = [`await db.createExtension(${singleQuote(ast.name)}`];\n if (ast.schema || ast.version) {\n addCode(code, ', {');\n if (ast.schema) {\n code.push([`schema: ${singleQuote(ast.schema)},`]);\n }\n if (ast.version) {\n code.push([`version: ${singleQuote(ast.version)},`]);\n }\n addCode(code, '}');\n }\n addCode(code, ');');\n return code;\n};\n\nconst createEnum = (ast: RakeDbAst.Enum) => {\n const code: Code[] = [\n `await db.createEnum(${singleQuote(ast.name)}, [${ast.values\n .map(singleQuote)\n .join(', ')}]`,\n ];\n if (ast.schema) {\n addCode(code, ', {');\n code.push([`schema: ${singleQuote(ast.schema)},`]);\n addCode(code, '}');\n }\n addCode(code, ');');\n return code;\n};\n\nconst createTable = (config: RakeDbConfig, ast: RakeDbAst.Table) => {\n const code: Code[] = [];\n addCode(code, `await db.createTable(${quoteSchemaTable(ast)}, (t) => ({`);\n\n const hasTimestamps =\n !config.snakeCase &&\n isTimestamp(ast.shape.createdAt) &&\n isTimestamp(ast.shape.updatedAt);\n\n const hasTimestampsSnake =\n isTimestamp(ast.shape.created_at) && isTimestamp(ast.shape.updated_at);\n\n for (const key in ast.shape) {\n if (hasTimestamps && (key === 'createdAt' || key === 'updatedAt')) continue;\n if (hasTimestampsSnake && (key === 'created_at' || key === 'updated_at'))\n 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 || (config.snakeCase && hasTimestampsSnake)) {\n code.push(['...t.timestamps(),']);\n }\n\n if (hasTimestampsSnake && !config.snakeCase) {\n code.push(['...t.timestampsSnakeCase(),']);\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\nconst createForeignKey = (item: RakeDbAst.ForeignKey): Code[] => {\n return [\n `await db.addForeignKey(`,\n [\n `${quoteSchemaTable({\n schema: item.tableSchema,\n name: item.tableName,\n })},`,\n ...foreignKeyArgsToCode(item),\n ],\n ');',\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(config, ast);\n if (!result) return;\n\n await writeMigrationFile(config, 'pull', result);\n};\n","import { AdapterOptions } from 'pqb';\nimport { MaybeArray, toArray } from 'orchid-core';\nimport { createDb, dropDb, resetDb } from './commands/createOrDrop';\nimport { migrate, rollback } from './commands/migrateOrRollback';\nimport { processRakeDbConfig, RakeDbConfig } from './common';\nimport { generate } from './commands/generate';\nimport { pullDbStructure } from './pull/pull';\nimport { RakeDbError } from './errors';\n\nexport const rakeDb = async (\n options: MaybeArray<AdapterOptions>,\n partialConfig: Partial<RakeDbConfig> = {},\n args: string[] = process.argv.slice(2),\n) => {\n const config = processRakeDbConfig(partialConfig);\n\n const command = args[0]?.split(':')[0];\n\n try {\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 if (config.commands[command]) {\n await config.commands[command](toArray(options), config, args.slice(1));\n } else {\n printHelp();\n }\n } catch (err) {\n if (err instanceof RakeDbError) {\n console.error(err.message);\n process.exit(1);\n }\n throw err;\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","prompts","readdir","singleQuote","quote","isRaw","getRaw","toArray","EnumColumn","columnTypes","createTable","snakeCaseKey","getColumnTypes","getTableData","makeAst","astToQueries","ColumnType","nameKey","emptyObject","resetTableData","changeTableData","TransactionAdapter","logParamToLogObject","createDb","createSchema","createExtension","createEnum","Adapter","db","url","mkdir","writeFile","method","columnsByType","instantiateColumn","codeToString","addCode","quoteObjectKey","primaryKeyToCode","indexToCode","foreignKeyToCode","TimestampColumn","foreignKeyArgsToCode"],"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/tableMethods.ts","../src/errors.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 DbResult,\n DefaultColumnTypes,\n EnumColumn,\n NoPrimaryKeyOption,\n QueryLogOptions,\n} from 'pqb';\nimport { singleQuote } from 'orchid-core';\nimport path from 'path';\nimport { readdir } from 'fs/promises';\nimport { RakeDbAst } from './ast';\nimport prompts from 'prompts';\nimport { TableQuery } from './migration/createTable';\n\ntype Db = DbResult<DefaultColumnTypes>;\n\nexport type RakeDbConfig = {\n basePath: string;\n migrationsPath: string;\n migrationsTable: string;\n snakeCase: boolean;\n commands: Record<\n string,\n (\n options: AdapterOptions[],\n config: RakeDbConfig,\n args: string[],\n ) => Promise<void>\n >;\n import(path: string): Promise<void>;\n noPrimaryKey?: NoPrimaryKeyOption;\n appCodeUpdater?: AppCodeUpdater;\n useCodeUpdater?: boolean;\n beforeMigrate?(db: Db): Promise<void>;\n afterMigrate?(db: Db): Promise<void>;\n beforeRollback?(db: Db): Promise<void>;\n afterRollback?(db: Db): Promise<void>;\n} & QueryLogOptions;\n\nexport type AppCodeUpdater = (params: {\n ast: RakeDbAst;\n options: AdapterOptions;\n basePath: string;\n cache: object;\n logger: QueryLogOptions['logger'];\n}) => Promise<void>;\n\nexport const migrationConfigDefaults: Omit<RakeDbConfig, 'basePath'> = {\n migrationsPath: path.join('src', 'db', 'migrations'),\n migrationsTable: 'schemaMigrations',\n snakeCase: false,\n commands: {},\n import: (path: string) => import(path),\n log: true,\n logger: console,\n useCodeUpdater: true,\n};\n\nexport const processRakeDbConfig = (\n config: Partial<RakeDbConfig>,\n): RakeDbConfig => {\n const result = { ...migrationConfigDefaults, ...config };\n\n if (!result.log) {\n delete result.logger;\n }\n\n if (!result.basePath) {\n let stack: NodeJS.CallSite[] | undefined;\n const original = Error.prepareStackTrace;\n Error.prepareStackTrace = (_, s) => (stack = s);\n new Error().stack;\n Error.prepareStackTrace = original;\n if (stack) {\n const thisFile = stack[0]?.getFileName();\n const thisDir = thisFile && path.dirname(thisFile);\n for (const item of stack) {\n let file = item.getFileName();\n if (\n !file ||\n path.dirname(file) === thisDir ||\n /\\bnode_modules\\b/.test(file)\n ) {\n continue;\n }\n\n // on Windows with ESM file is file:///C:/path/to/file.ts\n // it is not a valid URL\n if (/file:\\/\\/\\/\\w+:\\//.test(file)) {\n file = decodeURI(file.slice(8));\n } else {\n try {\n file = new URL(file).pathname;\n } catch (_) {}\n }\n\n result.basePath = path.dirname(file);\n break;\n }\n }\n\n if (!result.basePath) {\n throw new Error(\n 'Failed to determine path to db script. Please set basePath option of rakeDb',\n );\n }\n }\n\n if (!path.isAbsolute(result.migrationsPath)) {\n result.migrationsPath = path.resolve(\n result.basePath,\n result.migrationsPath,\n );\n }\n\n return result as RakeDbConfig;\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\nexport const setAdminCredentialsToOptions = async (\n options: AdapterOptions,\n create?: boolean,\n): Promise<AdapterOptions | undefined> => {\n const confirm = await prompts([\n {\n message: `Would you like to share admin credentials to ${\n create ? 'create' : 'drop'\n } a database`,\n type: 'confirm',\n name: 'confirm',\n initial: true,\n },\n ]);\n\n if (!confirm.confirm) {\n return;\n }\n\n const values = await prompts([\n {\n message: 'Enter admin user:',\n type: 'text',\n name: 'user',\n initial: 'postgres',\n min: 1,\n },\n {\n message: 'Enter admin password:',\n type: 'password',\n name: 'password',\n },\n ]);\n\n return setAdapterOptions(options, {\n ...values,\n password: values.password || undefined,\n });\n};\n\nexport const createSchemaMigrations = async (\n db: Adapter,\n config: Pick<RakeDbConfig, 'migrationsTable' | 'logger'>,\n) => {\n try {\n await db.query(\n `CREATE TABLE ${quoteWithSchema({\n name: config.migrationsTable,\n })} ( version TEXT NOT NULL )`,\n );\n config.logger?.log('Created versions table');\n } catch (err) {\n if ((err as Record<string, unknown>).code === '42P07') {\n config.logger?.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(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\nexport const makePopulateEnumQuery = (item: EnumColumn): TableQuery => {\n const [schema, name] = getSchemaAndTableFromName(item.enumName);\n return {\n text: `SELECT unnest(enum_range(NULL::${quoteWithSchema({\n schema,\n name,\n })}))::text`,\n then(result) {\n // populate empty options array with values from db\n item.options.push(...result.rows.map(([value]) => value));\n },\n };\n};\n","import { Migration } from './migration';\n\nlet currentChanges: ChangeCallback[] = [];\n\nexport type ChangeCallback = (db: Migration, up: boolean) => Promise<void>;\n\nexport const change = (fn: ChangeCallback) => {\n currentChanges.push(fn);\n};\n\nexport const clearChanges = () => {\n currentChanges = [];\n};\n\nexport const getCurrentChanges = () => currentChanges;\n","import {\n ColumnType,\n ForeignKeyTable,\n ForeignKeyOptions,\n getRaw,\n quote,\n Sql,\n TableData,\n} from 'pqb';\nimport { isRaw, toArray } from 'orchid-core';\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 = [`\"${item.data.name || 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.data.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.adapter.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.adapter.types,\n );\n\n return rows;\n};\n","import { EnumColumn } from 'pqb';\nimport { ColumnTypesBase } from 'orchid-core';\n\nexport const tableMethods = {\n enum(this: ColumnTypesBase, name: string) {\n // empty array will be filled during the migration by querying db\n return new EnumColumn(this, name, [] as unknown as [string, ...string[]]);\n },\n};\n","export class RakeDbError extends Error {}\n\nexport class NoPrimaryKey extends RakeDbError {}\n","import {\n ColumnsShape,\n columnTypes,\n EnumColumn,\n getColumnTypes,\n getTableData,\n NoPrimaryKeyOption,\n QueryArraysResult,\n quote,\n TableData,\n} from 'pqb';\nimport {\n ColumnComment,\n ColumnsShapeCallback,\n MigrationBase,\n TableOptions,\n} from './migration';\nimport {\n addColumnComment,\n addColumnIndex,\n columnToSql,\n commentsToQuery,\n constraintToSql,\n indexesToQuery,\n primaryKeyToSql,\n} from './migrationUtils';\nimport {\n getSchemaAndTableFromName,\n makePopulateEnumQuery,\n quoteWithSchema,\n} from '../common';\nimport { RakeDbAst } from '../ast';\nimport { tableMethods } from './tableMethods';\nimport { NoPrimaryKey } from '../errors';\nimport { snakeCaseKey } from 'orchid-core';\n\nconst types = Object.assign(Object.create(columnTypes), tableMethods);\n\nexport type TableQuery = {\n text: string;\n values?: unknown[];\n then?(result: QueryArraysResult): void;\n};\n\nexport const createTable = async (\n migration: MigrationBase,\n up: boolean,\n tableName: string,\n options: TableOptions,\n fn: ColumnsShapeCallback,\n) => {\n types[snakeCaseKey] = migration.options.snakeCase;\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 { then, ...query } of queries) {\n const result = await migration.adapter.arrays(query);\n then?.(result);\n }\n\n migration.migratedAsts.push(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].data.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].data.isPrimaryKey) {\n hasPrimaryKey = true;\n break;\n }\n }\n }\n\n if (!hasPrimaryKey) {\n const error = new NoPrimaryKey(\n `Table ${ast.name} has no primary key.\\nYou can suppress this error by setting { noPrimaryKey: true } after a table name.`,\n );\n if (ast.noPrimaryKey === 'error') {\n throw error;\n } else {\n console.warn(error.message);\n }\n }\n }\n};\n\nconst astToQueries = (ast: RakeDbAst.Table): TableQuery[] => {\n const queries: TableQuery[] = [];\n\n for (const key in ast.shape) {\n const item = ast.shape[key];\n if (!(item instanceof EnumColumn)) continue;\n\n queries.push(makePopulateEnumQuery(item));\n }\n\n if (ast.action === 'drop') {\n queries.push({\n text: `DROP TABLE ${quoteWithSchema(ast)}${\n ast.dropMode ? ` ${ast.dropMode}` : ''\n }`,\n });\n return queries;\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 queries.push(\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 queries.push({\n text: `COMMENT ON TABLE ${quoteWithSchema(ast)} IS ${quote(ast.comment)}`,\n });\n }\n\n return queries;\n};\n","import {\n ColumnType,\n resetTableData,\n getTableData,\n TableData,\n columnTypes,\n quote,\n getRaw,\n EnumColumn,\n} from 'pqb';\nimport {\n EmptyObject,\n emptyObject,\n RawExpression,\n isRaw,\n ColumnTypesBase,\n nameKey,\n snakeCaseKey,\n} from 'orchid-core';\nimport {\n ChangeTableCallback,\n ChangeTableOptions,\n ColumnComment,\n DropMode,\n MigrationBase,\n MigrationColumnTypes,\n} from './migration';\nimport { RakeDbAst } from '../ast';\nimport {\n getSchemaAndTableFromName,\n makePopulateEnumQuery,\n quoteWithSchema,\n} from '../common';\nimport {\n addColumnComment,\n addColumnIndex,\n columnToSql,\n commentsToQuery,\n constraintToSql,\n indexesToQuery,\n primaryKeyToSql,\n} from './migrationUtils';\nimport { tableMethods } from './tableMethods';\nimport { TableQuery } from './createTable';\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 this: ColumnTypesBase,\n item: ColumnType,\n options?: { dropMode?: DropMode },\n): RakeDbAst.ChangeTableItem.Column;\nfunction add(this: ColumnTypesBase, emptyObject: EmptyObject): EmptyObject;\nfunction add(\n this: ColumnTypesBase,\n items: Record<string, ColumnType>,\n options?: { dropMode?: DropMode },\n): Record<string, RakeDbAst.ChangeTableItem.Column>;\nfunction add(\n this: ColumnTypesBase,\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 if (this[nameKey]) {\n item.data.name = this[nameKey];\n }\n\n return {\n type: 'add',\n item,\n dropMode: options?.dropMode,\n };\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 = function (item, options) {\n if (item instanceof ColumnType) {\n if (this[nameKey]) {\n item.data.name = this[nameKey];\n }\n\n return {\n type: 'drop',\n item,\n dropMode: options?.dropMode,\n };\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.data.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 ...tableMethods,\n add,\n drop,\n change(\n this: ColumnTypesBase,\n from: ColumnType | Change,\n to: ColumnType | Change,\n options?: ChangeOptions,\n ): Change {\n return {\n type: 'change',\n name: this[nameKey],\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: MigrationBase,\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 (tableChanger as { [snakeCaseKey]?: boolean })[snakeCaseKey] =\n migration.options.snakeCase;\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 const result = await migration.adapter.arrays(query);\n query.then?.(result);\n }\n\n migration.migratedAsts.push(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): TableQuery[] => {\n const queries: TableQuery[] = [];\n\n if (ast.comment !== undefined) {\n queries.push({\n text: `COMMENT ON TABLE ${quoteWithSchema(ast)} IS ${quote(ast.comment)}`,\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' in item) {\n const { item: column } = item;\n if (column instanceof EnumColumn) {\n queries.push(makePopulateEnumQuery(column));\n }\n }\n\n if (item.type === 'add') {\n if (item.item.data.isPrimaryKey) {\n addPrimaryKeys.columns.push(key);\n }\n } else if (item.type === 'drop') {\n if (item.item.data.isPrimaryKey) {\n dropPrimaryKeys.columns.push(key);\n }\n } else if (item.type === 'change') {\n if (item.from.column instanceof EnumColumn) {\n queries.push(makePopulateEnumQuery(item.from.column));\n }\n\n if (item.to.column instanceof EnumColumn) {\n queries.push(makePopulateEnumQuery(item.to.column));\n }\n\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 \"${item.item.data.name || key}\"${\n item.dropMode ? ` ${item.dropMode}` : ''\n }`,\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 \"${item.name || 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 \"${item.name || key}\" ${expr}`);\n }\n\n if (from.nullable !== to.nullable) {\n alterTable.push(\n `ALTER COLUMN \"${item.name || key}\" ${\n to.nullable ? 'DROP' : 'SET'\n } NOT NULL`,\n );\n }\n\n if (from.compression !== to.compression) {\n alterTable.push(\n `ALTER COLUMN \"${item.name || 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 queries.push({\n text:\n `ALTER TABLE ${quoteWithSchema(ast)}` +\n `\\n ${alterTable.join(',\\n ')}`,\n values,\n });\n }\n\n queries.push(...indexesToQuery(false, ast, dropIndexes));\n queries.push(...indexesToQuery(true, ast, addIndexes));\n queries.push(...commentsToQuery(ast, comments));\n\n return queries;\n};\n","import {\n ColumnsShape,\n ColumnType,\n ColumnTypes,\n ForeignKeyOptions,\n IndexColumnOptions,\n IndexOptions,\n logParamToLogObject,\n QueryLogObject,\n Sql,\n TransactionAdapter,\n TextColumn,\n createDb,\n DbResult,\n DefaultColumnTypes,\n EnumColumn,\n quote,\n} from 'pqb';\nimport { MaybeArray, QueryInput, raw } from 'orchid-core';\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<\n ColumnTypes,\n 'text' | 'string' | 'enum'\n> & {\n text: TextColumnCreator;\n string: TextColumnCreator;\n enum: (name: string) => EnumColumn;\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 Migration = DbResult<DefaultColumnTypes> & MigrationBase;\n\nexport const createMigrationInterface = (\n tx: TransactionAdapter,\n up: boolean,\n options: RakeDbConfig,\n): Migration => {\n const adapter = new TransactionAdapter(tx, tx.client, tx.types);\n const { query, arrays } = adapter;\n const log = logParamToLogObject(options.logger || console, options.log);\n\n adapter.query = ((q, types) => {\n return wrapWithLog(log, q, () => query.call(adapter, q, types));\n }) as typeof adapter.query;\n\n adapter.arrays = ((q, types) => {\n return wrapWithLog(log, q, () => arrays.call(adapter, q, types));\n }) as typeof adapter.arrays;\n\n const db = createDb({ adapter }) as unknown as Migration;\n\n const { prototype: proto } = MigrationBase;\n for (const key of Object.getOwnPropertyNames(proto)) {\n (db as unknown as Record<string, unknown>)[key] =\n proto[key as keyof typeof proto];\n }\n\n db.migratedAsts = [];\n\n return Object.assign(db, {\n adapter,\n log,\n up,\n options,\n });\n};\n\nexport class MigrationBase {\n public adapter!: TransactionAdapter;\n public log?: QueryLogObject;\n public up!: boolean;\n public options!: RakeDbConfig;\n public migratedAsts!: RakeDbAst[];\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.adapter.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 this.migratedAsts.push(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: Omit<RakeDbAst.Extension, 'type' | 'action' | 'name'> = {},\n ) {\n return createExtension(this, this.up, name, options);\n }\n\n dropExtension(\n name: string,\n options: Omit<\n RakeDbAst.Extension,\n 'type' | 'action' | 'name' | 'values'\n > = {},\n ) {\n return createExtension(this, !this.up, name, options);\n }\n\n createEnum(\n name: string,\n values: [string, ...string[]],\n options?: Omit<RakeDbAst.Enum, 'type' | 'action' | 'name' | 'values'>,\n ) {\n return createEnum(this, this.up, name, values, options);\n }\n\n dropEnum(\n name: string,\n values: [string, ...string[]],\n options?: Omit<RakeDbAst.Enum, 'type' | 'action' | 'name' | 'values'>,\n ) {\n return createEnum(this, !this.up, name, values, 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: MigrationBase,\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: MigrationBase,\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: MigrationBase,\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: MigrationBase,\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: MigrationBase,\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.adapter.query(\n `${ast.action === 'create' ? 'CREATE' : 'DROP'} SCHEMA \"${name}\"`,\n );\n\n migration.migratedAsts.push(ast);\n};\n\nconst createExtension = async (\n migration: MigrationBase,\n up: boolean,\n name: string,\n options: Omit<RakeDbAst.Extension, 'type' | 'action' | 'name'>,\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.dropIfExists ? ' IF EXISTS' : ''} \"${\n ast.name\n }\"${ast.cascade ? ' CASCADE' : ''}`;\n } else {\n query = `CREATE EXTENSION${\n ast.createIfNotExists ? ' IF NOT EXISTS' : ''\n } \"${ast.name}\"${ast.schema ? ` SCHEMA \"${ast.schema}\"` : ''}${\n ast.version ? ` VERSION '${ast.version}'` : ''\n }${ast.cascade ? ' CASCADE' : ''}`;\n }\n\n await migration.adapter.query(query);\n\n migration.migratedAsts.push(ast);\n};\n\nconst createEnum = async (\n migration: MigrationBase,\n up: boolean,\n name: string,\n values: [string, ...string[]],\n options: Omit<RakeDbAst.Enum, 'type' | 'action' | 'name' | 'values'> = {},\n) => {\n const [schema, enumName] = getSchemaAndTableFromName(name);\n\n const ast: RakeDbAst.Enum = {\n type: 'enum',\n action: up ? 'create' : 'drop',\n schema,\n name: enumName,\n values,\n ...options,\n };\n\n let query;\n const quotedName = quoteWithSchema(ast);\n if (ast.action === 'create') {\n query = `CREATE TYPE ${quotedName} AS ENUM (${values\n .map(quote)\n .join(', ')})`;\n } else {\n query = `DROP TYPE${ast.dropIfExists ? ' IF EXISTS' : ''} ${quotedName}${\n ast.cascade ? ' CASCADE' : ''\n }`;\n }\n\n await migration.adapter.query(query);\n\n migration.migratedAsts.push(ast);\n};\n\nconst queryExists = (\n db: MigrationBase,\n sql: { text: string; values: unknown[] },\n) => {\n return db.adapter.query(sql).then(({ rowCount }) => rowCount > 0);\n};\n","import {\n Adapter,\n AdapterOptions,\n createDb,\n DbResult,\n DefaultColumnTypes,\n} from 'pqb';\nimport { MaybeArray, toArray, pathToLog } from 'orchid-core';\nimport {\n createSchemaMigrations,\n getMigrationFiles,\n RakeDbConfig,\n MigrationFile,\n quoteWithSchema,\n} from '../common';\nimport {\n clearChanges,\n ChangeCallback,\n getCurrentChanges,\n} from '../migration/change';\nimport { createMigrationInterface } from '../migration/migration';\nimport * as url from 'url';\n\nconst getDb = (adapter: Adapter) => createDb({ adapter });\n\nexport const 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 adapter = new Adapter(opts);\n let db: DbResult<DefaultColumnTypes> | undefined;\n\n if (up) {\n await config.beforeMigrate?.((db ??= getDb(adapter)));\n } else {\n await config.beforeRollback?.((db ??= getDb(adapter)));\n }\n\n const migratedVersions = await getMigratedVersionsMap(adapter, 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(\n adapter,\n up,\n file,\n config,\n opts,\n appCodeUpdaterCache,\n );\n\n config.logger?.log(\n `${up ? 'Migrated' : 'Rolled back'} ${pathToLog(file.path)}`,\n );\n }\n\n if (up) {\n await config.afterMigrate?.((db ??= getDb(adapter)));\n } else {\n await config.afterRollback?.((db ??= getDb(adapter)));\n }\n } finally {\n await adapter.close();\n }\n // use appCodeUpdater only for the first provided options\n delete config.appCodeUpdater;\n }\n};\n\nexport const 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 const asts = await db.transaction(async (tx) => {\n const db = createMigrationInterface(tx, up, config);\n clearChanges();\n\n let changes = changeCache[file.path];\n if (!changes) {\n try {\n await config.import(file.path);\n } catch (err) {\n // throw if unknown error\n if ((err as { code: string }).code !== 'ERR_UNSUPPORTED_ESM_URL_SCHEME')\n throw err;\n\n // this error happens on windows in ESM mode, try import transformed url\n await config.import(url.pathToFileURL(file.path).pathname);\n }\n changes = getCurrentChanges();\n changeCache[file.path] = changes;\n }\n\n for (const fn of up ? changes : changes.reverse()) {\n await fn(db, up);\n }\n\n await (up ? saveMigratedVersion : removeMigratedVersion)(\n db.adapter,\n file.version,\n config,\n );\n\n return db.migratedAsts;\n });\n\n for (const ast of asts) {\n await config.appCodeUpdater?.({\n ast,\n options,\n basePath: config.basePath,\n cache: appCodeUpdaterCache,\n logger: config.logger,\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 } from 'pqb';\nimport { MaybeArray, toArray } from 'orchid-core';\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<\n 'ok' | 'already' | 'forbidden' | 'ssl required' | { error: unknown }\n> => {\n const db = new Adapter(options);\n\n try {\n await db.query(sql);\n return 'ok';\n } catch (error) {\n const err = error as Record<string, unknown>;\n\n if (\n typeof err.message === 'string' &&\n err.message.includes('sslmode=require')\n ) {\n return 'ssl required';\n }\n\n if (err.code === '42P04' || err.code === '3D000') {\n return 'already';\n } else if (\n err.code === '42501' ||\n (typeof err.message === 'string' &&\n err.message.includes('password authentication failed'))\n ) {\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: Pick<RakeDbConfig, 'migrationsTable' | 'logger'>,\n args: {\n sql(params: { database: string; user: string }): string;\n successMessage(params: { database: string }): string;\n alreadyMessage(params: { database: string }): string;\n create?: 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 config.logger?.log(args.successMessage(params));\n } else if (result === 'already') {\n config.logger?.log(args.alreadyMessage(params));\n } else if (result === 'ssl required') {\n config.logger?.log(\n 'SSL is required: append ?ssl=true to the database url string',\n );\n return;\n } else if (result === 'forbidden') {\n let message = `Permission denied to ${\n args.create ? 'create' : 'drop'\n } database.`;\n\n const host = adminOptions.databaseURL\n ? new URL(adminOptions.databaseURL).hostname\n : adminOptions.host;\n\n const isLocal = host === 'localhost';\n if (!isLocal) {\n message += `\\nDon't use this command for database service providers, only for a local db.`;\n }\n\n config.logger?.log(message);\n\n const updatedOptions = await setAdminCredentialsToOptions(\n options,\n args.create,\n );\n if (!updatedOptions) return;\n\n await createOrDrop(options, updatedOptions, config, args);\n return;\n } else {\n throw result.error;\n }\n\n if (!args.create) 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 create: 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';\nimport { pathToLog } from 'orchid-core';\n\nexport const writeMigrationFile = async (\n config: RakeDbConfig,\n name: string,\n content: string,\n) => {\n await mkdir(config.migrationsPath, { recursive: true });\n\n const filePath = path.resolve(\n config.migrationsPath,\n `${makeFileTimeStamp()}_${name}.ts`,\n );\n await writeFile(filePath, content);\n config.logger?.log(`Created ${pathToLog(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 typeSchema: string;\n type: string;\n // ARRAY for arrays, USER-DEFINED for custom types\n dataType: 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 export type Enum = {\n schemaName: string;\n name: string;\n values: [string, ...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 udt_schema \"typeSchema\",\n data_type \"dataType\",\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 async getEnums() {\n const { rows } = await this.db.query<DbStructure.Enum>(\n `SELECT\n n.nspname as \"schemaName\",\n t.typname as name,\n json_agg(e.enumlabel) as values\nFROM pg_type t\nJOIN pg_enum e ON t.oid = e.enumtypid\nJOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace\nWHERE ${filterSchema('n.nspname')}\nGROUP BY n.nspname, t.typname`,\n );\n return rows;\n }\n}\n","import { DbStructure } from './dbStructure';\nimport { RakeDbAst } from '../ast';\nimport {\n ArrayColumn,\n columnCode,\n columnsByType,\n ColumnsShape,\n ColumnType,\n EnumColumn,\n ForeignKeyOptions,\n instantiateColumn,\n TableData,\n} from 'pqb';\nimport { Code, singleQuote } from 'orchid-core';\nimport { getForeignKeyName, getIndexName } from '../migration/migrationUtils';\n\nexport class RakeDbEnumColumn extends EnumColumn<\n string,\n [string, ...string[]]\n> {\n toCode(t: string): Code {\n return columnCode(this, t, `enum('${this.enumName}')`);\n }\n}\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\ntype Data = {\n schemas: string[];\n tables: DbStructure.Table[];\n columns: DbStructure.Column[];\n primaryKeys: DbStructure.PrimaryKey[];\n indexes: DbStructure.Index[];\n foreignKeys: DbStructure.ForeignKey[];\n extensions: DbStructure.Extension[];\n enums: DbStructure.Enum[];\n};\n\ntype PendingTables = Record<\n string,\n { table: DbStructure.Table; dependsOn: Set<string> }\n>;\n\nexport const structureToAst = async (db: DbStructure): Promise<RakeDbAst[]> => {\n const ast: RakeDbAst[] = [];\n\n const data = await getData(db);\n\n for (const name of data.schemas) {\n if (name === 'public') continue;\n\n ast.push({\n type: 'schema',\n action: 'create',\n name,\n });\n }\n\n const pendingTables: PendingTables = {};\n for (const table of data.tables) {\n const key = `${table.schemaName}.${table.name}`;\n const dependsOn = new Set<string>();\n\n for (const fk of data.foreignKeys) {\n if (fk.schemaName !== table.schemaName || fk.tableName !== table.name)\n continue;\n\n const otherKey = `${fk.foreignTableSchemaName}.${fk.foreignTableName}`;\n if (otherKey !== key) {\n dependsOn.add(otherKey);\n }\n }\n\n pendingTables[key] = { table, dependsOn };\n }\n\n for (const key in pendingTables) {\n const { table, dependsOn } = pendingTables[key];\n if (!dependsOn.size) {\n pushTableAst(ast, data, table, pendingTables);\n }\n }\n\n const outerFKeys: [DbStructure.ForeignKey, DbStructure.Table][] = [];\n\n for (const it of data.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 for (const it of data.enums) {\n ast.push({\n type: 'enum',\n action: 'create',\n name: it.name,\n schema: it.schemaName === 'public' ? undefined : it.schemaName,\n values: it.values,\n });\n }\n\n for (const key in pendingTables) {\n const innerFKeys: DbStructure.ForeignKey[] = [];\n const { table } = pendingTables[key];\n\n for (const fkey of data.foreignKeys) {\n if (fkey.schemaName !== table.schemaName || fkey.tableName !== table.name)\n continue;\n\n const otherKey = `${fkey.foreignTableSchemaName}.${fkey.foreignTableName}`;\n if (!pendingTables[otherKey] || otherKey === key) {\n innerFKeys.push(fkey);\n } else {\n outerFKeys.push([fkey, table]);\n }\n }\n\n pushTableAst(ast, data, table, pendingTables, innerFKeys);\n }\n\n for (const [fkey, table] of outerFKeys) {\n ast.push({\n ...foreignKeyToAst(fkey),\n type: 'foreignKey',\n action: 'create',\n tableSchema: table.schemaName === 'public' ? undefined : table.schemaName,\n tableName: fkey.tableName,\n });\n }\n\n return ast;\n};\n\nconst getData = async (db: DbStructure): Promise<Data> => {\n const [\n schemas,\n tables,\n columns,\n primaryKeys,\n indexes,\n foreignKeys,\n extensions,\n enums,\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 db.getEnums(),\n ]);\n\n return {\n schemas,\n tables,\n columns,\n primaryKeys,\n indexes,\n foreignKeys,\n extensions,\n enums,\n };\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 = (type: string, isSerial: boolean) => {\n if (!isSerial) return type;\n\n return type === 'int2'\n ? 'smallserial'\n : type === 'int4'\n ? 'serial'\n : 'bigserial';\n};\n\nconst pushTableAst = (\n ast: RakeDbAst[],\n data: Data,\n table: DbStructure.Table,\n pendingTables: PendingTables,\n innerFKeys = data.foreignKeys,\n) => {\n const { schemaName, name } = table;\n\n const key = `${schemaName}.${table.name}`;\n delete pendingTables[key];\n\n if (name === 'schemaMigrations') return;\n\n const belongsToTable = makeBelongsToTable(schemaName, name);\n\n const columns = data.columns.filter(belongsToTable);\n const primaryKey = data.primaryKeys.find(belongsToTable);\n const tableIndexes = data.indexes.filter(belongsToTable);\n const tableForeignKeys = innerFKeys.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 let column: ColumnType;\n\n const isArray = item.dataType === 'ARRAY';\n const type = isArray ? item.type.slice(1) : item.type;\n const klass = columnsByType[getColumnType(type, isSerial)];\n if (klass) {\n column = instantiateColumn(klass, item);\n } else {\n const { type, typeSchema } = item;\n const enumType = data.enums.find(\n (item) => item.name === type && item.schemaName === typeSchema,\n );\n if (!enumType) {\n throw new Error(\n `Cannot handle column ${item.schemaName}.${item.tableName}.${item.name}: column type \\`${item.type}\\` is not supported`,\n );\n }\n\n column = new RakeDbEnumColumn({}, type, enumType.values);\n }\n\n if (isArray) column = new ArrayColumn({}, column);\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 !== 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 delete column.data.name;\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(foreignKeyToAst),\n });\n\n for (const otherKey in pendingTables) {\n const item = pendingTables[otherKey];\n if (item.dependsOn.delete(key) && item.dependsOn.size === 0) {\n pushTableAst(ast, data, item.table, pendingTables);\n }\n }\n};\n\nconst foreignKeyToAst = (\n fkey: DbStructure.ForeignKey,\n): TableData.ForeignKey => ({\n columns: fkey.columnNames,\n fnOrTable: fkey.foreignTableName,\n foreignColumns: fkey.foreignColumnNames,\n options: {\n name:\n fkey.name &&\n fkey.name !== getForeignKeyName(fkey.tableName, fkey.columnNames)\n ? fkey.name\n : undefined,\n match: matchMap[fkey.match],\n onUpdate: fkeyActionMap[fkey.onUpdate],\n onDelete: fkeyActionMap[fkey.onDelete],\n } as ForeignKeyOptions,\n});\n","import { RakeDbAst } from '../ast';\nimport {\n codeToString,\n ColumnType,\n foreignKeyArgsToCode,\n foreignKeyToCode,\n indexToCode,\n primaryKeyToCode,\n TimestampColumn,\n} from 'pqb';\nimport { addCode, Code, isRaw, quoteObjectKey, singleQuote } from 'orchid-core';\nimport { quoteSchemaTable, RakeDbConfig } from '../common';\n\nexport const astToMigration = (\n config: RakeDbConfig,\n ast: RakeDbAst[],\n): string | undefined => {\n const first: Code[] = [];\n const tables: Code[] = [];\n const foreignKeys: Code[] = [];\n for (const item of ast) {\n if (item.type === 'schema' && item.action === 'create') {\n first.push(createSchema(item));\n } else if (item.type === 'extension' && item.action === 'create') {\n if (first.length) first.push([]);\n first.push(...createExtension(item));\n } else if (item.type === 'enum' && item.action === 'create') {\n if (first.length) first.push([]);\n first.push(...createEnum(item));\n } else if (item.type === 'table' && item.action === 'create') {\n tables.push(createTable(config, item));\n } else if (item.type === 'foreignKey') {\n if (foreignKeys.length) foreignKeys.push([]);\n foreignKeys.push(...createForeignKey(item));\n }\n }\n\n if (!first.length && !tables.length && !foreignKeys.length) return;\n\n let code = `import { change } from 'rake-db';\n`;\n\n if (first.length) {\n code += `\nchange(async (db) => {\n${codeToString(first, ' ', ' ')}\n});\n`;\n }\n\n if (tables.length) {\n for (const table of tables) {\n code += `\nchange(async (db) => {\n${codeToString(table, ' ', ' ')}\n});\n`;\n }\n }\n\n if (foreignKeys.length) {\n code += `\nchange(async (db) => {\n${codeToString(foreignKeys, ' ', ' ')}\n});\n`;\n }\n\n return code;\n};\n\nconst createSchema = (ast: RakeDbAst.Schema) => {\n return `await db.createSchema(${singleQuote(ast.name)});`;\n};\n\nconst createExtension = (ast: RakeDbAst.Extension): Code[] => {\n const code: Code[] = [`await db.createExtension(${singleQuote(ast.name)}`];\n if (ast.schema || ast.version) {\n addCode(code, ', {');\n if (ast.schema) {\n code.push([`schema: ${singleQuote(ast.schema)},`]);\n }\n if (ast.version) {\n code.push([`version: ${singleQuote(ast.version)},`]);\n }\n addCode(code, '}');\n }\n addCode(code, ');');\n return code;\n};\n\nconst createEnum = (ast: RakeDbAst.Enum) => {\n const code: Code[] = [\n `await db.createEnum(${singleQuote(ast.name)}, [${ast.values\n .map(singleQuote)\n .join(', ')}]`,\n ];\n if (ast.schema) {\n addCode(code, ', {');\n code.push([`schema: ${singleQuote(ast.schema)},`]);\n addCode(code, '}');\n }\n addCode(code, ');');\n return code;\n};\n\nconst createTable = (config: RakeDbConfig, ast: RakeDbAst.Table) => {\n const code: Code[] = [];\n addCode(code, `await db.createTable(${quoteSchemaTable(ast)}, (t) => ({`);\n\n const hasTimestamps =\n !config.snakeCase &&\n isTimestamp(ast.shape.createdAt) &&\n isTimestamp(ast.shape.updatedAt);\n\n const hasTimestampsSnake =\n isTimestamp(ast.shape.created_at) && isTimestamp(ast.shape.updated_at);\n\n for (const key in ast.shape) {\n if (hasTimestamps && (key === 'createdAt' || key === 'updatedAt')) continue;\n if (hasTimestampsSnake && (key === 'created_at' || key === 'updated_at'))\n 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 || (config.snakeCase && hasTimestampsSnake)) {\n code.push(['...t.timestamps(),']);\n }\n\n if (hasTimestampsSnake && !config.snakeCase) {\n code.push(['...t.timestampsSnakeCase(),']);\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\nconst createForeignKey = (item: RakeDbAst.ForeignKey): Code[] => {\n return [\n `await db.addForeignKey(`,\n [\n `${quoteSchemaTable({\n schema: item.tableSchema,\n name: item.tableName,\n })},`,\n ...foreignKeyArgsToCode(item),\n ],\n ');',\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(config, ast);\n if (!result) return;\n\n await writeMigrationFile(config, 'pull', result);\n};\n","import { AdapterOptions } from 'pqb';\nimport { MaybeArray, toArray } from 'orchid-core';\nimport { createDb, dropDb, resetDb } from './commands/createOrDrop';\nimport { migrate, rollback } from './commands/migrateOrRollback';\nimport { processRakeDbConfig, RakeDbConfig } from './common';\nimport { generate } from './commands/generate';\nimport { pullDbStructure } from './pull/pull';\nimport { RakeDbError } from './errors';\n\nexport const rakeDb = async (\n options: MaybeArray<AdapterOptions>,\n partialConfig: Partial<RakeDbConfig> = {},\n args: string[] = process.argv.slice(2),\n) => {\n const config = processRakeDbConfig(partialConfig);\n\n const command = args[0]?.split(':')[0];\n\n try {\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 if (config.commands[command]) {\n await config.commands[command](toArray(options), config, args.slice(1));\n } else {\n config.logger?.log(help);\n }\n } catch (err) {\n if (err instanceof RakeDbError) {\n config.logger?.error(err.message);\n process.exit(1);\n }\n throw err;\n }\n};\n\nconst help = `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"],"names":["path","__spreadValues","__spreadProps","prompts","readdir","singleQuote","quote","isRaw","getRaw","toArray","EnumColumn","columnTypes","createTable","snakeCaseKey","getColumnTypes","getTableData","makeAst","astToQueries","ColumnType","nameKey","emptyObject","resetTableData","changeTableData","TransactionAdapter","logParamToLogObject","createDb","createSchema","createExtension","createEnum","Adapter","pathToLog","db","url","mkdir","writeFile","method","columnCode","columnsByType","instantiateColumn","type","item","ArrayColumn","codeToString","addCode","quoteObjectKey","primaryKeyToCode","indexToCode","foreignKeyToCode","TimestampColumn","foreignKeyArgsToCode"],"mappings":"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"}
|