mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-18 10:16:00 +00:00
feat: add firebird triggers
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
const _ = require('lodash');
|
||||
const sql = require('./sql');
|
||||
const { getDataTypeString } = require('./helpers');
|
||||
const { getDataTypeString, getTriggerTiming, getTriggerEventType } = require('./helpers');
|
||||
|
||||
const { DatabaseAnalyser } = require('dbgate-tools');
|
||||
|
||||
@@ -12,6 +12,7 @@ class Analyser extends DatabaseAnalyser {
|
||||
async _runAnalysis() {
|
||||
const tablesResult = await this.driver.query(this.dbhan, sql.tables);
|
||||
const columnsResult = await this.driver.query(this.dbhan, sql.columns);
|
||||
const triggersResult = await this.driver.query(this.dbhan, sql.triggers);
|
||||
|
||||
const columns = columnsResult.rows.map(i => ({
|
||||
tableName: i.TABLENAME,
|
||||
@@ -28,6 +29,7 @@ class Analyser extends DatabaseAnalyser {
|
||||
pureName: i.PURENAME,
|
||||
schemaName: i.SCHEMANAME,
|
||||
}));
|
||||
|
||||
const tables = tablesResult.rows.map(i => ({
|
||||
pureName: i.PURENAME,
|
||||
objectId: i.OBJECTID,
|
||||
@@ -35,6 +37,14 @@ class Analyser extends DatabaseAnalyser {
|
||||
objectComment: i.OBJECTCOMMENT,
|
||||
}));
|
||||
|
||||
const triggers = triggersResult.rows.map(i => ({
|
||||
pureName: i.PURENAME,
|
||||
tableName: i.TABLENAME,
|
||||
shcemaName: i.SCHEMANAME,
|
||||
eventType: getTriggerEventType(i.TRIGGERTYPE),
|
||||
triggerTiming: getTriggerTiming(i.TRIGGERTYPE),
|
||||
}));
|
||||
|
||||
return {
|
||||
tables: tables.map(table => ({
|
||||
...table,
|
||||
@@ -42,6 +52,7 @@ class Analyser extends DatabaseAnalyser {
|
||||
column => column.tableName === table.pureName && column.schemaName === table.schemaName
|
||||
),
|
||||
})),
|
||||
triggers,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -49,6 +49,38 @@ function getDataTypeString(column) {
|
||||
}
|
||||
}
|
||||
|
||||
const eventMap = {
|
||||
1: { triggerTiming: 'BEFORE', eventType: 'INSERT' },
|
||||
2: { triggerTiming: 'AFTER', eventType: 'INSERT' },
|
||||
3: { triggerTiming: 'BEFORE', eventType: 'UPDATE' },
|
||||
4: { triggerTiming: 'AFTER', eventType: 'UPDATE' },
|
||||
5: { triggerTiming: 'BEFORE', eventType: 'DELETE' },
|
||||
6: { triggerTiming: 'AFTER', eventType: 'DELETE' },
|
||||
17: { triggerTiming: 'BEFORE', eventType: 'INSERT' }, // OR UPDATE
|
||||
18: { triggerTiming: 'AFTER', eventType: 'INSERT' }, // OR UPDATE
|
||||
25: { triggerTiming: 'BEFORE', eventType: 'INSERT' }, // OR DELETE
|
||||
26: { triggerTiming: 'AFTER', eventType: 'INSERT' }, // OR DELETE
|
||||
27: { triggerTiming: 'BEFORE', eventType: 'UPDATE' }, // OR DELETE
|
||||
28: { triggerTiming: 'AFTER', eventType: 'UPDATE' }, // OR DELETE
|
||||
113: { triggerTiming: 'BEFORE', eventType: 'INSERT' }, // OR UPDATE OR DELETE
|
||||
114: { triggerTiming: 'AFTER', eventType: 'INSERT' }, // OR UPDATE OR DELETE
|
||||
8192: { triggerTiming: 'BEFORE EVENT', eventType: null }, // ON CONNECT
|
||||
8193: { triggerTiming: 'AFTER EVENT', eventType: null }, // ON DISCONNECT
|
||||
8194: { triggerTiming: 'BEFORE STATEMENT', eventType: null }, // ON TRANSACTION START
|
||||
8195: { triggerTiming: 'AFTER STATEMENT', eventType: null }, // ON TRANSACTION COMMIT
|
||||
8196: { triggerTiming: 'AFTER STATEMENT', eventType: null }, // ON TRANSACTION ROLLBACK
|
||||
};
|
||||
|
||||
function getTriggerEventType(triggerType) {
|
||||
return eventMap[triggerType]?.eventType || null;
|
||||
}
|
||||
|
||||
function getTriggerTiming(triggerType) {
|
||||
return eventMap[triggerType]?.triggerTiming || null;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
getDataTypeString,
|
||||
getTriggerEventType,
|
||||
getTriggerTiming,
|
||||
};
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
const version = require('./version');
|
||||
const tables = require('./tables');
|
||||
const columns = require('./columns');
|
||||
const triggers = require('./triggers');
|
||||
|
||||
module.exports = {
|
||||
version,
|
||||
columns,
|
||||
tables,
|
||||
triggers,
|
||||
};
|
||||
|
||||
12
plugins/dbgate-plugin-firebird/src/backend/sql/triggers.js
Normal file
12
plugins/dbgate-plugin-firebird/src/backend/sql/triggers.js
Normal file
@@ -0,0 +1,12 @@
|
||||
module.exports = `
|
||||
SELECT
|
||||
TRIM(rtr.RDB$TRIGGER_NAME) as PURENAME,
|
||||
TRIM(rtr.RDB$RELATION_NAME) as TABLENAME,
|
||||
rtr.RDB$TRIGGER_TYPE as TRIGGERTYPE,
|
||||
TRIM(rel.RDB$OWNER_NAME) AS SCHEMANAME
|
||||
FROM
|
||||
RDB$TRIGGERS rtr
|
||||
JOIN RDB$RELATIONS rel ON rtr.RDB$RELATION_NAME = rel.RDB$RELATION_NAME
|
||||
WHERE rtr.RDB$SYSTEM_FLAG = 0
|
||||
ORDER BY rtr.RDB$TRIGGER_NAME
|
||||
`;
|
||||
Reference in New Issue
Block a user