39 lines
1.1 KiB
TypeScript
39 lines
1.1 KiB
TypeScript
import { parseArgs } from "@lib/char";
|
|
import { type ReservedSQL, sql } from "bun";
|
|
|
|
(async (): Promise<void> => {
|
|
try {
|
|
const args: Record<string, string | boolean> = parseArgs();
|
|
const table: string | undefined = args.table as string | undefined;
|
|
const cascade: boolean = args.cascade === true;
|
|
|
|
if (!table) {
|
|
throw new Error("Missing required argument: --table <table_name>");
|
|
}
|
|
|
|
const reservation: ReservedSQL = await sql.reserve();
|
|
|
|
try {
|
|
await reservation`TRUNCATE TABLE ${sql(table)} ${cascade ? sql`CASCADE` : sql``};`;
|
|
console.log(
|
|
`Table ${table} has been cleared${cascade ? " with CASCADE" : ""}.`,
|
|
);
|
|
} catch (error) {
|
|
if (
|
|
error instanceof Error &&
|
|
error.message.includes("foreign key constraint")
|
|
) {
|
|
console.error(
|
|
`Could not clear table "${table}" due to foreign key constraints.\nTry using --cascade if you want to remove dependent records.`,
|
|
);
|
|
} else {
|
|
console.error("Could not clear table:", error);
|
|
}
|
|
} finally {
|
|
reservation.release();
|
|
}
|
|
} catch (error) {
|
|
console.error("Unexpected error:", error);
|
|
process.exit(1);
|
|
}
|
|
})();
|