diff --git a/integration-tests/__tests__/object-analyse.spec.js b/integration-tests/__tests__/object-analyse.spec.js
index 5d871724a..83a44f2af 100644
--- a/integration-tests/__tests__/object-analyse.spec.js
+++ b/integration-tests/__tests__/object-analyse.spec.js
@@ -100,46 +100,50 @@ describe('Object analyse', () => {
})
);
- test.each(flatSourceParameters())(
- 'Test parameters simple analyse - %s - %s',
- testWrapper(async (conn, driver, testName, parameter, engine) => {
- for (const sql of initSql) await runCommandOnDriver(conn, driver, sql);
- for (const sql of engine.parametersOtherSql) await runCommandOnDriver(conn, driver, sql);
+ const flatParameters = flatSourceParameters();
- await runCommandOnDriver(conn, driver, parameter.create);
- const structure = await driver.analyseFull(conn);
+ if (flatParameters.length > 0) {
+ test.each(flatParameters)(
+ 'Test parameters simple analyse - %s - %s',
+ testWrapper(async (conn, driver, testName, parameter, engine) => {
+ for (const sql of initSql) await runCommandOnDriver(conn, driver, sql);
+ for (const sql of engine.parametersOtherSql) await runCommandOnDriver(conn, driver, sql);
- const parameters = structure[parameter.objectTypeField].find(x => x.pureName == 'obj1').parameters;
+ await runCommandOnDriver(conn, driver, parameter.create);
+ const structure = await driver.analyseFull(conn);
- expect(parameters.length).toEqual(parameter.list.length);
- for (let i = 0; i < parameters.length; i += 1) {
- expect(parameters[i]).toEqual(expect.objectContaining(parameter.list[i]));
- }
- })
- );
+ const parameters = structure[parameter.objectTypeField].find(x => x.pureName == 'obj1').parameters;
- test.each(flatSourceParameters())(
- 'Test parameters create SQL - %s - %s',
- testWrapper(async (conn, driver, testName, parameter, engine) => {
- for (const sql of initSql) await runCommandOnDriver(conn, driver, sql);
- for (const sql of engine.parametersOtherSql) await runCommandOnDriver(conn, driver, sql);
+ expect(parameters.length).toEqual(parameter.list.length);
+ for (let i = 0; i < parameters.length; i += 1) {
+ expect(parameters[i]).toEqual(expect.objectContaining(parameter.list[i]));
+ }
+ })
+ );
- await runCommandOnDriver(conn, driver, parameter.create);
- const structure1 = await driver.analyseFull(conn);
- await runCommandOnDriver(conn, driver, parameter.drop);
+ test.each(flatParameters)(
+ 'Test parameters create SQL - %s - %s',
+ testWrapper(async (conn, driver, testName, parameter, engine) => {
+ for (const sql of initSql) await runCommandOnDriver(conn, driver, sql);
+ for (const sql of engine.parametersOtherSql) await runCommandOnDriver(conn, driver, sql);
- const obj = structure1[parameter.objectTypeField].find(x => x.pureName == 'obj1');
- await driver.script(conn, obj.createSql, { discardResult: true });
+ await runCommandOnDriver(conn, driver, parameter.create);
+ const structure1 = await driver.analyseFull(conn);
+ await runCommandOnDriver(conn, driver, parameter.drop);
- const structure2 = await driver.analyseFull(conn);
- const parameters = structure2[parameter.objectTypeField].find(x => x.pureName == 'obj1').parameters;
+ const obj = structure1[parameter.objectTypeField].find(x => x.pureName == 'obj1');
+ await driver.script(conn, obj.createSql, { discardResult: true });
- expect(parameters.length).toEqual(parameter.list.length);
- for (let i = 0; i < parameters.length; i += 1) {
- expect(parameters[i]).toEqual(expect.objectContaining(parameter.list[i]));
- }
- })
- );
+ const structure2 = await driver.analyseFull(conn);
+ const parameters = structure2[parameter.objectTypeField].find(x => x.pureName == 'obj1').parameters;
+
+ expect(parameters.length).toEqual(parameter.list.length);
+ for (let i = 0; i < parameters.length; i += 1) {
+ expect(parameters[i]).toEqual(expect.objectContaining(parameter.list[i]));
+ }
+ })
+ );
+ }
test.each(flatSourceTriggers())(
'Test triggers - %s - %s',
diff --git a/integration-tests/engines.js b/integration-tests/engines.js
index 9e24835bf..4dcc83504 100644
--- a/integration-tests/engines.js
+++ b/integration-tests/engines.js
@@ -355,12 +355,12 @@ const sqlServerEngine = {
drop2: 'DROP PROCEDURE obj2',
},
{
- type:'triggers',
+ type: 'triggers',
create1: 'CREATE TRIGGER obj1 ON t1 AFTER INSERT AS BEGIN SELECT * FROM t1 END',
create2: 'CREATE TRIGGER obj2 ON t2 AFTER INSERT AS BEGIN SELECT * FROM t2 END',
drop1: 'DROP TRIGGER obj1',
drop2: 'DROP TRIGGER obj2',
- }
+ },
],
parametersOtherSql: ['CREATE PROCEDURE obj2 (@p1 int, @p2 int) AS SELECT id from t1'],
parameters: [
@@ -458,6 +458,30 @@ const sqliteEngine = {
objects: [views],
skipOnCI: false,
skipChangeColumn: true,
+ triggers: [
+ {
+ testName: 'triggers after each row insert',
+ create: `CREATE TRIGGER obj1 AFTER INSERT ON t1 FOR EACH ROW BEGIN SELECT * FROM t1; END;`,
+ drop: `DROP TRIGGER obj1;`,
+ objectTypeField: 'triggers',
+ expected: {
+ pureName: 'obj1',
+ eventType: 'INSERT',
+ triggerTiming: 'AFTER',
+ },
+ },
+ {
+ testName: 'triggers before each row update',
+ create: `CREATE TRIGGER obj1 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SELECT * FROM t1; END;`,
+ drop: `DROP TRIGGER obj1;`,
+ objectTypeField: 'triggers',
+ expected: {
+ pureName: 'obj1',
+ eventType: 'UPDATE',
+ triggerTiming: 'BEFORE',
+ },
+ },
+ ],
};
const cockroachDbEngine = {
@@ -581,10 +605,10 @@ const enginesOnLocal = [
// mariaDbEngine,
// postgreSqlEngine,
// sqlServerEngine,
- // sqliteEngine,
+ sqliteEngine,
// cockroachDbEngine,
// clickhouseEngine,
- oracleEngine,
+ // oracleEngine,
];
module.exports = process.env.CITEST ? enginesOnCi : enginesOnLocal;
diff --git a/packages/api/package.json b/packages/api/package.json
index 9e899d971..897a809a3 100644
--- a/packages/api/package.json
+++ b/packages/api/package.json
@@ -30,7 +30,7 @@
"cors": "^2.8.5",
"cross-env": "^6.0.3",
"dbgate-datalib": "^6.0.0-alpha.1",
- "dbgate-query-splitter": "^4.11.2",
+ "dbgate-query-splitter": "^4.11.3",
"dbgate-sqltree": "^6.0.0-alpha.1",
"dbgate-tools": "^6.0.0-alpha.1",
"debug": "^4.3.4",
diff --git a/packages/tools/package.json b/packages/tools/package.json
index 7cdc3b97e..ae25b21b5 100644
--- a/packages/tools/package.json
+++ b/packages/tools/package.json
@@ -31,7 +31,7 @@
"typescript": "^4.4.3"
},
"dependencies": {
- "dbgate-query-splitter": "^4.11.2",
+ "dbgate-query-splitter": "^4.11.3",
"dbgate-sqltree": "^6.0.0-alpha.1",
"debug": "^4.3.4",
"json-stable-stringify": "^1.0.1",
diff --git a/packages/web/package.json b/packages/web/package.json
index a99aa331f..be180f8ce 100644
--- a/packages/web/package.json
+++ b/packages/web/package.json
@@ -25,7 +25,7 @@
"chartjs-adapter-moment": "^1.0.0",
"cross-env": "^7.0.3",
"dbgate-datalib": "^6.0.0-alpha.1",
- "dbgate-query-splitter": "^4.11.2",
+ "dbgate-query-splitter": "^4.11.3",
"dbgate-sqltree": "^6.0.0-alpha.1",
"dbgate-tools": "^6.0.0-alpha.1",
"dbgate-types": "^6.0.0-alpha.1",
diff --git a/packages/web/src/appobj/AppObjectCore.svelte b/packages/web/src/appobj/AppObjectCore.svelte
index 9fd7aa454..5ba6ca4da 100644
--- a/packages/web/src/appobj/AppObjectCore.svelte
+++ b/packages/web/src/appobj/AppObjectCore.svelte
@@ -196,6 +196,12 @@