import buildColumnDefinition from "./build-column-definition"; import buildForeignKeyConstraint from "./build-foreign-key-constraint"; import buildTableOptions from "./build-table-options"; import MariaDBQuoteGen from "./mariadb-quote-gen"; import runSchemaQuery from "./run-schema-query"; export default async function createTable({ table, config, }) { if (!table.tableName.match(/_temp_\d+$/)) { console.log(`Creating table: ${table.tableName}`); } const columnDefinitions = []; const foreignKeys = []; const primaryKeys = []; for (const field of table.fields || []) { columnDefinitions.push(buildColumnDefinition(field)); if (field.primaryKey && field.fieldName) { primaryKeys.push(field.fieldName); } if (field.foreignKey && !table.isVector) { foreignKeys.push(buildForeignKeyConstraint(field, table.tableName)); } } if (primaryKeys.length > 0) { const pkCols = primaryKeys.map((k) => MariaDBQuoteGen(k)).join(", "); columnDefinitions.push(`PRIMARY KEY (${pkCols})`); } if (table.uniqueConstraints) { for (const constraint of table.uniqueConstraints) { const columns = (constraint.constraintTableFields || []) .map((field) => field.value) .filter((value) => Boolean(value)); if (columns.length === 0) { continue; } const fields = columns.map((col) => MariaDBQuoteGen(col)).join(", "); const constraintName = constraint.constraintName || `unique_${columns.join("_")}`; columnDefinitions.push(`CONSTRAINT ${MariaDBQuoteGen(constraintName)} UNIQUE (${fields})`); } } const sql = `CREATE TABLE IF NOT EXISTS ${MariaDBQuoteGen(table.tableName)} (${[...columnDefinitions, ...foreignKeys].join(", ")})${buildTableOptions(table)}`; await runSchemaQuery({ query: sql, config }); }