mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-05-01 00:23:57 +00:00
Merge pull request #985 from dbgate/feature/mysql-event-scheduler
Feature/mysql event scheduler
This commit is contained in:
@@ -76,23 +76,26 @@ describe('Alter database', () => {
|
||||
})
|
||||
);
|
||||
|
||||
test.each(flatSource(x => x.supportRenameSqlObject))(
|
||||
'Rename object - %s - %s',
|
||||
testWrapper(async (conn, driver, type, object, engine) => {
|
||||
for (const sql of initSql) await runCommandOnDriver(conn, driver, sql);
|
||||
const objectsSupportingRename = flatSource(x => x.supportRenameSqlObject);
|
||||
if (objectsSupportingRename.length > 0) {
|
||||
test.each(objectsSupportingRename)(
|
||||
'Rename object - %s - %s',
|
||||
testWrapper(async (conn, driver, type, object, engine) => {
|
||||
for (const sql of initSql) await runCommandOnDriver(conn, driver, sql);
|
||||
|
||||
await runCommandOnDriver(conn, driver, object.create1);
|
||||
await runCommandOnDriver(conn, driver, object.create1);
|
||||
|
||||
const structure = extendDatabaseInfo(await driver.analyseFull(conn));
|
||||
const structure = extendDatabaseInfo(await driver.analyseFull(conn));
|
||||
|
||||
const dmp = driver.createDumper();
|
||||
dmp.renameSqlObject(structure[type][0], 'renamed1');
|
||||
const dmp = driver.createDumper();
|
||||
dmp.renameSqlObject(structure[type][0], 'renamed1');
|
||||
|
||||
await driver.query(conn, dmp.s);
|
||||
await driver.query(conn, dmp.s);
|
||||
|
||||
const structure2 = await driver.analyseFull(conn);
|
||||
expect(structure2[type].length).toEqual(1);
|
||||
expect(structure2[type][0].pureName).toEqual('renamed1');
|
||||
})
|
||||
);
|
||||
const structure2 = await driver.analyseFull(conn);
|
||||
expect(structure2[type].length).toEqual(1);
|
||||
expect(structure2[type][0].pureName).toEqual('renamed1');
|
||||
})
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -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',
|
||||
});
|
||||
@@ -172,6 +178,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));
|
||||
})
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -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',
|
||||
@@ -36,6 +43,7 @@ const mysqlEngine = {
|
||||
drop2: 'DROP PROCEDURE obj2',
|
||||
},
|
||||
],
|
||||
supportRenameSqlObject: false,
|
||||
dbSnapshotBySeconds: true,
|
||||
dumpFile: 'data/chinook-mysql.sql',
|
||||
dumpChecks: [
|
||||
@@ -130,6 +138,30 @@ 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',
|
||||
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',
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
const mariaDbEngine = {
|
||||
@@ -601,7 +633,7 @@ const enginesOnCi = [
|
||||
|
||||
const enginesOnLocal = [
|
||||
// all engines, which would be run on local test
|
||||
// mysqlEngine,
|
||||
mysqlEngine,
|
||||
// mariaDbEngine,
|
||||
// postgreSqlEngine,
|
||||
// sqlServerEngine,
|
||||
|
||||
Reference in New Issue
Block a user