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,567 @@
- 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_ALTER_PACKAGE_BEFORE +ACTIVE BEFORE ALTER 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(+'ALTER_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-21 02:55:27.627
2025-06-21 02:55:27.631 act_db_main = <firebird.qa.plugin.Action object at [hex]>
2025-06-21 02:55:27.636 act_db_repl = <firebird.qa.plugin.Action object at [hex]>
2025-06-21 02:55:27.640 capsys = <_pytest.capture.CaptureFixture object at [hex]>
2025-06-21 02:55:27.645
2025-06-21 02:55:27.649 @pytest.mark.replication
2025-06-21 02:55:27.654 @pytest.mark.version('>=4.0.1')
2025-06-21 02:55:27.659 def test_1(act_db_main: Action, act_db_repl: Action, capsys):
2025-06-21 02:55:27.663
2025-06-21 02:55:27.668 out_prep, out_main, out_drop = '', '', ''
2025-06-21 02:55:27.672
2025-06-21 02:55:27.677 # Obtain full path + filename for DB_MAIN and DB_REPL aliases.
2025-06-21 02:55:27.681 # NOTE: we must NOT use 'a.db.db_path' for ALIASED databases!
2025-06-21 02:55:27.686 # It will return '.' rather than full path+filename.
2025-06-21 02:55:27.690 # Use only con.info.name for that!
2025-06-21 02:55:27.695 #
2025-06-21 02:55:27.699 db_main_file, db_repl_file = '', ''
2025-06-21 02:55:27.704 db_main_fw, db_repl_fw = DbWriteMode.ASYNC, DbWriteMode.ASYNC
2025-06-21 02:55:27.708
2025-06-21 02:55:27.713 with act_db_main.db.connect(no_db_triggers = True) as con:
2025-06-21 02:55:27.717 #if act_db_main.vars['server-arch'] == 'Classic' and os.name != 'nt':
2025-06-21 02:55:27.722 # pytest.skip("Waiting for FIX: 'Engine is shutdown' in replication log for CS. Linux only.")
2025-06-21 02:55:27.727
2025-06-21 02:55:27.732 db_main_file = con.info.name
2025-06-21 02:55:27.736 db_main_fw = con.info.write_mode
2025-06-21 02:55:27.741
2025-06-21 02:55:27.746 with act_db_repl.db.connect(no_db_triggers = True) as con:
2025-06-21 02:55:27.751 db_repl_file = con.info.name
2025-06-21 02:55:27.755 db_repl_fw = con.info.write_mode
2025-06-21 02:55:27.759
2025-06-21 02:55:27.764 # ONLY FOR THIS test: forcedly change FW to OFF, without any condition.
2025-06-21 02:55:27.770 # Otherwise changes may not be delivered to replica for <MAX_TIME_FOR_WAIT_DATA_IN_REPLICA> seconds.
2025-06-21 02:55:27.774 #####################
2025-06-21 02:55:27.779 act_db_main.db.set_async_write()
2025-06-21 02:55:27.783 act_db_repl.db.set_async_write()
2025-06-21 02:55:27.787
2025-06-21 02:55:27.792
2025-06-21 02:55:27.796 # Must be EMPTY:
2025-06-21 02:55:27.801 out_prep = capsys.readouterr().out
2025-06-21 02:55:27.805
2025-06-21 02:55:27.811 sql_init = """
2025-06-21 02:55:27.817 set bail on;
2025-06-21 02:55:27.822
2025-06-21 02:55:27.829 recreate table log_ddl_triggers_activity (
2025-06-21 02:55:27.835 id int generated by default as identity constraint pk_log_ddl_triggers_activity primary key
2025-06-21 02:55:27.841 ,ddl_trigger_name varchar(64)
2025-06-21 02:55:27.847 ,event_type varchar(25) not null
2025-06-21 02:55:27.853 ,object_type varchar(25) not null
2025-06-21 02:55:27.858 ,ddl_event varchar(25) not null
2025-06-21 02:55:27.863 ,object_name varchar(64) not null
2025-06-21 02:55:27.868 ,dts timestamp default 'now'
2025-06-21 02:55:27.873 );
2025-06-21 02:55:27.878
2025-06-21 02:55:27.882
2025-06-21 02:55:27.887 set term ^;
2025-06-21 02:55:27.892 execute block as
2025-06-21 02:55:27.897 declare v_lf char(1) = x'0A';
2025-06-21 02:55:27.902 begin
2025-06-21 02:55:27.906 rdb$set_context('USER_SESSION', 'SKIP_DDL_TRIGGER', '1');
2025-06-21 02:55:27.911
2025-06-21 02:55:27.916 for
2025-06-21 02:55:27.921 with
2025-06-21 02:55:27.926 a as (
2025-06-21 02:55:27.930 select 'ANY DDL STATEMENT' x from rdb$database union all
2025-06-21 02:55:27.935 select 'CREATE TABLE' from rdb$database union all
2025-06-21 02:55:27.940 select 'ALTER TABLE' from rdb$database union all
2025-06-21 02:55:27.945 select 'DROP TABLE' from rdb$database union all
2025-06-21 02:55:27.950 select 'CREATE PROCEDURE' from rdb$database union all
2025-06-21 02:55:27.955 select 'ALTER PROCEDURE' from rdb$database union all
2025-06-21 02:55:27.961 select 'DROP PROCEDURE' from rdb$database union all
2025-06-21 02:55:27.965 select 'CREATE FUNCTION' from rdb$database union all
2025-06-21 02:55:27.971 select 'ALTER FUNCTION' from rdb$database union all
2025-06-21 02:55:27.976 select 'DROP FUNCTION' from rdb$database union all
2025-06-21 02:55:27.981 select 'CREATE TRIGGER' from rdb$database union all
2025-06-21 02:55:27.986 select 'ALTER TRIGGER' from rdb$database union all
2025-06-21 02:55:27.991 select 'DROP TRIGGER' from rdb$database union all
2025-06-21 02:55:27.996 select 'CREATE EXCEPTION' from rdb$database union all
2025-06-21 02:55:28.001 select 'ALTER EXCEPTION' from rdb$database union all
2025-06-21 02:55:28.006 select 'DROP EXCEPTION' from rdb$database union all
2025-06-21 02:55:28.011 select 'CREATE VIEW' from rdb$database union all
2025-06-21 02:55:28.016 select 'ALTER VIEW' from rdb$database union all
2025-06-21 02:55:28.022 select 'DROP VIEW' from rdb$database union all
2025-06-21 02:55:28.027 select 'CREATE DOMAIN' from rdb$database union all
2025-06-21 02:55:28.032 select 'ALTER DOMAIN' from rdb$database union all
2025-06-21 02:55:28.037 select 'DROP DOMAIN' from rdb$database union all
2025-06-21 02:55:28.043 select 'CREATE ROLE' from rdb$database union all
2025-06-21 02:55:28.048 select 'ALTER ROLE' from rdb$database union all
2025-06-21 02:55:28.053 select 'DROP ROLE' from rdb$database union all
2025-06-21 02:55:28.058 select 'CREATE SEQUENCE' from rdb$database union all
2025-06-21 02:55:28.064 select 'ALTER SEQUENCE' from rdb$database union all
2025-06-21 02:55:28.069 select 'DROP SEQUENCE' from rdb$database union all
2025-06-21 02:55:28.074 select 'CREATE USER' from rdb$database union all
2025-06-21 02:55:28.080 select 'ALTER USER' from rdb$database union all
2025-06-21 02:55:28.085 select 'DROP USER' from rdb$database union all
2025-06-21 02:55:28.090 select 'CREATE INDEX' from rdb$database union all
2025-06-21 02:55:28.095 select 'ALTER INDEX' from rdb$database union all
2025-06-21 02:55:28.101 select 'DROP INDEX' from rdb$database union all
2025-06-21 02:55:28.105 select 'CREATE COLLATION' from rdb$database union all
2025-06-21 02:55:28.111 select 'DROP COLLATION' from rdb$database union all
2025-06-21 02:55:28.116 select 'ALTER CHARACTER SET' from rdb$database union all
2025-06-21 02:55:28.121 select 'CREATE PACKAGE' from rdb$database union all
2025-06-21 02:55:28.126 select 'ALTER PACKAGE' from rdb$database union all
2025-06-21 02:55:28.130 select 'DROP PACKAGE' from rdb$database union all
2025-06-21 02:55:28.135 select 'CREATE PACKAGE BODY' from rdb$database union all
2025-06-21 02:55:28.140 select 'DROP PACKAGE BODY' from rdb$database
2025-06-21 02:55:28.145 )
2025-06-21 02:55:28.150 ,e as (
2025-06-21 02:55:28.155 select 'before' w from rdb$database union all select 'after' from rdb$database
2025-06-21 02:55:28.160 )
2025-06-21 02:55:28.165 ,t as (
2025-06-21 02:55:28.170 select upper(trim(replace(trim(a.x),' ','_')) || iif(e.w='before', '_before', '_after')) as trg_name, a.x, e.w
2025-06-21 02:55:28.174 from e, a
2025-06-21 02:55:28.179 )
2025-06-21 02:55:28.184
2025-06-21 02:55:28.189 select
2025-06-21 02:55:28.194 'create or alter trigger trg_' || t.trg_name
2025-06-21 02:55:28.199 || ' active ' || t.w || ' ' || trim(t.x) || ' as '
2025-06-21 02:55:28.204 || :v_lf
2025-06-21 02:55:28.209 || 'begin'
2025-06-21 02:55:28.214 || :v_lf
2025-06-21 02:55:28.219 || q'{ if (rdb$get_context('USER_SESSION', 'SKIP_DDL_TRIGGER') is null) then}'
2025-06-21 02:55:28.223 || :v_lf
2025-06-21 02:55:28.228 || ' insert into log_ddl_triggers_activity(ddl_trigger_name, event_type, object_type, ddl_event, object_name) values('
2025-06-21 02:55:28.232 || :v_lf
2025-06-21 02:55:28.237 || q'{'}' || trim(t.trg_name) || q'{'}'
2025-06-21 02:55:28.242 || :v_lf
2025-06-21 02:55:28.246 || q'{, rdb$get_context('DDL_TRIGGER', 'EVENT_TYPE')}'
2025-06-21 02:55:28.251 || :v_lf
2025-06-21 02:55:28.256 || q'{, rdb$get_context('DDL_TRIGGER', 'OBJECT_TYPE')}'
2025-06-21 02:55:28.260 || :v_lf
2025-06-21 02:55:28.266 || q'{, rdb$get_context('DDL_TRIGGER', 'DDL_EVENT')}'
2025-06-21 02:55:28.270 || :v_lf
2025-06-21 02:55:28.276 || q'{, rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME')}'
2025-06-21 02:55:28.280 || :v_lf
2025-06-21 02:55:28.285 || ');'
2025-06-21 02:55:28.290 || :v_lf
2025-06-21 02:55:28.295 || ' end'
2025-06-21 02:55:28.300 as sttm
2025-06-21 02:55:28.305 from t
2025-06-21 02:55:28.310 as cursor c
2025-06-21 02:55:28.315 do begin
2025-06-21 02:55:28.320 execute statement(c.sttm) with autonomous transaction;
2025-06-21 02:55:28.325 end
2025-06-21 02:55:28.329
2025-06-21 02:55:28.333 rdb$set_context('USER_SESSION', 'SKIP_DDL_TRIGGER', null);
2025-06-21 02:55:28.338 end
2025-06-21 02:55:28.342 ^
2025-06-21 02:55:28.347 commit
2025-06-21 02:55:28.351 ^
2025-06-21 02:55:28.355
2025-06-21 02:55:28.359 create table test(id int not null, name varchar(10))
2025-06-21 02:55:28.364 ^
2025-06-21 02:55:28.368 alter table test add constraint test_pk primary key(id)
2025-06-21 02:55:28.373 ^
2025-06-21 02:55:28.377 ----------
2025-06-21 02:55:28.381 create procedure sp_test as begin end
2025-06-21 02:55:28.386 ^
2025-06-21 02:55:28.390 alter procedure sp_test as declare x int; begin x=1; end
2025-06-21 02:55:28.394 ^
2025-06-21 02:55:28.399 ----------
2025-06-21 02:55:28.403 create function fn_test(a_id int) returns bigint as
2025-06-21 02:55:28.407 begin
2025-06-21 02:55:28.412 return a_id * a_id;
2025-06-21 02:55:28.416 end
2025-06-21 02:55:28.420 ^
2025-06-21 02:55:28.425 alter function fn_test(a_id int) returns int128 as
2025-06-21 02:55:28.429 begin
2025-06-21 02:55:28.433 return a_id * a_id * a_id;
2025-06-21 02:55:28.438 end
2025-06-21 02:55:28.442 ^
2025-06-21 02:55:28.447 ----------
2025-06-21 02:55:28.452 create trigger trg_connect_test on connect as
2025-06-21 02:55:28.457 begin
2025-06-21 02:55:28.461 end
2025-06-21 02:55:28.466 ^
2025-06-21 02:55:28.470 alter trigger trg_connect_test as
2025-06-21 02:55:28.474 declare x int;
2025-06-21 02:55:28.479 begin
2025-06-21 02:55:28.483 x = 1;
2025-06-21 02:55:28.487 end
2025-06-21 02:55:28.491 ^
2025-06-21 02:55:28.496 ----------
2025-06-21 02:55:28.500 create exception exc_test 'Invalud value: @1'
2025-06-21 02:55:28.504 ^
2025-06-21 02:55:28.509 alter exception exc_test 'Bad values: @1 and @2'
2025-06-21 02:55:28.513 ^
2025-06-21 02:55:28.517 ----------
2025-06-21 02:55:28.522 create view v_test as select 1 x from rdb$database
2025-06-21 02:55:28.526 ^
2025-06-21 02:55:28.530 alter view v_test as select 1 x, 2 y from rdb$database
2025-06-21 02:55:28.535 ^
2025-06-21 02:55:28.539 ----------
2025-06-21 02:55:28.543 create domain dm_test int
2025-06-21 02:55:28.548 ^
2025-06-21 02:55:28.552 alter domain dm_test set not null
2025-06-21 02:55:28.557 ^
2025-06-21 02:55:28.561 ----------
2025-06-21 02:55:28.565 create role r_test
2025-06-21 02:55:28.570 ^
2025-06-21 02:55:28.574 alter role r_test set system privileges to use_gstat_utility, ignore_db_triggers
2025-06-21 02:55:28.579 ^
2025-06-21 02:55:28.583 ----------
2025-06-21 02:55:28.588 create sequence g_test
2025-06-21 02:55:28.592 ^
2025-06-21 02:55:28.597 alter sequence g_test restart with 123
2025-06-21 02:55:28.601 ^
2025-06-21 02:55:28.605 ----------
2025-06-21 02:55:28.610 /*
2025-06-21 02:55:28.614 create or alter user u_test password '123' using plugin Srp
2025-06-21 02:55:28.619 ^
2025-06-21 02:55:28.623 alter user u_test password '456'
2025-06-21 02:55:28.628 ^
2025-06-21 02:55:28.632 */
2025-06-21 02:55:28.636 ----------
2025-06-21 02:55:28.641 create index test_name on test(name)
2025-06-21 02:55:28.645 ^
2025-06-21 02:55:28.649 alter index test_name inactive
2025-06-21 02:55:28.654 ^
2025-06-21 02:55:28.658 ----------
2025-06-21 02:55:28.663 create collation name_coll for utf8 from unicode case insensitive
2025-06-21 02:55:28.667 ^
2025-06-21 02:55:28.672 ----------
2025-06-21 02:55:28.676 alter character set iso8859_1 set default collation pt_br
2025-06-21 02:55:28.681 ^
2025-06-21 02:55:28.685 ----------
2025-06-21 02:55:28.689 create or alter package pg_test as
2025-06-21 02:55:28.694 begin
2025-06-21 02:55:28.699 function pg_fn1 returns int;
2025-06-21 02:55:28.703 end
2025-06-21 02:55:28.708 ^
2025-06-21 02:55:28.712 alter package pg_test as
2025-06-21 02:55:28.717 begin
2025-06-21 02:55:28.721 function pg_fn1(a_x int) returns int128;
2025-06-21 02:55:28.726 end
2025-06-21 02:55:28.731 ^
2025-06-21 02:55:28.735
2025-06-21 02:55:28.740 create package body pg_test as
2025-06-21 02:55:28.744 begin
2025-06-21 02:55:28.749 function pg_fn1(a_x int) returns int128 as
2025-06-21 02:55:28.753 begin
2025-06-21 02:55:28.758 return a_x * a_x * a_x;
2025-06-21 02:55:28.762 end
2025-06-21 02:55:28.767 end
2025-06-21 02:55:28.771 ^
2025-06-21 02:55:28.776 recreate table t_ddl_completed(id int primary key)
2025-06-21 02:55:28.780 ^
2025-06-21 02:55:28.785 commit
2025-06-21 02:55:28.789 ^
2025-06-21 02:55:28.793 """
2025-06-21 02:55:28.798
2025-06-21 02:55:28.802 act_db_main.isql(switches=['-q'], input = sql_init, combine_output = True)
2025-06-21 02:55:28.807 out_prep = act_db_main.clean_stdout
2025-06-21 02:55:28.811 act_db_main.reset()
2025-06-21 02:55:28.815
2025-06-21 02:55:28.820 if out_prep:
2025-06-21 02:55:28.824 # Init SQL raised error.
2025-06-21 02:55:28.828 pass
2025-06-21 02:55:28.833 else:
2025-06-21 02:55:28.837
2025-06-21 02:55:28.842 # Query to be used for check that all DB objects present in replica (after last DDL statement completed on master DB):
2025-06-21 02:55:28.846 ddl_ready_query = "select 1 from rdb$relations r where r.rdb$relation_name = upper('t_ddl_completed')"
2025-06-21 02:55:28.851 isql_check_script = ''
2025-06-21 02:55:28.855
2025-06-21 02:55:28.860 # DO NOT DELETE! To be used after #7547 will be fixed
2025-06-21 02:55:28.865 # (currently this query returns NOTHING on replica db)
2025-06-21 02:55:28.870 ######################################
2025-06-21 02:55:28.875 #isql_check_script = """
2025-06-21 02:55:28.879 # set list on;
2025-06-21 02:55:28.884 # set count on;
2025-06-21 02:55:28.889 # select
2025-06-21 02:55:28.893 # a.id
2025-06-21 02:55:28.898 # ,a.ddl_trigger_name
2025-06-21 02:55:28.902 # ,a.event_type
2025-06-21 02:55:28.906 # ,a.object_type
2025-06-21 02:55:28.911 # ,a.ddl_event
2025-06-21 02:55:28.916 # ,a.object_name
2025-06-21 02:55:28.920 # from log_ddl_triggers_activity a
2025-06-21 02:55:28.925 # order by a.id;
2025-06-21 02:55:28.929 #"""
2025-06-21 02:55:28.934
2025-06-21 02:55:28.938 isql_expected_out = """
2025-06-21 02:55:28.942 """
2025-06-21 02:55:28.947
2025-06-21 02:55:28.951 ##############################################################################
2025-06-21 02:55:28.956 ### 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-21 02:55:28.960 ##############################################################################
2025-06-21 02:55:28.965 watch_replica( act_db_repl, MAX_TIME_FOR_WAIT_DATA_IN_REPLICA, ddl_ready_query, isql_check_script, isql_expected_out)
2025-06-21 02:55:28.969 # Must be EMPTY:
2025-06-21 02:55:28.973 out_main = capsys.readouterr().out
2025-06-21 02:55:28.978
2025-06-21 02:55:28.982
2025-06-21 02:55:28.986 drop_db_objects(act_db_main, act_db_repl, capsys)
2025-06-21 02:55:28.991
2025-06-21 02:55:28.995 # Return FW to initial values (if needed):
2025-06-21 02:55:28.999 if db_main_fw == DbWriteMode.SYNC:
2025-06-21 02:55:29.004 act_db_main.db.set_sync_write()
2025-06-21 02:55:29.009 if db_repl_fw == DbWriteMode.SYNC:
2025-06-21 02:55:29.014 act_db_repl.db.set_sync_write()
2025-06-21 02:55:29.018
2025-06-21 02:55:29.023 # Must be EMPTY:
2025-06-21 02:55:29.027 out_drop = capsys.readouterr().out
2025-06-21 02:55:29.032
2025-06-21 02:55:29.036 if [ x for x in (out_prep, out_main, out_drop) if x.strip() ]:
2025-06-21 02:55:29.041 # We have a problem either with DDL/DML or with dropping DB objects.
2025-06-21 02:55:29.045 # First, we have to RECREATE both master and slave databases
2025-06-21 02:55:29.050 # (otherwise further execution of this test or other replication-related tests most likely will fail):
2025-06-21 02:55:29.055 out_reset = reset_replication(act_db_main, act_db_repl, db_main_file, db_repl_file)
2025-06-21 02:55:29.059
2025-06-21 02:55:29.064 # Next, we display out_main, out_drop and out_reset:
2025-06-21 02:55:29.069 #
2025-06-21 02:55:29.074 print('Problem(s) detected:')
2025-06-21 02:55:29.078 if out_prep.strip():
2025-06-21 02:55:29.082 print('out_prep:')
2025-06-21 02:55:29.087 print(out_prep)
2025-06-21 02:55:29.091 if out_main.strip():
2025-06-21 02:55:29.096 print('out_main:')
2025-06-21 02:55:29.101 print(out_main)
2025-06-21 02:55:29.105 if out_drop.strip():
2025-06-21 02:55:29.109 print('out_drop:')
2025-06-21 02:55:29.114 print(out_drop)
2025-06-21 02:55:29.118 if out_reset.strip():
2025-06-21 02:55:29.123 print('out_reset:')
2025-06-21 02:55:29.127 print(out_reset)
2025-06-21 02:55:29.131
2025-06-21 02:55:29.136 > assert '' == capsys.readouterr().out
2025-06-21 02:55:29.140 E assert
2025-06-21 02:55:29.145 E - Problem(s) detected:
2025-06-21 02:55:29.150 E - out_prep:
2025-06-21 02:55:29.154 E - Statement failed, SQLSTATE = HY000
2025-06-21 02:55:29.158 E - ALTER CHARACTER SET "SYSTEM"."ISO8859_1" failed
2025-06-21 02:55:29.163 E - -Cannot CREATE/ALTER/DROP CHARACTER SET in SYSTEM schema
2025-06-21 02:55:29.168 E - out_drop:
2025-06-21 02:55:29.172 E -
2025-06-21 02:55:29.177 E - ---
2025-06-21 02:55:29.181 E - +++
2025-06-21 02:55:29.185 E - @@ -12,5 +12,567 @@
2025-06-21 02:55:29.216 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_ALTER_PACKAGE_BEFORE +ACTIVE BEFORE ALTER 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(+'ALTER_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-21 02:55:29.221 E -
2025-06-21 02:55:29.226
2025-06-21 02:55:29.231 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,567 @@
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_ALTER_PACKAGE_BEFORE +ACTIVE BEFORE ALTER 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(+'ALTER_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
|