2 @message |
assert
- Problem(s) detected:
- out_prep:
- Statement failed, SQLSTATE = HY000
- ALTER CHARACTER SET "SYSTEM"."ISO8859_1" failed
- -Cannot CREATE/ALTER/DROP CHARACTER SET in SYSTEM schema
- out_drop:
-
- ---
- +++
- @@ -12,5 +12,553 @@
- COMMIT WORK; +/* Table: PUBLIC.LOG_DDL_TRIGGERS_ACTIVITY, Owner: SYSDBA */+CREATE TABLE PUBLIC.LOG_DDL_TRIGGERS_ACTIVITY (ID INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1) NOT NULL,+ DDL_TRIGGER_NAME VARCHAR(64),+ EVENT_TYPE VARCHAR(25) NOT NULL,+ OBJECT_TYPE VARCHAR(25) NOT NULL,+ DDL_EVENT VARCHAR(25) NOT NULL,+ OBJECT_NAME VARCHAR(64) NOT NULL,+ DTS TIMESTAMP default 'now',+CONSTRAINT PK_LOG_DDL_TRIGGERS_ACTIVITY PRIMARY KEY (ID));+SET TERM ^ ;++/* Triggers only will work for SQL triggers */+CREATE TRIGGER PUBLIC.TRG_CREATE_TABLE_BEFORE +ACTIVE BEFORE CREATE TABLE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_TABLE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_TABLE_BEFORE +ACTIVE BEFORE ALTER TABLE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_TABLE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_TABLE_BEFORE +ACTIVE BEFORE DROP TABLE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_TABLE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_PROCEDURE_BEFORE +ACTIVE BEFORE CREATE PROCEDURE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_PROCEDURE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_PROCEDURE_BEFORE +ACTIVE BEFORE ALTER PROCEDURE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_PROCEDURE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_PROCEDURE_BEFORE +ACTIVE BEFORE DROP PROCEDURE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_PROCEDURE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_FUNCTION_BEFORE +ACTIVE BEFORE CREATE FUNCTION POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_FUNCTION_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_FUNCTION_BEFORE +ACTIVE BEFORE ALTER FUNCTION POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_FUNCTION_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_FUNCTION_BEFORE +ACTIVE BEFORE DROP FUNCTION POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_FUNCTION_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_TRIGGER_BEFORE +ACTIVE BEFORE CREATE TRIGGER POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_TRIGGER_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_TRIGGER_BEFORE +ACTIVE BEFORE ALTER TRIGGER POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_TRIGGER_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_TRIGGER_BEFORE +ACTIVE BEFORE DROP TRIGGER POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_TRIGGER_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_EXCEPTION_BEFORE +ACTIVE BEFORE CREATE EXCEPTION POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_EXCEPTION_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_EXCEPTION_BEFORE +ACTIVE BEFORE ALTER EXCEPTION POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_EXCEPTION_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_EXCEPTION_BEFORE +ACTIVE BEFORE DROP EXCEPTION POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_EXCEPTION_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_VIEW_BEFORE +ACTIVE BEFORE CREATE VIEW POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_VIEW_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_VIEW_BEFORE +ACTIVE BEFORE ALTER VIEW POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_VIEW_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_VIEW_BEFORE +ACTIVE BEFORE DROP VIEW POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_VIEW_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_DOMAIN_BEFORE +ACTIVE BEFORE CREATE DOMAIN POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_DOMAIN_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_DOMAIN_BEFORE +ACTIVE BEFORE ALTER DOMAIN POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_DOMAIN_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_DOMAIN_BEFORE +ACTIVE BEFORE DROP DOMAIN POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_DOMAIN_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_ROLE_BEFORE +ACTIVE BEFORE CREATE ROLE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_ROLE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_ROLE_BEFORE +ACTIVE BEFORE ALTER ROLE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_ROLE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_ROLE_BEFORE +ACTIVE BEFORE DROP ROLE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_ROLE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_INDEX_BEFORE +ACTIVE BEFORE CREATE INDEX POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_INDEX_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_INDEX_BEFORE +ACTIVE BEFORE ALTER INDEX POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_INDEX_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_INDEX_BEFORE +ACTIVE BEFORE DROP INDEX POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_INDEX_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_SEQUENCE_BEFORE +ACTIVE BEFORE CREATE SEQUENCE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_SEQUENCE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_SEQUENCE_BEFORE +ACTIVE BEFORE ALTER SEQUENCE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_SEQUENCE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_SEQUENCE_BEFORE +ACTIVE BEFORE DROP SEQUENCE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_SEQUENCE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_USER_BEFORE +ACTIVE BEFORE CREATE USER POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_USER_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_USER_BEFORE +ACTIVE BEFORE ALTER USER POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_USER_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_USER_BEFORE +ACTIVE BEFORE DROP USER POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_USER_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_COLLATION_BEFORE +ACTIVE BEFORE CREATE COLLATION POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_COLLATION_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_COLLATION_BEFORE +ACTIVE BEFORE DROP COLLATION POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_COLLATION_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_CHARACTER_SET_BEFORE +ACTIVE BEFORE ALTER CHARACTER SET POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_CHARACTER_SET_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_PACKAGE_BEFORE +ACTIVE BEFORE CREATE PACKAGE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_PACKAGE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ANY_DDL_STATEMENT_BEFORE +ACTIVE BEFORE ANY DDL STATEMENT POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ANY_DDL_STATEMENT_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^+++SET TERM ; ^+COMMIT WORK;+ /* Grant permissions for this database */ GRANT USAGE ON SCHEMA PUBLIC TO USER PUBLIC;
-
LOG DETAILS:
2025-06-19 02:55:38.354
2025-06-19 02:55:38.359 act_db_main = <firebird.qa.plugin.Action object at [hex]>
2025-06-19 02:55:38.364 act_db_repl = <firebird.qa.plugin.Action object at [hex]>
2025-06-19 02:55:38.369 capsys = <_pytest.capture.CaptureFixture object at [hex]>
2025-06-19 02:55:38.374
2025-06-19 02:55:38.379 @pytest.mark.replication
2025-06-19 02:55:38.386 @pytest.mark.version('>=4.0.1')
2025-06-19 02:55:38.394 def test_1(act_db_main: Action, act_db_repl: Action, capsys):
2025-06-19 02:55:38.401
2025-06-19 02:55:38.407 out_prep, out_main, out_drop = '', '', ''
2025-06-19 02:55:38.414
2025-06-19 02:55:38.421 # Obtain full path + filename for DB_MAIN and DB_REPL aliases.
2025-06-19 02:55:38.427 # NOTE: we must NOT use 'a.db.db_path' for ALIASED databases!
2025-06-19 02:55:38.433 # It will return '.' rather than full path+filename.
2025-06-19 02:55:38.439 # Use only con.info.name for that!
2025-06-19 02:55:38.443 #
2025-06-19 02:55:38.449 db_main_file, db_repl_file = '', ''
2025-06-19 02:55:38.454 db_main_fw, db_repl_fw = DbWriteMode.ASYNC, DbWriteMode.ASYNC
2025-06-19 02:55:38.459
2025-06-19 02:55:38.464 with act_db_main.db.connect(no_db_triggers = True) as con:
2025-06-19 02:55:38.469 #if act_db_main.vars['server-arch'] == 'Classic' and os.name != 'nt':
2025-06-19 02:55:38.474 # pytest.skip("Waiting for FIX: 'Engine is shutdown' in replication log for CS. Linux only.")
2025-06-19 02:55:38.479
2025-06-19 02:55:38.484 db_main_file = con.info.name
2025-06-19 02:55:38.489 db_main_fw = con.info.write_mode
2025-06-19 02:55:38.494
2025-06-19 02:55:38.499 with act_db_repl.db.connect(no_db_triggers = True) as con:
2025-06-19 02:55:38.504 db_repl_file = con.info.name
2025-06-19 02:55:38.509 db_repl_fw = con.info.write_mode
2025-06-19 02:55:38.514
2025-06-19 02:55:38.518 # ONLY FOR THIS test: forcedly change FW to OFF, without any condition.
2025-06-19 02:55:38.523 # Otherwise changes may not be delivered to replica for <MAX_TIME_FOR_WAIT_DATA_IN_REPLICA> seconds.
2025-06-19 02:55:38.528 #####################
2025-06-19 02:55:38.532 act_db_main.db.set_async_write()
2025-06-19 02:55:38.537 act_db_repl.db.set_async_write()
2025-06-19 02:55:38.542
2025-06-19 02:55:38.546
2025-06-19 02:55:38.551 # Must be EMPTY:
2025-06-19 02:55:38.556 out_prep = capsys.readouterr().out
2025-06-19 02:55:38.560
2025-06-19 02:55:38.565 sql_init = """
2025-06-19 02:55:38.570 set bail on;
2025-06-19 02:55:38.575
2025-06-19 02:55:38.580 recreate table log_ddl_triggers_activity (
2025-06-19 02:55:38.594 id int generated by default as identity constraint pk_log_ddl_triggers_activity primary key
2025-06-19 02:55:38.605 ,ddl_trigger_name varchar(64)
2025-06-19 02:55:38.611 ,event_type varchar(25) not null
2025-06-19 02:55:38.616 ,object_type varchar(25) not null
2025-06-19 02:55:38.621 ,ddl_event varchar(25) not null
2025-06-19 02:55:38.626 ,object_name varchar(64) not null
2025-06-19 02:55:38.630 ,dts timestamp default 'now'
2025-06-19 02:55:38.635 );
2025-06-19 02:55:38.640
2025-06-19 02:55:38.645
2025-06-19 02:55:38.649 set term ^;
2025-06-19 02:55:38.654 execute block as
2025-06-19 02:55:38.659 declare v_lf char(1) = x'0A';
2025-06-19 02:55:38.663 begin
2025-06-19 02:55:38.668 rdb$set_context('USER_SESSION', 'SKIP_DDL_TRIGGER', '1');
2025-06-19 02:55:38.674
2025-06-19 02:55:38.679 for
2025-06-19 02:55:38.684 with
2025-06-19 02:55:38.689 a as (
2025-06-19 02:55:38.693 select 'ANY DDL STATEMENT' x from rdb$database union all
2025-06-19 02:55:38.698 select 'CREATE TABLE' from rdb$database union all
2025-06-19 02:55:38.703 select 'ALTER TABLE' from rdb$database union all
2025-06-19 02:55:38.708 select 'DROP TABLE' from rdb$database union all
2025-06-19 02:55:38.713 select 'CREATE PROCEDURE' from rdb$database union all
2025-06-19 02:55:38.718 select 'ALTER PROCEDURE' from rdb$database union all
2025-06-19 02:55:38.723 select 'DROP PROCEDURE' from rdb$database union all
2025-06-19 02:55:38.727 select 'CREATE FUNCTION' from rdb$database union all
2025-06-19 02:55:38.732 select 'ALTER FUNCTION' from rdb$database union all
2025-06-19 02:55:38.737 select 'DROP FUNCTION' from rdb$database union all
2025-06-19 02:55:38.742 select 'CREATE TRIGGER' from rdb$database union all
2025-06-19 02:55:38.747 select 'ALTER TRIGGER' from rdb$database union all
2025-06-19 02:55:38.751 select 'DROP TRIGGER' from rdb$database union all
2025-06-19 02:55:38.756 select 'CREATE EXCEPTION' from rdb$database union all
2025-06-19 02:55:38.761 select 'ALTER EXCEPTION' from rdb$database union all
2025-06-19 02:55:38.765 select 'DROP EXCEPTION' from rdb$database union all
2025-06-19 02:55:38.770 select 'CREATE VIEW' from rdb$database union all
2025-06-19 02:55:38.775 select 'ALTER VIEW' from rdb$database union all
2025-06-19 02:55:38.780 select 'DROP VIEW' from rdb$database union all
2025-06-19 02:55:38.785 select 'CREATE DOMAIN' from rdb$database union all
2025-06-19 02:55:38.790 select 'ALTER DOMAIN' from rdb$database union all
2025-06-19 02:55:38.795 select 'DROP DOMAIN' from rdb$database union all
2025-06-19 02:55:38.800 select 'CREATE ROLE' from rdb$database union all
2025-06-19 02:55:38.805 select 'ALTER ROLE' from rdb$database union all
2025-06-19 02:55:38.809 select 'DROP ROLE' from rdb$database union all
2025-06-19 02:55:38.814 select 'CREATE SEQUENCE' from rdb$database union all
2025-06-19 02:55:38.819 select 'ALTER SEQUENCE' from rdb$database union all
2025-06-19 02:55:38.824 select 'DROP SEQUENCE' from rdb$database union all
2025-06-19 02:55:38.828 select 'CREATE USER' from rdb$database union all
2025-06-19 02:55:38.834 select 'ALTER USER' from rdb$database union all
2025-06-19 02:55:38.839 select 'DROP USER' from rdb$database union all
2025-06-19 02:55:38.844 select 'CREATE INDEX' from rdb$database union all
2025-06-19 02:55:38.849 select 'ALTER INDEX' from rdb$database union all
2025-06-19 02:55:38.853 select 'DROP INDEX' from rdb$database union all
2025-06-19 02:55:38.858 select 'CREATE COLLATION' from rdb$database union all
2025-06-19 02:55:38.862 select 'DROP COLLATION' from rdb$database union all
2025-06-19 02:55:38.867 select 'ALTER CHARACTER SET' from rdb$database union all
2025-06-19 02:55:38.872 select 'CREATE PACKAGE' from rdb$database union all
2025-06-19 02:55:38.877 select 'ALTER PACKAGE' from rdb$database union all
2025-06-19 02:55:38.884 select 'DROP PACKAGE' from rdb$database union all
2025-06-19 02:55:38.889 select 'CREATE PACKAGE BODY' from rdb$database union all
2025-06-19 02:55:38.894 select 'DROP PACKAGE BODY' from rdb$database
2025-06-19 02:55:38.899 )
2025-06-19 02:55:38.904 ,e as (
2025-06-19 02:55:38.908 select 'before' w from rdb$database union all select 'after' from rdb$database
2025-06-19 02:55:38.913 )
2025-06-19 02:55:38.918 ,t as (
2025-06-19 02:55:38.923 select upper(trim(replace(trim(a.x),' ','_')) || iif(e.w='before', '_before', '_after')) as trg_name, a.x, e.w
2025-06-19 02:55:38.928 from e, a
2025-06-19 02:55:38.933 )
2025-06-19 02:55:38.938
2025-06-19 02:55:38.942 select
2025-06-19 02:55:38.947 'create or alter trigger trg_' || t.trg_name
2025-06-19 02:55:38.952 || ' active ' || t.w || ' ' || trim(t.x) || ' as '
2025-06-19 02:55:38.957 || :v_lf
2025-06-19 02:55:38.962 || 'begin'
2025-06-19 02:55:38.967 || :v_lf
2025-06-19 02:55:38.972 || q'{ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then}'
2025-06-19 02:55:38.977 || :v_lf
2025-06-19 02:55:38.982 || ' insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values('
2025-06-19 02:55:38.987 || :v_lf
2025-06-19 02:55:38.991 || q'{'}' || trim(t.trg_name) || q'{'}'
2025-06-19 02:55:38.996 || :v_lf
2025-06-19 02:55:39.000 || q'{, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')}'
2025-06-19 02:55:39.005 || :v_lf
2025-06-19 02:55:39.010 || q'{, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')}'
2025-06-19 02:55:39.015 || :v_lf
2025-06-19 02:55:39.020 || q'{, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')}'
2025-06-19 02:55:39.025 || :v_lf
2025-06-19 02:55:39.030 || q'{, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')}'
2025-06-19 02:55:39.035 || :v_lf
2025-06-19 02:55:39.040 || ');'
2025-06-19 02:55:39.045 || :v_lf
2025-06-19 02:55:39.050 || ' end'
2025-06-19 02:55:39.055 as sttm
2025-06-19 02:55:39.059 from t
2025-06-19 02:55:39.064 as cursor c
2025-06-19 02:55:39.069 do begin
2025-06-19 02:55:39.074 execute statement(c.sttm) with autonomous transaction;
2025-06-19 02:55:39.078 end
2025-06-19 02:55:39.082
2025-06-19 02:55:39.087 rdb$set_context('USER_SESSION', 'SKIP_DDL_TRIGGER', null);
2025-06-19 02:55:39.092 end
2025-06-19 02:55:39.097 ^
2025-06-19 02:55:39.103 commit
2025-06-19 02:55:39.108 ^
2025-06-19 02:55:39.112
2025-06-19 02:55:39.119 create table test(id int not null, name varchar(10))
2025-06-19 02:55:39.124 ^
2025-06-19 02:55:39.129 alter table test add constraint test_pk primary key(id)
2025-06-19 02:55:39.134 ^
2025-06-19 02:55:39.142 ----------
2025-06-19 02:55:39.147 create procedure sp_test as begin end
2025-06-19 02:55:39.151 ^
2025-06-19 02:55:39.157 alter procedure sp_test as declare x int; begin x=1; end
2025-06-19 02:55:39.161 ^
2025-06-19 02:55:39.166 ----------
2025-06-19 02:55:39.171 create function fn_test(a_id int) returns bigint as
2025-06-19 02:55:39.179 begin
2025-06-19 02:55:39.188 return a_id * a_id;
2025-06-19 02:55:39.198 end
2025-06-19 02:55:39.210 ^
2025-06-19 02:55:39.225 alter function fn_test(a_id int) returns int128 as
2025-06-19 02:55:39.235 begin
2025-06-19 02:55:39.243 return a_id * a_id * a_id;
2025-06-19 02:55:39.253 end
2025-06-19 02:55:39.270 ^
2025-06-19 02:55:39.285 ----------
2025-06-19 02:55:39.298 create trigger trg_connect_test on connect as
2025-06-19 02:55:39.316 begin
2025-06-19 02:55:39.326 end
2025-06-19 02:55:39.338 ^
2025-06-19 02:55:39.354 alter trigger trg_connect_test as
2025-06-19 02:55:39.365 declare x int;
2025-06-19 02:55:39.378 begin
2025-06-19 02:55:39.390 x = 1;
2025-06-19 02:55:39.406 end
2025-06-19 02:55:39.418 ^
2025-06-19 02:55:39.430 ----------
2025-06-19 02:55:39.442 create exception exc_test 'Invalud value: @1'
2025-06-19 02:55:39.458 ^
2025-06-19 02:55:39.470 alter exception exc_test 'Bad values: @1 and @2'
2025-06-19 02:55:39.490 ^
2025-06-19 02:55:39.498 ----------
2025-06-19 02:55:39.510 create view v_test as select 1 x from rdb$database
2025-06-19 02:55:39.526 ^
2025-06-19 02:55:39.534 alter view v_test as select 1 x, 2 y from rdb$database
2025-06-19 02:55:39.546 ^
2025-06-19 02:55:39.555 ----------
2025-06-19 02:55:39.570 create domain dm_test int
2025-06-19 02:55:39.582 ^
2025-06-19 02:55:39.590 alter domain dm_test set not null
2025-06-19 02:55:39.606 ^
2025-06-19 02:55:39.614 ----------
2025-06-19 02:55:39.622 create role r_test
2025-06-19 02:55:39.634 ^
2025-06-19 02:55:39.646 alter role r_test set system privileges to use_gstat_utility, ignore_db_triggers
2025-06-19 02:55:39.652 ^
2025-06-19 02:55:39.670 ----------
2025-06-19 02:55:39.678 create sequence g_test
2025-06-19 02:55:39.686 ^
2025-06-19 02:55:39.702 alter sequence g_test restart with 123
2025-06-19 02:55:39.710 ^
2025-06-19 02:55:39.722 ----------
2025-06-19 02:55:39.730 /*
2025-06-19 02:55:39.742 create or alter user u_test password '123' using plugin Srp
2025-06-19 02:55:39.758 ^
2025-06-19 02:55:39.766 alter user u_test password '456'
2025-06-19 02:55:39.778 ^
2025-06-19 02:55:39.790 */
2025-06-19 02:55:39.802 ----------
2025-06-19 02:55:39.810 create index test_name on test(name)
2025-06-19 02:55:39.821 ^
2025-06-19 02:55:39.834 alter index test_name inactive
2025-06-19 02:55:39.842 ^
2025-06-19 02:55:39.851 ----------
2025-06-19 02:55:39.862 create collation name_coll for utf8 from unicode case insensitive
2025-06-19 02:55:39.874 ^
2025-06-19 02:55:39.884 ----------
2025-06-19 02:55:39.894 alter character set iso8859_1 set default collation pt_br
2025-06-19 02:55:39.909 ^
2025-06-19 02:55:39.922 ----------
2025-06-19 02:55:39.934 create or alter package pg_test as
2025-06-19 02:55:39.946 begin
2025-06-19 02:55:39.957 function pg_fn1 returns int;
2025-06-19 02:55:39.970 end
2025-06-19 02:55:39.978 ^
2025-06-19 02:55:39.986 alter package pg_test as
2025-06-19 02:55:39.998 begin
2025-06-19 02:55:40.010 function pg_fn1(a_x int) returns int128;
2025-06-19 02:55:40.022 end
2025-06-19 02:55:40.034 ^
2025-06-19 02:55:40.042
2025-06-19 02:55:40.054 create package body pg_test as
2025-06-19 02:55:40.066 begin
2025-06-19 02:55:40.077 function pg_fn1(a_x int) returns int128 as
2025-06-19 02:55:40.086 begin
2025-06-19 02:55:40.094 return a_x * a_x * a_x;
2025-06-19 02:55:40.105 end
2025-06-19 02:55:40.114 end
2025-06-19 02:55:40.124 ^
2025-06-19 02:55:40.135 recreate table t_ddl_completed(id int primary key)
2025-06-19 02:55:40.151 ^
2025-06-19 02:55:40.171 commit
2025-06-19 02:55:40.178 ^
2025-06-19 02:55:40.186 """
2025-06-19 02:55:40.199
2025-06-19 02:55:40.210 act_db_main.isql(switches=['-q'], input = sql_init, combine_output = True)
2025-06-19 02:55:40.222 out_prep = act_db_main.clean_stdout
2025-06-19 02:55:40.235 act_db_main.reset()
2025-06-19 02:55:40.250
2025-06-19 02:55:40.262 if out_prep:
2025-06-19 02:55:40.270 # Init SQL raised error.
2025-06-19 02:55:40.278 pass
2025-06-19 02:55:40.290 else:
2025-06-19 02:55:40.298
2025-06-19 02:55:40.310 # Query to be used for check that all DB objects present in replica (after last DDL statement completed on master DB):
2025-06-19 02:55:40.322 ddl_ready_query = "select 1 from rdb$relations r where r.rdb$relation_name = upper('t_ddl_completed')"
2025-06-19 02:55:40.330 isql_check_script = ''
2025-06-19 02:55:40.342
2025-06-19 02:55:40.350 # DO NOT DELETE! To be used after #7547 will be fixed
2025-06-19 02:55:40.366 # (currently this query returns NOTHING on replica db)
2025-06-19 02:55:40.372 ######################################
2025-06-19 02:55:40.382 #isql_check_script = """
2025-06-19 02:55:40.398 # set list on;
2025-06-19 02:55:40.414 # set count on;
2025-06-19 02:55:40.422 # select
2025-06-19 02:55:40.441 # a.id
2025-06-19 02:55:40.450 # ,a.ddl_trigger_name
2025-06-19 02:55:40.462 # ,a.event_type
2025-06-19 02:55:40.470 # ,a.object_type
2025-06-19 02:55:40.482 # ,a.ddl_event
2025-06-19 02:55:40.494 # ,a.object_name
2025-06-19 02:55:40.502 # from log_ddl_triggers_activity a
2025-06-19 02:55:40.514 # order by a.id;
2025-06-19 02:55:40.522 #"""
2025-06-19 02:55:40.534
2025-06-19 02:55:40.546 isql_expected_out = """
2025-06-19 02:55:40.554 """
2025-06-19 02:55:40.566
2025-06-19 02:55:40.582 ##############################################################################
2025-06-19 02:55:40.598 ### W A I T U N T I L R E P L I C A B E C O M E S A C T U A L ###
2025-06-19 02:55:40.609 ##############################################################################
2025-06-19 02:55:40.622 watch_replica( act_db_repl, MAX_TIME_FOR_WAIT_DATA_IN_REPLICA, ddl_ready_query, isql_check_script, isql_expected_out)
2025-06-19 02:55:40.629 # Must be EMPTY:
2025-06-19 02:55:40.642 out_main = capsys.readouterr().out
2025-06-19 02:55:40.658
2025-06-19 02:55:40.664
2025-06-19 02:55:40.674 drop_db_objects(act_db_main, act_db_repl, capsys)
2025-06-19 02:55:40.686
2025-06-19 02:55:40.698 # Return FW to initial values (if needed):
2025-06-19 02:55:40.708 if db_main_fw == DbWriteMode.SYNC:
2025-06-19 02:55:40.722 act_db_main.db.set_sync_write()
2025-06-19 02:55:40.734 if db_repl_fw == DbWriteMode.SYNC:
2025-06-19 02:55:40.746 act_db_repl.db.set_sync_write()
2025-06-19 02:55:40.754
2025-06-19 02:55:40.766 # Must be EMPTY:
2025-06-19 02:55:40.774 out_drop = capsys.readouterr().out
2025-06-19 02:55:40.786
2025-06-19 02:55:40.802 if [ x for x in (out_prep, out_main, out_drop) if x.strip() ]:
2025-06-19 02:55:40.814 # We have a problem either with DDL/DML or with dropping DB objects.
2025-06-19 02:55:40.826 # First, we have to RECREATE both master and slave databases
2025-06-19 02:55:40.842 # (otherwise further execution of this test or other replication-related tests most likely will fail):
2025-06-19 02:55:40.854 out_reset = reset_replication(act_db_main, act_db_repl, db_main_file, db_repl_file)
2025-06-19 02:55:40.862
2025-06-19 02:55:40.878 # Next, we display out_main, out_drop and out_reset:
2025-06-19 02:55:40.890 #
2025-06-19 02:55:40.906 print('Problem(s) detected:')
2025-06-19 02:55:40.919 if out_prep.strip():
2025-06-19 02:55:40.933 print('out_prep:')
2025-06-19 02:55:40.950 print(out_prep)
2025-06-19 02:55:40.962 if out_main.strip():
2025-06-19 02:55:40.974 print('out_main:')
2025-06-19 02:55:40.986 print(out_main)
2025-06-19 02:55:40.997 if out_drop.strip():
2025-06-19 02:55:41.011 print('out_drop:')
2025-06-19 02:55:41.018 print(out_drop)
2025-06-19 02:55:41.033 if out_reset.strip():
2025-06-19 02:55:41.044 print('out_reset:')
2025-06-19 02:55:41.057 print(out_reset)
2025-06-19 02:55:41.074
2025-06-19 02:55:41.090 > assert '' == capsys.readouterr().out
2025-06-19 02:55:41.102 E assert
2025-06-19 02:55:41.110 E - Problem(s) detected:
2025-06-19 02:55:41.126 E - out_prep:
2025-06-19 02:55:41.138 E - Statement failed, SQLSTATE = HY000
2025-06-19 02:55:41.146 E - ALTER CHARACTER SET "SYSTEM"."ISO8859_1" failed
2025-06-19 02:55:41.154 E - -Cannot CREATE/ALTER/DROP CHARACTER SET in SYSTEM schema
2025-06-19 02:55:41.165 E - out_drop:
2025-06-19 02:55:41.182 E -
2025-06-19 02:55:41.190 E - ---
2025-06-19 02:55:41.202 E - +++
2025-06-19 02:55:41.218 E - @@ -12,5 +12,553 @@
2025-06-19 02:55:41.303 E - COMMIT WORK; +/* Table: PUBLIC.LOG_DDL_TRIGGERS_ACTIVITY, Owner: SYSDBA */+CREATE TABLE PUBLIC.LOG_DDL_TRIGGERS_ACTIVITY (ID INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1) NOT NULL,+ DDL_TRIGGER_NAME VARCHAR(64),+ EVENT_TYPE VARCHAR(25) NOT NULL,+ OBJECT_TYPE VARCHAR(25) NOT NULL,+ DDL_EVENT VARCHAR(25) NOT NULL,+ OBJECT_NAME VARCHAR(64) NOT NULL,+ DTS TIMESTAMP default 'now',+CONSTRAINT PK_LOG_DDL_TRIGGERS_ACTIVITY PRIMARY KEY (ID));+SET TERM ^ ;++/* Triggers only will work for SQL triggers */+CREATE TRIGGER PUBLIC.TRG_CREATE_TABLE_BEFORE +ACTIVE BEFORE CREATE TABLE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_TABLE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_TABLE_BEFORE +ACTIVE BEFORE ALTER TABLE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_TABLE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_TABLE_BEFORE +ACTIVE BEFORE DROP TABLE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_TABLE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_PROCEDURE_BEFORE +ACTIVE BEFORE CREATE PROCEDURE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_PROCEDURE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_PROCEDURE_BEFORE +ACTIVE BEFORE ALTER PROCEDURE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_PROCEDURE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_PROCEDURE_BEFORE +ACTIVE BEFORE DROP PROCEDURE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_PROCEDURE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_FUNCTION_BEFORE +ACTIVE BEFORE CREATE FUNCTION POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_FUNCTION_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_FUNCTION_BEFORE +ACTIVE BEFORE ALTER FUNCTION POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_FUNCTION_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_FUNCTION_BEFORE +ACTIVE BEFORE DROP FUNCTION POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_FUNCTION_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_TRIGGER_BEFORE +ACTIVE BEFORE CREATE TRIGGER POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_TRIGGER_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_TRIGGER_BEFORE +ACTIVE BEFORE ALTER TRIGGER POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_TRIGGER_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_TRIGGER_BEFORE +ACTIVE BEFORE DROP TRIGGER POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_TRIGGER_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_EXCEPTION_BEFORE +ACTIVE BEFORE CREATE EXCEPTION POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_EXCEPTION_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_EXCEPTION_BEFORE +ACTIVE BEFORE ALTER EXCEPTION POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_EXCEPTION_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_EXCEPTION_BEFORE +ACTIVE BEFORE DROP EXCEPTION POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_EXCEPTION_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_VIEW_BEFORE +ACTIVE BEFORE CREATE VIEW POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_VIEW_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_VIEW_BEFORE +ACTIVE BEFORE ALTER VIEW POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_VIEW_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_VIEW_BEFORE +ACTIVE BEFORE DROP VIEW POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_VIEW_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_DOMAIN_BEFORE +ACTIVE BEFORE CREATE DOMAIN POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_DOMAIN_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_DOMAIN_BEFORE +ACTIVE BEFORE ALTER DOMAIN POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_DOMAIN_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_DOMAIN_BEFORE +ACTIVE BEFORE DROP DOMAIN POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_DOMAIN_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_ROLE_BEFORE +ACTIVE BEFORE CREATE ROLE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_ROLE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_ROLE_BEFORE +ACTIVE BEFORE ALTER ROLE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_ROLE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_ROLE_BEFORE +ACTIVE BEFORE DROP ROLE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_ROLE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_INDEX_BEFORE +ACTIVE BEFORE CREATE INDEX POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_INDEX_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_INDEX_BEFORE +ACTIVE BEFORE ALTER INDEX POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_INDEX_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_INDEX_BEFORE +ACTIVE BEFORE DROP INDEX POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_INDEX_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_SEQUENCE_BEFORE +ACTIVE BEFORE CREATE SEQUENCE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_SEQUENCE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_SEQUENCE_BEFORE +ACTIVE BEFORE ALTER SEQUENCE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_SEQUENCE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_SEQUENCE_BEFORE +ACTIVE BEFORE DROP SEQUENCE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_SEQUENCE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_USER_BEFORE +ACTIVE BEFORE CREATE USER POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_USER_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_USER_BEFORE +ACTIVE BEFORE ALTER USER POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_USER_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_USER_BEFORE +ACTIVE BEFORE DROP USER POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_USER_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_COLLATION_BEFORE +ACTIVE BEFORE CREATE COLLATION POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_COLLATION_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_COLLATION_BEFORE +ACTIVE BEFORE DROP COLLATION POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_COLLATION_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_CHARACTER_SET_BEFORE +ACTIVE BEFORE ALTER CHARACTER SET POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_CHARACTER_SET_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_PACKAGE_BEFORE +ACTIVE BEFORE CREATE PACKAGE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_PACKAGE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ANY_DDL_STATEMENT_BEFORE +ACTIVE BEFORE ANY DDL STATEMENT POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ANY_DDL_STATEMENT_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^+++SET TERM ; ^+COMMIT WORK;+ /* Grant permissions for this database */ GRANT USAGE ON SCHEMA PUBLIC TO USER PUBLIC;
2025-06-19 02:55:41.323 E -
2025-06-19 02:55:41.340
2025-06-19 02:55:41.354 tests/functional/replication/test_ddl_triggers_must_not_fire_on_replica.py:663: AssertionError
|
3 #text |
act_db_main = <firebird.qa.plugin.Action pytest object at [hex]>
act_db_repl = <firebird.qa.plugin.Action pytest object at [hex]>
capsys = <_pytest.capture.CaptureFixture pytest object at [hex]>
@pytest.mark.replication
@pytest.mark.version('>=4.0.1')
def test_1(act_db_main: Action, act_db_repl: Action, capsys):
out_prep, out_main, out_drop = '', '', ''
# Obtain full path + filename for DB_MAIN and DB_REPL aliases.
# NOTE: we must NOT use 'a.db.db_path' for ALIASED databases!
# It will return '.' rather than full path+filename.
# Use only con.info.name for that!
#
db_main_file, db_repl_file = '', ''
db_main_fw, db_repl_fw = DbWriteMode.ASYNC, DbWriteMode.ASYNC
with act_db_main.db.connect(no_db_triggers = True) as con:
#if act_db_main.vars['server-arch'] == 'Classic' and os.name != 'nt':
# pytest.skip("Waiting for FIX: 'Engine is shutdown' in replication log for CS. Linux only.")
db_main_file = con.info.name
db_main_fw = con.info.write_mode
with act_db_repl.db.connect(no_db_triggers = True) as con:
db_repl_file = con.info.name
db_repl_fw = con.info.write_mode
# ONLY FOR THIS test: forcedly change FW to OFF, without any condition.
# Otherwise changes may not be delivered to replica for <MAX_TIME_FOR_WAIT_DATA_IN_REPLICA> seconds.
#####################
act_db_main.db.set_async_write()
act_db_repl.db.set_async_write()
# Must be EMPTY:
out_prep = capsys.readouterr().out
sql_init = """
set bail on;
recreate table log_ddl_triggers_activity (
id int generated by default as identity constraint pk_log_ddl_triggers_activity primary key
,ddl_trigger_name varchar(64)
,event_type varchar(25) not null
,object_type varchar(25) not null
,ddl_event varchar(25) not null
,object_name varchar(64) not null
,dts timestamp default 'now'
);
set term ^;
execute block as
declare v_lf char(1) = x'0A';
begin
rdb$set_context('USER_SESSION', 'SKIP_DDL_TRIGGER', '1');
for
with
a as (
select 'ANY DDL STATEMENT' x from rdb$database union all
select 'CREATE TABLE' from rdb$database union all
select 'ALTER TABLE' from rdb$database union all
select 'DROP TABLE' from rdb$database union all
select 'CREATE PROCEDURE' from rdb$database union all
select 'ALTER PROCEDURE' from rdb$database union all
select 'DROP PROCEDURE' from rdb$database union all
select 'CREATE FUNCTION' from rdb$database union all
select 'ALTER FUNCTION' from rdb$database union all
select 'DROP FUNCTION' from rdb$database union all
select 'CREATE TRIGGER' from rdb$database union all
select 'ALTER TRIGGER' from rdb$database union all
select 'DROP TRIGGER' from rdb$database union all
select 'CREATE EXCEPTION' from rdb$database union all
select 'ALTER EXCEPTION' from rdb$database union all
select 'DROP EXCEPTION' from rdb$database union all
select 'CREATE VIEW' from rdb$database union all
select 'ALTER VIEW' from rdb$database union all
select 'DROP VIEW' from rdb$database union all
select 'CREATE DOMAIN' from rdb$database union all
select 'ALTER DOMAIN' from rdb$database union all
select 'DROP DOMAIN' from rdb$database union all
select 'CREATE ROLE' from rdb$database union all
select 'ALTER ROLE' from rdb$database union all
select 'DROP ROLE' from rdb$database union all
select 'CREATE SEQUENCE' from rdb$database union all
select 'ALTER SEQUENCE' from rdb$database union all
select 'DROP SEQUENCE' from rdb$database union all
select 'CREATE USER' from rdb$database union all
select 'ALTER USER' from rdb$database union all
select 'DROP USER' from rdb$database union all
select 'CREATE INDEX' from rdb$database union all
select 'ALTER INDEX' from rdb$database union all
select 'DROP INDEX' from rdb$database union all
select 'CREATE COLLATION' from rdb$database union all
select 'DROP COLLATION' from rdb$database union all
select 'ALTER CHARACTER SET' from rdb$database union all
select 'CREATE PACKAGE' from rdb$database union all
select 'ALTER PACKAGE' from rdb$database union all
select 'DROP PACKAGE' from rdb$database union all
select 'CREATE PACKAGE BODY' from rdb$database union all
select 'DROP PACKAGE BODY' from rdb$database
)
,e as (
select 'before' w from rdb$database union all select 'after' from rdb$database
)
,t as (
select upper(trim(replace(trim(a.x),' ','_')) || iif(e.w='before', '_before', '_after')) as trg_name, a.x, e.w
from e, a
)
select
'create or alter trigger trg_' || t.trg_name
|| ' active ' || t.w || ' ' || trim(t.x) || ' as '
|| :v_lf
|| 'begin'
|| :v_lf
|| q'{ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then}'
|| :v_lf
|| ' insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values('
|| :v_lf
|| q'{'}' || trim(t.trg_name) || q'{'}'
|| :v_lf
|| q'{, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')}'
|| :v_lf
|| q'{, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')}'
|| :v_lf
|| q'{, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')}'
|| :v_lf
|| q'{, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')}'
|| :v_lf
|| ');'
|| :v_lf
|| ' end'
as sttm
from t
as cursor c
do begin
execute statement(c.sttm) with autonomous transaction;
end
rdb$set_context('USER_SESSION', 'SKIP_DDL_TRIGGER', null);
end
^
commit
^
create table test(id int not null, name varchar(10))
^
alter table test add constraint test_pk primary key(id)
^
----------
create procedure sp_test as begin end
^
alter procedure sp_test as declare x int; begin x=1; end
^
----------
create function fn_test(a_id int) returns bigint as
begin
return a_id * a_id;
end
^
alter function fn_test(a_id int) returns int128 as
begin
return a_id * a_id * a_id;
end
^
----------
create trigger trg_connect_test on connect as
begin
end
^
alter trigger trg_connect_test as
declare x int;
begin
x = 1;
end
^
----------
create exception exc_test 'Invalud value: @1'
^
alter exception exc_test 'Bad values: @1 and @2'
^
----------
create view v_test as select 1 x from rdb$database
^
alter view v_test as select 1 x, 2 y from rdb$database
^
----------
create domain dm_test int
^
alter domain dm_test set not null
^
----------
create role r_test
^
alter role r_test set system privileges to use_gstat_utility, ignore_db_triggers
^
----------
create sequence g_test
^
alter sequence g_test restart with 123
^
----------
/*
create or alter user u_test password '123' using plugin Srp
^
alter user u_test password '456'
^
*/
----------
create index test_name on test(name)
^
alter index test_name inactive
^
----------
create collation name_coll for utf8 from unicode case insensitive
^
----------
alter character set iso8859_1 set default collation pt_br
^
----------
create or alter package pg_test as
begin
function pg_fn1 returns int;
end
^
alter package pg_test as
begin
function pg_fn1(a_x int) returns int128;
end
^
create package body pg_test as
begin
function pg_fn1(a_x int) returns int128 as
begin
return a_x * a_x * a_x;
end
end
^
recreate table t_ddl_completed(id int primary key)
^
commit
^
"""
act_db_main.isql(switches=['-q'], input = sql_init, combine_output = True)
out_prep = act_db_main.clean_stdout
act_db_main.reset()
if out_prep:
# Init SQL raised error.
pass
else:
# Query to be used for check that all DB objects present in replica (after last DDL statement completed on master DB):
ddl_ready_query = "select 1 from rdb$relations r where r.rdb$relation_name = upper('t_ddl_completed')"
isql_check_script = ''
# DO NOT DELETE! To be used after #7547 will be fixed
# (currently this query returns NOTHING on replica db)
######################################
#isql_check_script = """
# set list on;
# set count on;
# select
# a.id
# ,a.ddl_trigger_name
# ,a.event_type
# ,a.object_type
# ,a.ddl_event
# ,a.object_name
# from log_ddl_triggers_activity a
# order by a.id;
#"""
isql_expected_out = """
"""
##############################################################################
### W A I T U N T I L R E P L I C A B E C O M E S A C T U A L ###
##############################################################################
watch_replica( act_db_repl, MAX_TIME_FOR_WAIT_DATA_IN_REPLICA, ddl_ready_query, isql_check_script, isql_expected_out)
# Must be EMPTY:
out_main = capsys.readouterr().out
drop_db_objects(act_db_main, act_db_repl, capsys)
# Return FW to initial values (if needed):
if db_main_fw == DbWriteMode.SYNC:
act_db_main.db.set_sync_write()
if db_repl_fw == DbWriteMode.SYNC:
act_db_repl.db.set_sync_write()
# Must be EMPTY:
out_drop = capsys.readouterr().out
if [ x for x in (out_prep, out_main, out_drop) if x.strip() ]:
# We have a problem either with DDL/DML or with dropping DB objects.
# First, we have to RECREATE both master and slave databases
# (otherwise further execution of this test or other replication-related tests most likely will fail):
out_reset = reset_replication(act_db_main, act_db_repl, db_main_file, db_repl_file)
# Next, we display out_main, out_drop and out_reset:
#
print('Problem(s) detected:')
if out_prep.strip():
print('out_prep:')
print(out_prep)
if out_main.strip():
print('out_main:')
print(out_main)
if out_drop.strip():
print('out_drop:')
print(out_drop)
if out_reset.strip():
print('out_reset:')
print(out_reset)
> assert '' == capsys.readouterr().out
E assert
E - Problem(s) detected:
E - out_prep:
E - Statement failed, SQLSTATE = HY000
E - ALTER CHARACTER SET "SYSTEM"."ISO8859_1" failed
E - -Cannot CREATE/ALTER/DROP CHARACTER SET in SYSTEM schema
E - out_drop:
E -
E - ---
E - +++
E - @@ -12,5 +12,553 @@
E - COMMIT WORK; +/* Table: PUBLIC.LOG_DDL_TRIGGERS_ACTIVITY, Owner: SYSDBA */+CREATE TABLE PUBLIC.LOG_DDL_TRIGGERS_ACTIVITY (ID INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1) NOT NULL,+ DDL_TRIGGER_NAME VARCHAR(64),+ EVENT_TYPE VARCHAR(25) NOT NULL,+ OBJECT_TYPE VARCHAR(25) NOT NULL,+ DDL_EVENT VARCHAR(25) NOT NULL,+ OBJECT_NAME VARCHAR(64) NOT NULL,+ DTS TIMESTAMP default 'now',+CONSTRAINT PK_LOG_DDL_TRIGGERS_ACTIVITY PRIMARY KEY (ID));+SET TERM ^ ;++/* Triggers only will work for SQL triggers */+CREATE TRIGGER PUBLIC.TRG_CREATE_TABLE_BEFORE +ACTIVE BEFORE CREATE TABLE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_TABLE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_TABLE_BEFORE +ACTIVE BEFORE ALTER TABLE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_TABLE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_TABLE_BEFORE +ACTIVE BEFORE DROP TABLE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_TABLE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_PROCEDURE_BEFORE +ACTIVE BEFORE CREATE PROCEDURE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_PROCEDURE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_PROCEDURE_BEFORE +ACTIVE BEFORE ALTER PROCEDURE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_PROCEDURE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_PROCEDURE_BEFORE +ACTIVE BEFORE DROP PROCEDURE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_PROCEDURE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_FUNCTION_BEFORE +ACTIVE BEFORE CREATE FUNCTION POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_FUNCTION_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_FUNCTION_BEFORE +ACTIVE BEFORE ALTER FUNCTION POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_FUNCTION_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_FUNCTION_BEFORE +ACTIVE BEFORE DROP FUNCTION POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_FUNCTION_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_TRIGGER_BEFORE +ACTIVE BEFORE CREATE TRIGGER POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_TRIGGER_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_TRIGGER_BEFORE +ACTIVE BEFORE ALTER TRIGGER POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_TRIGGER_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_TRIGGER_BEFORE +ACTIVE BEFORE DROP TRIGGER POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_TRIGGER_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_EXCEPTION_BEFORE +ACTIVE BEFORE CREATE EXCEPTION POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_EXCEPTION_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_EXCEPTION_BEFORE +ACTIVE BEFORE ALTER EXCEPTION POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_EXCEPTION_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_EXCEPTION_BEFORE +ACTIVE BEFORE DROP EXCEPTION POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_EXCEPTION_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_VIEW_BEFORE +ACTIVE BEFORE CREATE VIEW POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_VIEW_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_VIEW_BEFORE +ACTIVE BEFORE ALTER VIEW POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_VIEW_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_VIEW_BEFORE +ACTIVE BEFORE DROP VIEW POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_VIEW_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_DOMAIN_BEFORE +ACTIVE BEFORE CREATE DOMAIN POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_DOMAIN_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_DOMAIN_BEFORE +ACTIVE BEFORE ALTER DOMAIN POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_DOMAIN_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_DOMAIN_BEFORE +ACTIVE BEFORE DROP DOMAIN POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_DOMAIN_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_ROLE_BEFORE +ACTIVE BEFORE CREATE ROLE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_ROLE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_ROLE_BEFORE +ACTIVE BEFORE ALTER ROLE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_ROLE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_ROLE_BEFORE +ACTIVE BEFORE DROP ROLE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_ROLE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_INDEX_BEFORE +ACTIVE BEFORE CREATE INDEX POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_INDEX_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_INDEX_BEFORE +ACTIVE BEFORE ALTER INDEX POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_INDEX_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_INDEX_BEFORE +ACTIVE BEFORE DROP INDEX POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_INDEX_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_SEQUENCE_BEFORE +ACTIVE BEFORE CREATE SEQUENCE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_SEQUENCE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_SEQUENCE_BEFORE +ACTIVE BEFORE ALTER SEQUENCE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_SEQUENCE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_SEQUENCE_BEFORE +ACTIVE BEFORE DROP SEQUENCE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_SEQUENCE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_USER_BEFORE +ACTIVE BEFORE CREATE USER POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_USER_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_USER_BEFORE +ACTIVE BEFORE ALTER USER POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_USER_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_USER_BEFORE +ACTIVE BEFORE DROP USER POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_USER_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_COLLATION_BEFORE +ACTIVE BEFORE CREATE COLLATION POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_COLLATION_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_DROP_COLLATION_BEFORE +ACTIVE BEFORE DROP COLLATION POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'DROP_COLLATION_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ALTER_CHARACTER_SET_BEFORE +ACTIVE BEFORE ALTER CHARACTER SET POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ALTER_CHARACTER_SET_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_CREATE_PACKAGE_BEFORE +ACTIVE BEFORE CREATE PACKAGE POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'CREATE_PACKAGE_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^++CREATE TRIGGER PUBLIC.TRG_ANY_DDL_STATEMENT_BEFORE +ACTIVE BEFORE ANY DDL STATEMENT POSITION 0 +as +begin+ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then+ insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values(+'ANY_DDL_STATEMENT_BEFORE'+, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')+, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')+, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')+);+ end ^+++SET TERM ; ^+COMMIT WORK;+ /* Grant permissions for this database */ GRANT USAGE ON SCHEMA PUBLIC TO USER PUBLIC;
E -
tests/functional/replication/test_ddl_triggers_must_not_fire_on_replica.py:663: AssertionError
|