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 @@