52 lines
1.6 KiB
TypeScript
52 lines
1.6 KiB
TypeScript
import varDatabaseDbHandler from "./varDatabaseDbHandler";
|
|
import { DSQL_ForeignKeyType } from "../../types";
|
|
|
|
type Param = {
|
|
dbFullName: string;
|
|
tableName: string;
|
|
foreignKey: DSQL_ForeignKeyType;
|
|
fieldName: string;
|
|
errorLogs?: any[];
|
|
};
|
|
|
|
/**
|
|
* # Update table function
|
|
*/
|
|
export default async function handleTableForeignKey({
|
|
dbFullName,
|
|
tableName,
|
|
foreignKey,
|
|
errorLogs,
|
|
fieldName,
|
|
}: Param) {
|
|
const {
|
|
destinationTableName,
|
|
destinationTableColumnName,
|
|
cascadeDelete,
|
|
cascadeUpdate,
|
|
foreignKeyName,
|
|
} = foreignKey;
|
|
|
|
let finalQueryString = `ALTER TABLE \`${dbFullName}\`.\`${tableName}\``;
|
|
|
|
finalQueryString += ` ADD CONSTRAINT \`${foreignKeyName}\` FOREIGN KEY (\`${fieldName}\`)`;
|
|
finalQueryString += ` REFERENCES \`${destinationTableName}\`(\`${destinationTableColumnName}\`)`;
|
|
|
|
if (cascadeDelete) finalQueryString += ` ON DELETE CASCADE`;
|
|
if (cascadeUpdate) finalQueryString += ` ON UPDATE CASCADE`;
|
|
|
|
// let foreinKeyText = `ADD CONSTRAINT \`${foreignKeyName}\` FOREIGN KEY (\`${destinationTableColumnType}\`) REFERENCES \`${destinationTableName}\`(\`${destinationTableColumnName}\`)${
|
|
// cascadeDelete ? " ON DELETE CASCADE" : ""
|
|
// }${cascadeUpdate ? " ON UPDATE CASCADE" : ""}`;
|
|
|
|
// let finalQueryString = `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` ${foreinKeyText}`;
|
|
|
|
const addForeignKey = await varDatabaseDbHandler({
|
|
queryString: finalQueryString,
|
|
});
|
|
|
|
if (!addForeignKey?.serverStatus) {
|
|
errorLogs?.push(addForeignKey);
|
|
}
|
|
}
|