diff --git a/plugins/dbgate-plugin-mssql/src/backend/MsSqlAnalyser.js b/plugins/dbgate-plugin-mssql/src/backend/MsSqlAnalyser.js index 79b040f76..84b8168c3 100644 --- a/plugins/dbgate-plugin-mssql/src/backend/MsSqlAnalyser.js +++ b/plugins/dbgate-plugin-mssql/src/backend/MsSqlAnalyser.js @@ -214,12 +214,26 @@ class MsSqlAnalyser extends DatabaseAnalyser { parameters: functionToParameters[row.objectId], })); + const triggerRows = await this.analyserQuery('triggers'); + + const triggers = triggerRows.rows.map(row => ({ + objectId: `triggers:${row.objectId}`, + contentHash: row.modifyDate && row.modifyDate.toISOString(), + createSql: row.definition, + triggerTiming: row.triggerTiming, + eventType: row.eventType, + schemaName: row.schemaName, + tableName: row.tableName, + triggerName: row.triggerName, + })); + this.feedback({ analysingMessage: null }); return { tables, views, procedures, functions, + triggers, }; } diff --git a/plugins/dbgate-plugin-mssql/src/backend/sql/index.js b/plugins/dbgate-plugin-mssql/src/backend/sql/index.js index 6352b6a9b..4125b1ebd 100644 --- a/plugins/dbgate-plugin-mssql/src/backend/sql/index.js +++ b/plugins/dbgate-plugin-mssql/src/backend/sql/index.js @@ -12,6 +12,7 @@ const functionParameters = require('./functionParameters'); const viewColumns = require('./viewColumns'); const indexes = require('./indexes'); const indexcols = require('./indexcols'); +const triggers = require('./triggers'); module.exports = { columns, @@ -28,4 +29,5 @@ module.exports = { indexes, indexcols, tableSizes, + triggers, }; diff --git a/plugins/dbgate-plugin-mssql/src/backend/sql/triggers.js b/plugins/dbgate-plugin-mssql/src/backend/sql/triggers.js new file mode 100644 index 000000000..e37a9ef06 --- /dev/null +++ b/plugins/dbgate-plugin-mssql/src/backend/sql/triggers.js @@ -0,0 +1,28 @@ +module.exports = ` +SELECT + o.modify_date as modifyDate, + o.object_id as objectId, + o.name AS triggerName, + s.name AS schemaName, + OBJECT_NAME(o.parent_object_id) AS tableName, + CASE + WHEN OBJECTPROPERTY(o.object_id, 'ExecIsAfterTrigger') = 1 THEN 'AFTER' + WHEN OBJECTPROPERTY(o.object_id, 'ExecIsInsteadOfTrigger') = 1 THEN 'INSTEAD OF' + ELSE 'BEFORE' + END AS triggerTiming, + CASE + WHEN OBJECTPROPERTY(o.object_id, 'ExecIsInsertTrigger') = 1 THEN 'INSERT' + WHEN OBJECTPROPERTY(o.object_id, 'ExecIsUpdateTrigger') = 1 THEN 'UPDATE' + WHEN OBJECTPROPERTY(o.object_id, 'ExecIsDeleteTrigger') = 1 THEN 'DELETE' + END AS triggerEvent, + OBJECT_DEFINITION(o.object_id) AS definition +FROM sys.objects o +INNER JOIN sys.tables t + ON o.parent_object_id = t.object_id +INNER JOIN sys.schemas s + ON t.schema_id = s.schema_id +WHERE o.type = 'TR' + AND o.is_ms_shipped = 0 + AND o.object_id =OBJECT_ID_CONDITION + AND s.name =SCHEMA_NAME_CONDITION +`;