From f0221f6e43ceb8a93bd9d64525eae0fa5bac4878 Mon Sep 17 00:00:00 2001 From: Nybkox Date: Thu, 2 Jan 2025 11:13:39 +0100 Subject: [PATCH] feat: sqlite triggers --- .../src/backend/Analyser.js | 3 +++ .../src/backend/sql/index.js | 3 +++ .../src/backend/sql/triggers.js | 23 +++++++++++++++++++ 3 files changed, 29 insertions(+) create mode 100644 plugins/dbgate-plugin-sqlite/src/backend/sql/triggers.js diff --git a/plugins/dbgate-plugin-sqlite/src/backend/Analyser.js b/plugins/dbgate-plugin-sqlite/src/backend/Analyser.js index 4f6d8d5f9..4dde1fb4a 100644 --- a/plugins/dbgate-plugin-sqlite/src/backend/Analyser.js +++ b/plugins/dbgate-plugin-sqlite/src/backend/Analyser.js @@ -149,9 +149,12 @@ class Analyser extends DatabaseAnalyser { })); } + const triggers = await this.driver.query(this.dbhan, sql.triggers); + return { tables: tableList, views: viewList, + triggers: triggers.rows, }; } } diff --git a/plugins/dbgate-plugin-sqlite/src/backend/sql/index.js b/plugins/dbgate-plugin-sqlite/src/backend/sql/index.js index 4e60d6acb..a5be329a6 100644 --- a/plugins/dbgate-plugin-sqlite/src/backend/sql/index.js +++ b/plugins/dbgate-plugin-sqlite/src/backend/sql/index.js @@ -1,8 +1,11 @@ const objects = require('./objects.js'); const objectsConditioned = require('./objectsConditioned.js'); const indexcols = require('./indexcols.js'); +const triggers = require('./triggers.js'); + module.exports = { objects, objectsConditioned, indexcols, + triggers, }; diff --git a/plugins/dbgate-plugin-sqlite/src/backend/sql/triggers.js b/plugins/dbgate-plugin-sqlite/src/backend/sql/triggers.js new file mode 100644 index 000000000..f79a68523 --- /dev/null +++ b/plugins/dbgate-plugin-sqlite/src/backend/sql/triggers.js @@ -0,0 +1,23 @@ +module.exports = ` +SELECT + rowid AS objectId, + name AS pureName, + CASE + WHEN sql LIKE '% AFTER %' THEN 'AFTER' + WHEN sql LIKE '% BEFORE %' THEN 'BEFORE' + WHEN sql LIKE '% INSTEAD OF %' THEN 'INSTEAD OF' + ELSE 'UNKNOWN' + END AS triggerTiming, + CASE + WHEN sql LIKE '% INSERT %' THEN 'INSERT' + WHEN sql LIKE '% UPDATE %' THEN 'UPDATE' + WHEN sql LIKE '% DELETE %' THEN 'DELETE' + ELSE NULL + END AS eventType, + tbl_name AS tableName, + sql AS createSql +FROM + sqlite_master +WHERE + type = 'trigger'; +`;