fix trigger order

This commit is contained in:
Michael Hoennig 2024-09-13 14:19:12 +02:00
parent 3c4139c726
commit 385dddef4c
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,
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
currentTask varchar(127) not null,
currentRequest text not null
@ -123,7 +123,8 @@ declare
begin
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 ||
' FOR EACH ROW EXECUTE PROCEDURE basis.tx_journal_trigger()';
execute createTriggerSQL;

View File

@ -12,14 +12,14 @@ declare
historicalTxId xid8;
historicalTimestamp timestamp;
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;
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;
end if;
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;
end if;
-- just for debugging / making sure the function is only called once per query
@ -150,7 +150,8 @@ begin
raise notice 'sql: %', 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 ||
' FOR EACH ROW EXECUTE PROCEDURE tx_historicize_tf()';
raise notice 'sql: %', createTriggerSQL;

View File

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