diff --git a/integration-tests/__tests__/object-analyse.spec.js b/integration-tests/__tests__/object-analyse.spec.js index 5d871724a..bc84a14e3 100644 --- a/integration-tests/__tests__/object-analyse.spec.js +++ b/integration-tests/__tests__/object-analyse.spec.js @@ -23,6 +23,12 @@ function flatSourceTriggers() { return _.flatten(engines.map(engine => (engine.triggers || []).map(trigger => [engine.label, trigger, engine]))); } +function flatSourceSchedulerEvents() { + return _.flatten( + engines.map(engine => (engine.schedulerEvents || []).map(schedulerEvent => [engine.label, schedulerEvent, engine])) + ); +} + const obj1Match = expect.objectContaining({ pureName: 'obj1', }); @@ -168,6 +174,22 @@ describe('Object analyse', () => { expect(createdTrigger2).toEqual(expect.objectContaining(expected)); }) ); -}); -console.log(flatSourceTriggers()); + const schedulerEvents = flatSourceSchedulerEvents(); + if (schedulerEvents.length > 0) { + test.each(schedulerEvents)( + 'Test scheduler events - %s - %s', + testWrapper(async (conn, driver, event) => { + for (const sql of initSql) await runCommandOnDriver(conn, driver, sql); + const { create, drop, objectTypeField, expected } = event; + + await runCommandOnDriver(conn, driver, create); + const structure = await driver.analyseFull(conn); + await runCommandOnDriver(conn, driver, drop); + + const createdEvent = structure[objectTypeField].find(x => x.pureName == expected.pureName); + expect(createdEvent).toEqual(expect.objectContaining(expected)); + }) + ); + } +}); diff --git a/integration-tests/engines.js b/integration-tests/engines.js index 9e24835bf..f68ef5e77 100644 --- a/integration-tests/engines.js +++ b/integration-tests/engines.js @@ -28,6 +28,13 @@ const mysqlEngine = { }, objects: [ views, + { + type: 'schedulerEvents', + create1: 'CREATE EVENT obj1 ON SCHEDULE EVERY 1 HOUR DO BEGIN END', + create2: 'CREATE EVENT obj2 ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY DO BEGIN END', + drop1: 'DROP EVENT obj1', + drop2: 'DROP EVENT obj2', + }, { type: 'procedures', create1: 'CREATE PROCEDURE obj1() BEGIN SELECT * FROM t1; END', @@ -130,6 +137,34 @@ const mysqlEngine = { }, }, ], + schedulerEvents: [ + { + create: 'CREATE EVENT obj1 ON SCHEDULE EVERY 1 HOUR DO BEGIN END', + drop: 'DROP EVENT obj1', + objectTypeField: 'schedulerEvents', + expected: { + pureName: 'obj1', + status: 'ENABLED', + eventType: 'RECURRING', + enableSql: 'ALTER EVENT obj1 ENABLE;', + disableSql: 'ALTER EVENT obj1 DISABLE;', + intervalValue: '1', + intervalField: 'HOUR', + }, + }, + { + create: 'CREATE EVENT obj1 ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY DO BEGIN END', + drop: 'DROP EVENT obj1', + objectTypeField: 'schedulerEvents', + expected: { + pureName: 'obj1', + status: 'ENABLED', + eventType: 'ONE TIME', + enableSql: 'ALTER EVENT obj1 ENABLE;', + disableSql: 'ALTER EVENT obj1 DISABLE;', + }, + }, + ], }; const mariaDbEngine = { @@ -355,12 +390,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: [ @@ -577,14 +612,14 @@ const enginesOnCi = [ const enginesOnLocal = [ // all engines, which would be run on local test - // mysqlEngine, + mysqlEngine, // mariaDbEngine, // postgreSqlEngine, // sqlServerEngine, // sqliteEngine, // cockroachDbEngine, // clickhouseEngine, - oracleEngine, + // oracleEngine, ]; module.exports = process.env.CITEST ? enginesOnCi : enginesOnLocal; diff --git a/packages/datalib/src/tests/chinookDbInfo.ts b/packages/datalib/src/tests/chinookDbInfo.ts index b36a8cda3..22b89ce48 100644 --- a/packages/datalib/src/tests/chinookDbInfo.ts +++ b/packages/datalib/src/tests/chinookDbInfo.ts @@ -1492,6 +1492,7 @@ export const chinookDbInfo: DatabaseInfo = { collections: [], matviews: [], triggers: [], + schedulerEvents: [], }; // const ARTIST_TABLE: TableInfo = {