datasquirel/dist/package-shared/shell/utils/createTable.js
Benjamin Toby 7e8bb37c09 Updates
2025-07-05 14:59:30 +01:00

56 lines
2.1 KiB
JavaScript

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;
}