fix trigger order

This commit is contained in:
Michael Hoennig 2024-09-13 14:19:12 +02:00
parent b33bafb753
commit e88ab1b60b
3 changed files with 10 additions and 8 deletions

View File

@ -25,7 +25,7 @@ create table basis.tx_context
( (
txId xid8 primary key not null, txId xid8 primary key not null,
txTimestamp timestamp not null, txTimestamp timestamp not null,
currentSubject varchar(63) not null, -- not the uuid, because users can be deleted currentSubject varchar(63) not null, -- not the uuid, because users can be deleted
assumedRoles varchar(1023) not null, -- not the uuids, because roles can be deleted assumedRoles varchar(1023) not null, -- not the uuids, because roles can be deleted
currentTask varchar(127) not null, currentTask varchar(127) not null,
currentRequest text not null currentRequest text not null
@ -123,7 +123,8 @@ declare
begin begin
targetTable := lower(targetTable); targetTable := lower(targetTable);
createTriggerSQL = 'CREATE TRIGGER tx_journal_tg' || -- "-0-" to put the trigger execution before any alphabetically greater tx-triggers
createTriggerSQL = 'CREATE TRIGGER tx_0_journal_tg' ||
' AFTER INSERT OR UPDATE OR DELETE ON ' || targetTable || ' AFTER INSERT OR UPDATE OR DELETE ON ' || targetTable ||
' FOR EACH ROW EXECUTE PROCEDURE basis.tx_journal_trigger()'; ' FOR EACH ROW EXECUTE PROCEDURE basis.tx_journal_trigger()';
execute createTriggerSQL; execute createTriggerSQL;

View File

@ -12,14 +12,14 @@ declare
historicalTxId xid8; historicalTxId xid8;
historicalTimestamp timestamp; historicalTimestamp timestamp;
begin begin
select coalesce(current_setting('hsadminng.basis.tx_history_txid', true), '') into historicalTxIdSetting; select coalesce(current_setting('hsadminng.tx_history_txid', true), '') into historicalTxIdSetting;
select coalesce(current_setting('hsadminng.tx_history_timestamp', true), '') into historicalTimestampSetting; select coalesce(current_setting('hsadminng.tx_history_timestamp', true), '') into historicalTimestampSetting;
if historicalTxIdSetting > '' and historicalTimestampSetting > '' then if historicalTxIdSetting > '' and historicalTimestampSetting > '' then
raise exception 'either hsadminng.basis.tx_history_txid or hsadminng.tx_history_timestamp must be set, but both are set: (%, %)', raise exception 'either hsadminng.tx_history_txid or hsadminng.tx_history_timestamp must be set, but both are set: (%, %)',
historicalTxIdSetting, historicalTimestampSetting; historicalTxIdSetting, historicalTimestampSetting;
end if; end if;
if historicalTxIdSetting = '' and historicalTimestampSetting = '' then if historicalTxIdSetting = '' and historicalTimestampSetting = '' then
raise exception 'either hsadminng.basis.tx_history_txid or hsadminng.tx_history_timestamp must be set, but both are unset or empty: (%, %)', raise exception 'either hsadminng.tx_history_txid or hsadminng.tx_history_timestamp must be set, but both are unset or empty: (%, %)',
historicalTxIdSetting, historicalTimestampSetting; historicalTxIdSetting, historicalTimestampSetting;
end if; end if;
-- just for debugging / making sure the function is only called once per query -- just for debugging / making sure the function is only called once per query
@ -150,7 +150,8 @@ begin
raise notice 'sql: %', createViewSQL; raise notice 'sql: %', createViewSQL;
execute createViewSQL; execute createViewSQL;
createTriggerSQL = 'CREATE TRIGGER ' || baseTable || '_tx_historicize_tg' || -- "-9-" to put the trigger execution after any alphabetically lesser tx-triggers
createTriggerSQL = 'CREATE TRIGGER tx_9_historicize_tg' ||
' AFTER INSERT OR DELETE OR UPDATE ON ' || baseTable || ' AFTER INSERT OR DELETE OR UPDATE ON ' || baseTable ||
' FOR EACH ROW EXECUTE PROCEDURE tx_historicize_tf()'; ' FOR EACH ROW EXECUTE PROCEDURE tx_historicize_tf()';
raise notice 'sql: %', createTriggerSQL; raise notice 'sql: %', createTriggerSQL;

View File

@ -52,7 +52,7 @@ public abstract class ContextBasedTest {
protected void historicalContext(final Long txId) { protected void historicalContext(final Long txId) {
// set local cannot be used with query parameters // set local cannot be used with query parameters
em.createNativeQuery(""" em.createNativeQuery("""
set local hsadminng.basis.tx_history_txid to ':txid'; set local hsadminng.tx_history_txid to ':txid';
""".replace(":txid", txId.toString())).executeUpdate(); """.replace(":txid", txId.toString())).executeUpdate();
em.createNativeQuery(""" em.createNativeQuery("""
set local hsadminng.tx_history_timestamp to ''; set local hsadminng.tx_history_timestamp to '';
@ -66,7 +66,7 @@ public abstract class ContextBasedTest {
set local hsadminng.tx_history_timestamp to ':timestamp'; set local hsadminng.tx_history_timestamp to ':timestamp';
""".replace(":timestamp", txTimestamp.toString())).executeUpdate(); """.replace(":timestamp", txTimestamp.toString())).executeUpdate();
em.createNativeQuery(""" em.createNativeQuery("""
set local hsadminng.basis.tx_history_txid to ''; set local hsadminng.tx_history_txid to '';
""").executeUpdate(); """).executeUpdate();
} }