feat: mysql and oracle triggers tests

This commit is contained in:
Nybkox
2024-12-18 06:09:30 +01:00
parent 5f4bd6d3e3
commit e866c019f0
2 changed files with 78 additions and 10 deletions

View File

@@ -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({
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());

View File

@@ -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',
@@ -429,25 +453,49 @@ end;$$`,
},
{
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',
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',
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',
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',
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 = [
// filter local testing
'-MySQL',
'-MariaDB',
'-PostgreSQL',
'-SQL Server',
'-SQLite',
'-CockroachDB',
'-ClickHouse',
'Oracle',
'MySQL',
// '-MariaDB',
// '-PostgreSQL',
// '-SQL Server',
// '-SQLite',
// '-CockroachDB',
// '-ClickHouse',
// 'Oracle',
];
const enginesPostgre = engines.filter(x => x.label == 'PostgreSQL');