54 lines
1.2 KiB
TypeScript
54 lines
1.2 KiB
TypeScript
import { DSQL_DatabaseSchemaType, DSQL_TableSchemaType } from "../../../types";
|
|
import grabTriggerName, { TriggerParadigms } from "./grab-trigger-name";
|
|
|
|
const TriggerTypes = [
|
|
{
|
|
name: "after_insert",
|
|
value: "INSERT",
|
|
},
|
|
{
|
|
name: "after_update",
|
|
value: "UPDATE",
|
|
},
|
|
{
|
|
name: "after_delete",
|
|
value: "DELETE",
|
|
},
|
|
] as const;
|
|
|
|
export type TriggerSQLGenParams = {
|
|
type: (typeof TriggerTypes)[number];
|
|
srcDbSchema: DSQL_DatabaseSchemaType;
|
|
srcTableSchema: DSQL_TableSchemaType;
|
|
content: string;
|
|
userId?: string | number;
|
|
paradigm: (typeof TriggerParadigms)[number];
|
|
};
|
|
|
|
export default function triggerSQLGen({
|
|
type,
|
|
srcDbSchema,
|
|
srcTableSchema,
|
|
content,
|
|
userId,
|
|
paradigm,
|
|
}: TriggerSQLGenParams) {
|
|
let sql = `CREATE TRIGGER`;
|
|
|
|
let triggerName = grabTriggerName({
|
|
paradigm,
|
|
dbId: srcDbSchema.id,
|
|
tableName: srcTableSchema.tableName,
|
|
userId,
|
|
});
|
|
|
|
sql += ` ${triggerName}`;
|
|
sql += ` AFTER ${type.value} ON ${srcTableSchema.tableName}`;
|
|
sql += ` FOR EACH ROW BEGIN`;
|
|
|
|
sql += ` ${content}`;
|
|
sql += ` END`;
|
|
|
|
return sql;
|
|
}
|