immich/server/src/sql-tools/to-sql/transformers/table.transformer.ts
Jason Rasmussen e7a5b96ed0
feat: extension, triggers, functions, comments, parameters management in sql-tools (#17269)
feat: sql-tools extension, triggers, functions, comments, parameters
2025-04-07 15:12:12 -04:00

45 lines
1.3 KiB
TypeScript

import { asColumnComment, getColumnModifiers, getColumnType } from 'src/sql-tools/helpers';
import { asColumnAlter } from 'src/sql-tools/to-sql/transformers/column.transformer';
import { SqlTransformer } from 'src/sql-tools/to-sql/transformers/types';
import { DatabaseTable, SchemaDiff } from 'src/sql-tools/types';
export const transformTables: SqlTransformer = (item: SchemaDiff) => {
switch (item.type) {
case 'table.create': {
return asTableCreate(item.table);
}
case 'table.drop': {
return asTableDrop(item.tableName);
}
default: {
return false;
}
}
};
const asTableCreate = (table: DatabaseTable): string[] => {
const tableName = table.name;
const columnsTypes = table.columns
.map((column) => `"${column.name}" ${getColumnType(column)}` + getColumnModifiers(column))
.join(', ');
const items = [`CREATE TABLE "${tableName}" (${columnsTypes});`];
for (const column of table.columns) {
if (column.comment) {
items.push(asColumnComment(tableName, column.name, column.comment));
}
if (column.storage) {
items.push(...asColumnAlter(tableName, column.name, { storage: column.storage }));
}
}
return items;
};
const asTableDrop = (tableName: string): string => {
return `DROP TABLE "${tableName}";`;
};