This commit is contained in:
Benjamin Toby
2025-07-05 14:59:30 +01:00
parent 6e334c2525
commit 7e8bb37c09
526 changed files with 17560 additions and 11386 deletions
@@ -0,0 +1,2 @@
type Params = {};
declare function createDuplicateTablesTriggers({}: Params): void;
@@ -0,0 +1,2 @@
"use strict";
function createDuplicateTablesTriggers({}) { }
@@ -0,0 +1,9 @@
export declare const TriggerParadigms: readonly ["sync_tables", "sync_dbs"];
type Params = {
userId?: string | number;
paradigm: (typeof TriggerParadigms)[number];
dbId?: string | number;
tableName?: string;
};
export default function grabTriggerName({ userId, paradigm, dbId, tableName, }: Params): string;
export {};
@@ -0,0 +1,11 @@
export const TriggerParadigms = ["sync_tables", "sync_dbs"];
export default function grabTriggerName({ userId, paradigm, dbId, tableName, }) {
let triggerName = `dsql_trig_${paradigm}`;
if (userId)
triggerName += `_${userId}`;
if (dbId)
triggerName += `_${dbId}`;
if (tableName)
triggerName += `_${tableName}`;
return triggerName;
}
@@ -0,0 +1,20 @@
import { DSQL_DatabaseSchemaType, DSQL_TableSchemaType } from "../../../types";
declare const TriggerTypes: readonly [{
readonly name: "after_insert";
readonly value: "INSERT";
}, {
readonly name: "after_update";
readonly value: "UPDATE";
}, {
readonly name: "after_delete";
readonly value: "DELETE";
}];
export type TriggerSQLGenParams = {
type: (typeof TriggerTypes)[number];
srcDbSchema: DSQL_DatabaseSchemaType;
srcTableSchema: DSQL_TableSchemaType;
content: string;
proceedureName: string;
};
export default function triggerSQLGen({ type, srcDbSchema, srcTableSchema, content, proceedureName, }: TriggerSQLGenParams): string;
export {};
@@ -0,0 +1,23 @@
const TriggerTypes = [
{
name: "after_insert",
value: "INSERT",
},
{
name: "after_update",
value: "UPDATE",
},
{
name: "after_delete",
value: "DELETE",
},
];
export default function triggerSQLGen({ type, srcDbSchema, srcTableSchema, content, proceedureName, }) {
let sql = `DELIMITER //\n`;
sql += `CREATE PROCEDURE ${proceedureName}`;
sql += `\nBEGIN`;
sql += ` ${content}`;
sql += `\nEND //`;
sql += `\nDELIMITER\n`;
return sql;
}
@@ -0,0 +1,8 @@
import { DSQL_DatabaseSchemaType, DSQL_TableSchemaType } from "../../../types";
import { TriggerSQLGenParams } from "./trigger-sql-gen";
type Params = TriggerSQLGenParams & {
dstDbSchema: DSQL_DatabaseSchemaType;
dstTableSchema: DSQL_TableSchemaType;
};
export default function tableReplicationTriggerSQLGen({ type, dstDbSchema, dstTableSchema, srcDbSchema, srcTableSchema, userId, paradigm, }: Params): string;
export {};
@@ -0,0 +1,32 @@
import triggerSQLGen from "./trigger-sql-gen";
export default function tableReplicationTriggerSQLGen({ type, dstDbSchema, dstTableSchema, srcDbSchema, srcTableSchema, userId, paradigm, }) {
let sql = `CREATE TRIGGER`;
const srcColumns = srcTableSchema.fields
.map((fld) => fld.fieldName)
.filter((fld) => typeof fld == "string");
const dstColumns = dstTableSchema.fields
.map((fld) => fld.fieldName)
.filter((fld) => typeof fld == "string");
if (type.name == "after_insert") {
sql += ` INSERT INTO ${dstDbSchema.dbFullName}.${dstTableSchema.tableName}`;
sql += ` (${dstColumns.join(",")})`;
sql += ` VALUES (${dstColumns.map((c) => `NEW.${c}`).join(",")})`;
}
else if (type.name == "after_update") {
sql += ` UPDATE ${dstDbSchema.dbFullName}.${dstTableSchema.tableName}`;
sql += ` SET ${dstColumns.map((c) => `${c}=NEW.${c}`).join(",")}`;
sql += ` WHERE id = NEW.id`;
}
else if (type.name == "after_delete") {
sql += ` DELETE FROM ${dstDbSchema.dbFullName}.${dstTableSchema.tableName}`;
sql += ` WHERE id = OLD.id`;
}
return triggerSQLGen({
content: sql,
srcDbSchema,
srcTableSchema,
type,
paradigm,
userId,
});
}
@@ -0,0 +1,22 @@
import { DSQL_DatabaseSchemaType, DSQL_TableSchemaType } from "../../../types";
import { TriggerParadigms } from "./grab-trigger-name";
declare const TriggerTypes: readonly [{
readonly name: "after_insert";
readonly value: "INSERT";
}, {
readonly name: "after_update";
readonly value: "UPDATE";
}, {
readonly name: "after_delete";
readonly value: "DELETE";
}];
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): string;
export {};
@@ -0,0 +1,30 @@
import grabTriggerName from "./grab-trigger-name";
const TriggerTypes = [
{
name: "after_insert",
value: "INSERT",
},
{
name: "after_update",
value: "UPDATE",
},
{
name: "after_delete",
value: "DELETE",
},
];
export default function triggerSQLGen({ type, srcDbSchema, srcTableSchema, content, userId, paradigm, }) {
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;
}