feat: create table with constraints (#19828)

This commit is contained in:
Jason Rasmussen
2025-07-09 09:13:14 -04:00
committed by GitHub
parent 4db76ddcf0
commit 51ab7498e9
7 changed files with 170 additions and 60 deletions

View File

@@ -1,5 +1,8 @@
import { asColumnComment, getColumnModifiers, getColumnType } from 'src/sql-tools/helpers';
import { asColumnAlter } from 'src/sql-tools/transformers/column.transformer';
import { asConstraintBody } from 'src/sql-tools/transformers/constraint.transformer';
import { asIndexCreate } from 'src/sql-tools/transformers/index.transformer';
import { asTriggerCreate } from 'src/sql-tools/transformers/trigger.transformer';
import { SqlTransformer } from 'src/sql-tools/transformers/types';
import { DatabaseTable } from 'src/sql-tools/types';
@@ -19,26 +22,41 @@ export const transformTables: SqlTransformer = (ctx, item) => {
}
};
const asTableCreate = (table: DatabaseTable): string[] => {
const asTableCreate = (table: DatabaseTable) => {
const tableName = table.name;
const columnsTypes = table.columns
.map((column) => `"${column.name}" ${getColumnType(column)}` + getColumnModifiers(column))
.join(', ');
const items = [`CREATE TABLE "${tableName}" (${columnsTypes});`];
const items: string[] = [];
for (const column of table.columns) {
items.push(`"${column.name}" ${getColumnType(column)}${getColumnModifiers(column)}`);
}
for (const constraint of table.constraints) {
items.push(asConstraintBody(constraint));
}
const sql = [`CREATE TABLE "${tableName}" (\n ${items.join(',\n ')}\n);`];
for (const column of table.columns) {
if (column.comment) {
items.push(asColumnComment(tableName, column.name, column.comment));
sql.push(asColumnComment(tableName, column.name, column.comment));
}
if (column.storage) {
items.push(...asColumnAlter(tableName, column.name, { storage: column.storage }));
sql.push(...asColumnAlter(tableName, column.name, { storage: column.storage }));
}
}
return items;
for (const index of table.indexes) {
sql.push(asIndexCreate(index));
}
for (const trigger of table.triggers) {
sql.push(asTriggerCreate(trigger));
}
return sql;
};
const asTableDrop = (tableName: string): string => {
const asTableDrop = (tableName: string) => {
return `DROP TABLE "${tableName}";`;
};