mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-28 11:56:00 +00:00
feat: add pssql triggers to analyser
This commit is contained in:
10
packages/types/dbinfo.d.ts
vendored
10
packages/types/dbinfo.d.ts
vendored
@@ -136,7 +136,15 @@ export interface FunctionInfo extends CallableObjectInfo {
|
|||||||
returnType?: string;
|
returnType?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface TriggerInfo extends SqlObjectInfo {}
|
export interface TriggerInfo extends SqlObjectInfo {
|
||||||
|
objectId: string;
|
||||||
|
trigerName: string;
|
||||||
|
functionName?: string;
|
||||||
|
tableName: string;
|
||||||
|
triggerTiming?: 'BEFORE' | 'AFTER' | 'INSTEAD OF' | null;
|
||||||
|
triggerLevel?: 'ROW' | 'STATEMENT';
|
||||||
|
eventType?: 'INSERT' | 'UPDATE' | 'DELETE' | 'TRUNCATE';
|
||||||
|
}
|
||||||
|
|
||||||
export interface SchemaInfo {
|
export interface SchemaInfo {
|
||||||
objectId?: string;
|
objectId?: string;
|
||||||
|
|||||||
@@ -241,6 +241,8 @@ class Analyser extends DatabaseAnalyser {
|
|||||||
return acc;
|
return acc;
|
||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
|
const triggers = await this.analyserQuery('triggers');
|
||||||
|
|
||||||
const res = {
|
const res = {
|
||||||
tables: tables.rows.map(table => {
|
tables: tables.rows.map(table => {
|
||||||
const newTable = {
|
const newTable = {
|
||||||
@@ -348,6 +350,18 @@ class Analyser extends DatabaseAnalyser {
|
|||||||
parameters: functionNameToParameters[`${func.schema_name}.${func.pure_name}`],
|
parameters: functionNameToParameters[`${func.schema_name}.${func.pure_name}`],
|
||||||
returnType: func.data_type,
|
returnType: func.data_type,
|
||||||
})),
|
})),
|
||||||
|
triggers: triggers.rows.map(row => ({
|
||||||
|
trigerName: row.trigger_name,
|
||||||
|
functionName: row.function_name,
|
||||||
|
triggerTiming: row.trigger_timing,
|
||||||
|
triggerLevel: row.trigger_level,
|
||||||
|
eventType: row.event_type,
|
||||||
|
schemaName: row.schema_name,
|
||||||
|
tableName: row.table_name,
|
||||||
|
createSql: row.definition,
|
||||||
|
contentHash: `triggers:${row.trigger_id}`,
|
||||||
|
objectId: `triggers:${row.trigger_id}`,
|
||||||
|
})),
|
||||||
};
|
};
|
||||||
|
|
||||||
this.feedback({ analysingMessage: null });
|
this.feedback({ analysingMessage: null });
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ const geometryColumns = require('./geometryColumns');
|
|||||||
const geographyColumns = require('./geographyColumns');
|
const geographyColumns = require('./geographyColumns');
|
||||||
const proceduresParameters = require('./proceduresParameters');
|
const proceduresParameters = require('./proceduresParameters');
|
||||||
const foreignKeys = require('./foreignKeys');
|
const foreignKeys = require('./foreignKeys');
|
||||||
|
const triggers = require('./triggers');
|
||||||
|
|
||||||
const fk_keyColumnUsage = require('./fk_key_column_usage');
|
const fk_keyColumnUsage = require('./fk_key_column_usage');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
@@ -38,4 +40,5 @@ module.exports = {
|
|||||||
geometryColumns,
|
geometryColumns,
|
||||||
geographyColumns,
|
geographyColumns,
|
||||||
proceduresParameters,
|
proceduresParameters,
|
||||||
|
triggers,
|
||||||
};
|
};
|
||||||
|
|||||||
36
plugins/dbgate-plugin-postgres/src/backend/sql/triggers.js
Normal file
36
plugins/dbgate-plugin-postgres/src/backend/sql/triggers.js
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
module.exports = `
|
||||||
|
SELECT
|
||||||
|
t.oid AS trigger_id,
|
||||||
|
t.tgname AS trigger_name,
|
||||||
|
n.nspname AS schema_name,
|
||||||
|
c.relname AS table_name,
|
||||||
|
p.proname AS function_name,
|
||||||
|
t.tgtype AS original_tgtype,
|
||||||
|
CASE
|
||||||
|
WHEN t.tgtype & 1 = 1 THEN 'ROW'
|
||||||
|
ELSE 'STATEMENT'
|
||||||
|
END AS trigger_level,
|
||||||
|
CASE
|
||||||
|
WHEN tgtype & 2 = 2 THEN 'AFTER'
|
||||||
|
WHEN tgtype & 1 = 1 THEN 'BEFORE'
|
||||||
|
ELSE NULL
|
||||||
|
END AS trigger_timing,
|
||||||
|
CASE
|
||||||
|
WHEN tgtype & 32 = 32 THEN 'TRUNCATE'
|
||||||
|
WHEN tgtype & 16 = 16 THEN 'UPDATE'
|
||||||
|
WHEN tgtype & 8 = 8 THEN 'DELETE'
|
||||||
|
WHEN tgtype & 4 = 4 THEN 'INSERT'
|
||||||
|
ELSE NULL
|
||||||
|
END AS event_type,
|
||||||
|
pg_get_triggerdef(t.oid) AS definition
|
||||||
|
FROM
|
||||||
|
pg_trigger t
|
||||||
|
JOIN
|
||||||
|
pg_class c ON c.oid = t.tgrelid
|
||||||
|
JOIN
|
||||||
|
pg_namespace n ON n.oid = c.relnamespace
|
||||||
|
JOIN
|
||||||
|
pg_proc p ON p.oid = t.tgfoid
|
||||||
|
WHERE
|
||||||
|
NOT t.tgisinternal AND n.nspname =SCHEMA_NAME_CONDITION
|
||||||
|
`;
|
||||||
Reference in New Issue
Block a user