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

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', 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');