import varDatabaseDbHandler from "./varDatabaseDbHandler"; import generateColumnDescription from "./generateColumnDescription"; import supplementTable from "./supplementTable"; import handleTableForeignKey from "./handle-table-foreign-key"; import createTableHandleTableRecord from "./create-table-handle-table-record"; /** * # Create Table Functions */ export default async function createTable({ dbFullName, tableName, tableInfoArray, tableSchema, recordedDbEntry, isMain, }) { const finalTable = supplementTable({ tableInfoArray: tableInfoArray }); let tableId = await createTableHandleTableRecord({ recordedDbEntry, tableSchema, isMain, }); if (!tableId && !isMain) throw new Error(`Couldn't grab table ID`); const createTableQueryArray = []; createTableQueryArray.push(`CREATE TABLE IF NOT EXISTS \`${dbFullName}\`.\`${tableName}\` (`); let primaryKeySet = false; for (let i = 0; i < finalTable.length; i++) { const column = finalTable[i]; let { fieldEntryText, newPrimaryKeySet } = generateColumnDescription({ columnData: column, primaryKeySet: primaryKeySet, }); primaryKeySet = newPrimaryKeySet; const comma = (() => { if (i === finalTable.length - 1) return ""; return ","; })(); createTableQueryArray.push(" " + fieldEntryText + comma); } createTableQueryArray.push(`) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;`); const createTableQuery = createTableQueryArray.join("\n"); const newTable = await varDatabaseDbHandler({ queryString: createTableQuery, }); for (let i = 0; i < finalTable.length; i++) { const column = finalTable[i]; const { foreignKey, fieldName } = column; if (!fieldName) continue; if (foreignKey) { await handleTableForeignKey({ dbFullName, foreignKey, tableName, fieldName, }); } } return tableId; }