import isVectorField from "./is-vector-field"; import mapDataType from "./map-data-types"; import MariaDBQuoteGen from "./mariadb-quote-gen"; export default function buildColumnDefinition(field) { if (!field.fieldName) { throw new Error("Field name is required"); } const parts = [MariaDBQuoteGen(field.fieldName)]; parts.push(mapDataType(field)); if (field.autoIncrement) { parts.push("AUTO_INCREMENT"); } // Vector columns used in VECTOR INDEX must be NOT NULL if (field.notNullValue || field.primaryKey || isVectorField(field)) { if (!field.primaryKey) { parts.push("NOT NULL"); } } // VECTOR columns cannot be UNIQUE in the usual sense if (field.unique && !field.primaryKey && !isVectorField(field)) { parts.push("UNIQUE"); } if (field.defaultValue !== undefined) { if (typeof field.defaultValue === "string") { parts.push(`DEFAULT '${field.defaultValue.replace(/'/g, "''")}'`); } else { parts.push(`DEFAULT ${field.defaultValue}`); } } else if (field.defaultValueLiteral) { parts.push(`DEFAULT ${field.defaultValueLiteral}`); } if (field.onUpdate) { parts.push(`ON UPDATE ${field.onUpdate}`); } else if (field.onUpdateLiteral) { parts.push(`ON UPDATE ${field.onUpdateLiteral}`); } return parts.join(" "); }