Hello, for now I don't use DDL triggers, but I decided to try a few things, since I didn't understand at first glance how they were encoded. This information in constants.h is misleading
// that's how DDL trigger action types are encoded // (TRIGGER_TYPE_DDL | DDL_TRIGGER_{AFTER | BEFORE} [ | DDL_TRIGGER_??? ...]) I think it's // (TRIGGER_TYPE_DDL | DDL_TRIGGER_{AFTER | BEFORE} [ | (QUADCONST(1) << DDL_TRIGGER_??? ...)]) parse.y says: %type <uint64Val> trigger_ddl_type trigger_ddl_type : trigger_ddl_type_items | ANY DDL STATEMENT { $$ = TRIGGER_TYPE_DDL | (0x7FFFFFFFFFFFFFFFULL & ~(FB_UINT64) TRIGGER_TYPE_MASK & ~1ULL); } ; Ok, let's try: SQL> create trigger tr before any ddl statement as begin end; SQL> commit; SQL> select rdb$trigger_type from rdb$triggers; .... 6 3 9223372036854767614 This is somewhat smaller than 2^63 due to the trigger mask. SQL> show triggers; Trigger name Invalid ================================ ======= TR SQL> show trigger tr; TR, Sequence: 0, Type: BEFORE CREATE TABLE OR ALTER TABLE OR DROP TABLE OR CREATE PROCEDURE OR ALTER PROCEDURE OR DROP PROCEDURE OR CREATE FUNCTION OR ALTER FUNCTION OR DROP FUNCTION OR CREATE TRIGGER OR ALTER TRIGGER OR DROP TRIGGER OR OR CREATE EXCEPTION OR ALTER EXCEPTION OR DROP EXCEPTION OR CREATE VIEW OR ALTER VIEW OR DROP VIEW OR CREATE DOMAIN OR ALTER DOMAIN OR DROP DOMAIN OR CREATE ROLE OR ALTER ROLE OR DROP ROLE OR CREATE INDEX OR ALTER INDEX OR DROP INDEX OR CREATE SEQUENCE OR ALTER SEQUENCE OR DROP SEQUENCE OR CREATE USER OR ALTER USER OR DROP USER OR CREATE COLLATION OR DROP COLLATION OR ALTER CHARACTER SET OR CREATE PACKAGE OR ALTER PACKAGE OR DROP PACKAGE OR CREATE PACKAGE BODY OR DROP PACKAGE BODY OR CREATE MAPPING OR ALTER MAPPING OR DROP MAPPING OR <unknown> OR <unknown> OR <unknown> OR <unknown> OR <unknown> OR <unknown> OR <unknown> OR <unknown> OR <unknown> OR <unknown> OR <unknown> OR <unknown> OR <unknown> OR <unknown> OR <unknown>, Active as begin end ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + Ouch! Since I didn't do the code, I would prefer to not put my muddy paws there. The presence of OR OR in the output seems to indicate that the mask defined as const FB_UINT64 TRIGGER_TYPE_MASK = (QUADCONST(3) << TRIGGER_TYPE_SHIFT); is not being skipped. C. --- Claudio Valderrama C. Consultant, SW developer. ------------------------------------------------------------------------------ Put Bad Developers to Shame Dominate Development with Jenkins Continuous Integration Continuously Automate Build, Test & Deployment Start a new project now. Try Jenkins in the cloud. http://p.sf.net/sfu/13600_Cloudbees Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel