WIP: introduce separate database schemas #102
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user