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

54 lines
1.7 KiB
TypeScript

import grabSQLKeyName from "../../utils/grab-sql-key-name";
import varDatabaseDbHandler from "./varDatabaseDbHandler";
type Param = {
dbFullName: string;
tableName: string;
};
/**
* # Drop All Foreign Keys
*/
export default async function dropAllForeignKeys({
dbFullName,
tableName,
}: Param) {
try {
// const rows = await varDatabaseDbHandler({
// queryString: `SELECT CONSTRAINT_NAME FROM information_schema.REFERENTIAL_CONSTRAINTS WHERE TABLE_NAME = '${tableName}' AND CONSTRAINT_SCHEMA = '${dbFullName}'`,
// });
// console.log("rows", rows);
// console.log("dbFullName", dbFullName);
// console.log("tableName", tableName);
// for (const row of rows) {
// await varDatabaseDbHandler({
// queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP FOREIGN KEY \`${row.CONSTRAINT_NAME}\`
// `,
// });
// }
const foreignKeys = await varDatabaseDbHandler({
queryString: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\` WHERE Key_name LIKE '${grabSQLKeyName(
{ type: "foreign_key" }
)}%'`,
});
for (const fk of foreignKeys) {
if (
fk.Key_name.match(
new RegExp(grabSQLKeyName({ type: "foreign_key" }))
)
) {
await varDatabaseDbHandler({
queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP INDEX \`${fk.Key_name}\`
`,
});
}
}
} catch (error: any) {
console.log(`dropAllForeignKeys ERROR => ${error.message}`);
}
}