"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = createTable; const generateColumnDescription_1 = __importDefault(require("./generateColumnDescription")); const supplementTable_1 = __importDefault(require("./supplementTable")); const handle_table_foreign_key_1 = __importDefault(require("./handle-table-foreign-key")); const create_table_handle_table_record_1 = __importDefault(require("./create-table-handle-table-record")); const dbHandler_1 = __importDefault(require("../../functions/backend/dbHandler")); const handle_indexes_1 = __importDefault(require("../createDbFromSchema/handle-indexes")); const handle_unique_constraints_1 = __importDefault(require("../createDbFromSchema/handle-unique-constraints")); /** * # Create Table Functions */ function createTable(_a) { return __awaiter(this, arguments, void 0, function* ({ dbFullName, tableName, fields: passedFields, tableSchema, recordedDbEntry, isMain, indexes, uniqueConstraints, }) { const fields = (0, supplementTable_1.default)({ tableInfoArray: passedFields }); let tableId = yield (0, create_table_handle_table_record_1.default)({ 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 < fields.length; i++) { const column = fields[i]; let { fieldEntryText, newPrimaryKeySet } = (0, generateColumnDescription_1.default)({ columnData: column, primaryKeySet: primaryKeySet, }); primaryKeySet = newPrimaryKeySet; const comma = (() => { if (i === fields.length - 1) return ""; return ","; })(); createTableQueryArray.push(" " + fieldEntryText + comma); } createTableQueryArray.push(`) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=${(tableSchema === null || tableSchema === void 0 ? void 0 : tableSchema.collation) || "utf8mb4_bin"};`); const createTableQuery = createTableQueryArray.join("\n"); const newTable = yield (0, dbHandler_1.default)({ query: createTableQuery, }); /** * Handle MYSQL Foreign Keys * =================================================== * @description Iterate through each datasquirel schema * table index(if available), and perform operations */ yield (0, handle_table_foreign_key_1.default)({ dbFullName, fields, tableName, }); /** * Handle DATASQUIREL Table Indexes * =================================================== * @description Iterate through each datasquirel schema * table index(if available), and perform operations */ if (indexes === null || indexes === void 0 ? void 0 : indexes[0]) { (0, handle_indexes_1.default)({ dbFullName, indexes, tableName, }); } /** * Handle DATASQUIREL Table Unique Indexes * =================================================== * @description Iterate through each datasquirel schema * table unique constraint(if available), and perform operations */ if (uniqueConstraints === null || uniqueConstraints === void 0 ? void 0 : uniqueConstraints[0]) { (0, handle_unique_constraints_1.default)({ dbFullName, tableUniqueConstraints: uniqueConstraints, tableName, }); } return tableId; }); }