-
Notifications
You must be signed in to change notification settings - Fork 176
/
dropColumns.ts
32 lines (26 loc) · 946 Bytes
/
dropColumns.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import type { MigrationOptions } from '../../types';
import { formatLines } from '../../utils';
import type { DropOptions, Name } from '../generalTypes';
export type DropColumns = (
tableName: Name,
columns: string | string[] | { [name: string]: unknown },
dropOptions?: DropOptions
) => string | string[];
export function dropColumns(mOptions: MigrationOptions): DropColumns {
const _drop: DropColumns = (tableName, columns, options = {}) => {
const { ifExists, cascade } = options;
if (typeof columns === 'string') {
columns = [columns];
} else if (!Array.isArray(columns) && typeof columns === 'object') {
columns = Object.keys(columns);
}
const columnsStr = formatLines(
columns.map(mOptions.literal),
` DROP ${ifExists ? 'IF EXISTS ' : ''}`,
`${cascade ? ' CASCADE' : ''},`
);
return `ALTER TABLE ${mOptions.literal(tableName)}
${columnsStr};`;
};
return _drop;
}