86 lines
2.2 KiB
TypeScript
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,
|
|
};
|
|
}
|