mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-05-02 12:33:58 +00:00
feat: mysql and oracle triggers tests
This commit is contained in:
@@ -19,6 +19,10 @@ function flatSourceParameters() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function flatSourceTriggers() {
|
||||||
|
return _.flatten(engines.map(engine => (engine.triggers || []).map(trigger => [engine.label, trigger, engine])));
|
||||||
|
}
|
||||||
|
|
||||||
const obj1Match = expect.objectContaining({
|
const obj1Match = expect.objectContaining({
|
||||||
pureName: 'obj1',
|
pureName: 'obj1',
|
||||||
});
|
});
|
||||||
@@ -136,4 +140,20 @@ describe('Object analyse', () => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
test.each(flatSourceTriggers())(
|
||||||
|
'Test triggers - %s - %s',
|
||||||
|
testWrapper(async (conn, driver, testName, trigger, engine) => {
|
||||||
|
for (const sql of initSql) await runCommandOnDriver(conn, driver, sql);
|
||||||
|
|
||||||
|
await runCommandOnDriver(conn, driver, trigger.create);
|
||||||
|
const structure = await driver.analyseFull(conn);
|
||||||
|
await runCommandOnDriver(conn, driver, trigger.drop);
|
||||||
|
|
||||||
|
const createdTrigger = structure[trigger.objectTypeField].find(x => x.pureName == trigger.pureName);
|
||||||
|
expect(createdTrigger).toEqual(expect.objectContaining(trigger.expected));
|
||||||
|
})
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
console.log(flatSourceTriggers());
|
||||||
|
|||||||
@@ -108,6 +108,30 @@ const engines = [
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
triggers: [
|
||||||
|
{
|
||||||
|
testName: 'triggers insert after',
|
||||||
|
create: 'CREATE TRIGGER obj1 AFTER INSERT ON t1 FOR EACH ROW BEGIN END',
|
||||||
|
drop: 'DROP TRIGGER obj1;',
|
||||||
|
objectTypeField: 'triggers',
|
||||||
|
expected: {
|
||||||
|
pureName: 'obj1',
|
||||||
|
eventType: 'INSERT',
|
||||||
|
triggerTiming: 'AFTER',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
testName: 'triggers insert before',
|
||||||
|
create: 'CREATE TRIGGER obj1 BEFORE INSERT ON t1 FOR EACH ROW BEGIN END',
|
||||||
|
drop: 'DROP TRIGGER obj1;',
|
||||||
|
objectTypeField: 'triggers',
|
||||||
|
expected: {
|
||||||
|
pureName: 'obj1',
|
||||||
|
eventType: 'INSERT',
|
||||||
|
triggerTiming: 'BEFORE',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'MariaDB',
|
label: 'MariaDB',
|
||||||
@@ -429,25 +453,49 @@ end;$$`,
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'functions',
|
type: 'functions',
|
||||||
create1: 'CREATE FUNCTION ~obj1 RETURN NUMBER IS v_count NUMBER; \n BEGIN SELECT COUNT(*) INTO v_count FROM ~t1;\n RETURN v_count;\n END ~obj1',
|
create1:
|
||||||
create2: 'CREATE FUNCTION ~obj2 RETURN NUMBER IS v_count NUMBER; \n BEGIN SELECT COUNT(*) INTO v_count FROM ~t2;\n RETURN v_count;\n END ~obj2',
|
'CREATE FUNCTION ~obj1 RETURN NUMBER IS v_count NUMBER; \n BEGIN SELECT COUNT(*) INTO v_count FROM ~t1;\n RETURN v_count;\n END ~obj1',
|
||||||
|
create2:
|
||||||
|
'CREATE FUNCTION ~obj2 RETURN NUMBER IS v_count NUMBER; \n BEGIN SELECT COUNT(*) INTO v_count FROM ~t2;\n RETURN v_count;\n END ~obj2',
|
||||||
drop1: 'DROP FUNCTION ~obj1',
|
drop1: 'DROP FUNCTION ~obj1',
|
||||||
drop2: 'DROP FUNCTION ~obj2',
|
drop2: 'DROP FUNCTION ~obj2',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
triggers: [
|
||||||
|
{
|
||||||
|
testName: 'triggers after each row',
|
||||||
|
create: 'CREATE OR REPLACE TRIGGER obj1 AFTER INSERT ON T1 FOR EACH ROW BEGIN END obj1;',
|
||||||
|
drop: 'DROP TRIGGER obj1;',
|
||||||
|
objectTypeField: 'triggers',
|
||||||
|
expected: {
|
||||||
|
pureName: 'obj1',
|
||||||
|
eventType: 'AFTER EACH ROW',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
testName: 'triggers before each row',
|
||||||
|
create: 'CREATE OR REPLACE TRIGGER obj1 BEFORE INSERT ON T1 FOR EACH ROW BEGIN END obj1;',
|
||||||
|
drop: 'DROP TRIGGER obj1;',
|
||||||
|
objectTypeField: 'triggers',
|
||||||
|
expected: {
|
||||||
|
pureName: 'obj1',
|
||||||
|
eventType: 'BEFORE EACH ROW',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
const filterLocal = [
|
const filterLocal = [
|
||||||
// filter local testing
|
// filter local testing
|
||||||
'-MySQL',
|
'MySQL',
|
||||||
'-MariaDB',
|
// '-MariaDB',
|
||||||
'-PostgreSQL',
|
// '-PostgreSQL',
|
||||||
'-SQL Server',
|
// '-SQL Server',
|
||||||
'-SQLite',
|
// '-SQLite',
|
||||||
'-CockroachDB',
|
// '-CockroachDB',
|
||||||
'-ClickHouse',
|
// '-ClickHouse',
|
||||||
'Oracle',
|
// 'Oracle',
|
||||||
];
|
];
|
||||||
|
|
||||||
const enginesPostgre = engines.filter(x => x.label == 'PostgreSQL');
|
const enginesPostgre = engines.filter(x => x.label == 'PostgreSQL');
|
||||||
|
|||||||
Reference in New Issue
Block a user