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

86 lines
2.2 KiB
TypeScript

import { DSQL_FieldSchemaType } from "../../types";
import dataTypeConstructor from "../../utils/db/schema/data-type-constructor";
import dataTypeParser from "../../utils/db/schema/data-type-parser";
type Param = {
columnData: DSQL_FieldSchemaType;
primaryKeySet?: boolean;
};
type Return = {
fieldEntryText: string;
newPrimaryKeySet: boolean;
};
/**
* # Generate Table Column Description
*/
export default function generateColumnDescription({
columnData,
primaryKeySet,
}: Param): Return {
const {
fieldName,
dataType,
nullValue,
primaryKey,
autoIncrement,
defaultValue,
defaultValueLiteral,
onUpdateLiteral,
notNullValue,
unique,
} = columnData;
let fieldEntryText = "";
const finalDataTypeObject = dataTypeParser(dataType);
const finalDataType = dataTypeConstructor(
finalDataTypeObject.type,
finalDataTypeObject.limit,
finalDataTypeObject.decimal
);
fieldEntryText += `\`${fieldName}\` ${finalDataType}`;
if (nullValue) {
fieldEntryText += " DEFAULT NULL";
} else if (defaultValueLiteral) {
fieldEntryText += ` DEFAULT ${defaultValueLiteral}`;
} else if (defaultValue) {
if (String(defaultValue).match(/uuid\(\)/i)) {
fieldEntryText += ` DEFAULT UUID()`;
} else {
fieldEntryText += ` DEFAULT '${String(defaultValue)
.replace(/^\'|\'$/g, "")
.replace(/\'/g, "\\'")}'`;
}
} else if (notNullValue) {
fieldEntryText += ` NOT NULL`;
}
if (onUpdateLiteral) {
fieldEntryText += ` ON UPDATE ${onUpdateLiteral}`;
}
if (primaryKey && !primaryKeySet) {
fieldEntryText += " PRIMARY KEY";
primaryKeySet = true;
}
if (autoIncrement) {
fieldEntryText += " AUTO_INCREMENT";
primaryKeySet = true;
}
if (unique) {
fieldEntryText += " UNIQUE";
primaryKeySet = true;
}
return {
fieldEntryText,
newPrimaryKeySet: primaryKeySet || false,
};
}