diff --git a/plugins/dbgate-plugin-firebird/src/backend/Analyser.js b/plugins/dbgate-plugin-firebird/src/backend/Analyser.js index 4e73578fc..38f9ab6ee 100644 --- a/plugins/dbgate-plugin-firebird/src/backend/Analyser.js +++ b/plugins/dbgate-plugin-firebird/src/backend/Analyser.js @@ -1,6 +1,12 @@ const _ = require('lodash'); const sql = require('./sql'); -const { getDataTypeString, getTriggerTiming, getTriggerEventType, getFormattedDefaultValue } = require('./helpers'); +const { + getDataTypeString, + getTriggerTiming, + getTriggerEventType, + getFormattedDefaultValue, + getTriggerCreateSql, +} = require('./helpers'); const { DatabaseAnalyser } = require('dbgate-tools'); @@ -30,6 +36,7 @@ class Analyser extends DatabaseAnalyser { ...i, eventType: getTriggerEventType(i.TRIGGERTYPE), triggerTiming: getTriggerTiming(i.TRIGGERTYPE), + createSql: getTriggerCreateSql(i), })); const primaryKeys = primaryKeysResult.rows ?? []; diff --git a/plugins/dbgate-plugin-firebird/src/backend/helpers.js b/plugins/dbgate-plugin-firebird/src/backend/helpers.js index 0c2d9589c..0b5f4cddf 100644 --- a/plugins/dbgate-plugin-firebird/src/backend/helpers.js +++ b/plugins/dbgate-plugin-firebird/src/backend/helpers.js @@ -71,6 +71,15 @@ function getTriggerEventType(triggerType) { return eventMap[triggerType]?.eventType || null; } +function getTriggerCreateSql(triggerResult) { + const eventType = getTriggerEventType(triggerResult.TRIGGERTYPE); + const triggerTiming = getTriggerTiming(triggerResult.TRIGGERTYPE); + const body = triggerResult.TRIGGER_BODY_SQL; + + const createSql = `CREATE OR ALTER TRIGGER "${triggerResult.pureName}" ${triggerTiming} ${eventType} ON "${triggerResult.tableName}" ${body};`; + return createSql; +} + function getTriggerTiming(triggerType) { return eventMap[triggerType]?.triggerTiming || null; } @@ -86,4 +95,5 @@ module.exports = { getTriggerEventType, getTriggerTiming, getFormattedDefaultValue, + getTriggerCreateSql, }; diff --git a/plugins/dbgate-plugin-firebird/src/backend/sql/triggers.js b/plugins/dbgate-plugin-firebird/src/backend/sql/triggers.js index 6e1a622b2..95a3f5d95 100644 --- a/plugins/dbgate-plugin-firebird/src/backend/sql/triggers.js +++ b/plugins/dbgate-plugin-firebird/src/backend/sql/triggers.js @@ -2,7 +2,8 @@ module.exports = ` SELECT TRIM(rtr.RDB$TRIGGER_NAME) as "pureName", TRIM(rtr.RDB$RELATION_NAME) as "tableName", - rtr.RDB$TRIGGER_TYPE as TRIGGERTYPE + rtr.RDB$TRIGGER_TYPE as TRIGGERTYPE, + CAST(rtr.RDB$TRIGGER_SOURCE AS VARCHAR(8191)) AS TRIGGER_BODY_SQL FROM RDB$TRIGGERS rtr JOIN RDB$RELATIONS rel ON rtr.RDB$RELATION_NAME = rel.RDB$RELATION_NAME