From: <asf...@us...> - 2011-02-20 01:08:55
|
Revision: 52407 http://firebird.svn.sourceforge.net/firebird/?rev=52407&view=rev Author: asfernandes Date: 2011-02-20 01:08:48 +0000 (Sun, 20 Feb 2011) Log Message: ----------- Added EVENT_TYPE and OBJECT_TYPE to DDL_TRIGGER context. Improvement suggested by Thomas Steinmaurer. Modified Paths: -------------- firebird/trunk/doc/sql.extensions/README.ddl_triggers.txt firebird/trunk/src/dsql/DdlNodes.epp firebird/trunk/src/isql/show.epp firebird/trunk/src/jrd/Attachment.h firebird/trunk/src/jrd/SysFunction.cpp firebird/trunk/src/jrd/constants.h Modified: firebird/trunk/doc/sql.extensions/README.ddl_triggers.txt =================================================================== --- firebird/trunk/doc/sql.extensions/README.ddl_triggers.txt 2011-02-19 03:31:22 UTC (rev 52406) +++ firebird/trunk/doc/sql.extensions/README.ddl_triggers.txt 2011-02-20 01:08:48 UTC (rev 52407) @@ -110,7 +110,9 @@ stack. The context elements are: - - DDL_EVENT: event name (<ddl event item>) + - EVENT_TYPE: event type (CREATE, ALTER, DROP) + - OBJECT_TYPE: object type (TABLE, VIEW etc) + - DDL_EVENT: event name (<ddl event item>, which is EVENT_TYPE || ' ' || OBJECT_TYPE) - OBJECT_NAME: metadata object name - SQL_TEXT: sql statement text @@ -198,6 +200,8 @@ id bigint not null primary key, moment timestamp not null, user_name varchar(31) not null, + event_type varchar(25) not null, + object_type varchar(25) not null, ddl_event varchar(25) not null, object_name varchar(31) not null, sql_text blob sub_type text not null, @@ -214,8 +218,11 @@ -- didn't run, the log will survive. in autonomous transaction do begin - insert into ddl_log (id, moment, user_name, ddl_event, object_name, sql_text, ok) + insert into ddl_log (id, moment, user_name, event_type, object_type, ddl_event, object_name, + sql_text, ok) values (next value for ddl_seq, current_timestamp, current_user, + 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'), rdb$get_context('DDL_TRIGGER', 'SQL_TEXT'), Modified: firebird/trunk/src/dsql/DdlNodes.epp =================================================================== --- firebird/trunk/src/dsql/DdlNodes.epp 2011-02-19 03:31:22 UTC (rev 52406) +++ firebird/trunk/src/dsql/DdlNodes.epp 2011-02-20 01:08:48 UTC (rev 52407) @@ -597,7 +597,8 @@ fb_assert(action > 0); // first element is NULL DdlTriggerContext context; - context.ddlEvent = DDL_TRIGGER_ACTION_NAMES[action]; + context.eventType = DDL_TRIGGER_ACTION_NAMES[action][0]; + context.objectType = DDL_TRIGGER_ACTION_NAMES[action][1]; context.objectName = objectName; context.sqlText = sqlText; Modified: firebird/trunk/src/isql/show.epp =================================================================== --- firebird/trunk/src/isql/show.epp 2011-02-19 03:31:22 UTC (rev 52406) +++ firebird/trunk/src/isql/show.epp 2011-02-20 01:08:48 UTC (rev 52407) @@ -294,7 +294,10 @@ buffer += " "; if (pos < FB_NELEM(DDL_TRIGGER_ACTION_NAMES)) - buffer += DDL_TRIGGER_ACTION_NAMES[pos]; + { + buffer += string(DDL_TRIGGER_ACTION_NAMES[pos][0]) + " " + + DDL_TRIGGER_ACTION_NAMES[pos][1]; + } else buffer += "<unknown>"; } Modified: firebird/trunk/src/jrd/Attachment.h =================================================================== --- firebird/trunk/src/jrd/Attachment.h 2011-02-19 03:31:22 UTC (rev 52406) +++ firebird/trunk/src/jrd/Attachment.h 2011-02-20 01:08:48 UTC (rev 52407) @@ -92,13 +92,15 @@ struct DdlTriggerContext { DdlTriggerContext() - : ddlEvent(*getDefaultMemoryPool()), + : eventType(*getDefaultMemoryPool()), + objectType(*getDefaultMemoryPool()), objectName(*getDefaultMemoryPool()), sqlText(*getDefaultMemoryPool()) { } - Firebird::string ddlEvent; + Firebird::string eventType; + Firebird::string objectType; Firebird::MetaName objectName; Firebird::string sqlText; }; Modified: firebird/trunk/src/jrd/SysFunction.cpp =================================================================== --- firebird/trunk/src/jrd/SysFunction.cpp 2011-02-19 03:31:22 UTC (rev 52406) +++ firebird/trunk/src/jrd/SysFunction.cpp 2011-02-20 01:08:48 UTC (rev 52407) @@ -210,6 +210,8 @@ SESSION_ID_NAME[] = "SESSION_ID", CURRENT_USER_NAME[] = "CURRENT_USER", CURRENT_ROLE_NAME[] = "CURRENT_ROLE", + EVENT_TYPE_NAME[] = "EVENT_TYPE", + OBJECT_TYPE_NAME[] = "OBJECT_TYPE", DDL_EVENT_NAME[] = "DDL_EVENT", OBJECT_NAME[] = "OBJECT_NAME", SQL_TEXT_NAME[] = "SQL_TEXT"; @@ -2136,8 +2138,12 @@ const DdlTriggerContext& context = Stack<DdlTriggerContext>::const_iterator( attachment->ddlTriggersContext).object(); - if (nameStr == DDL_EVENT_NAME) - resultStr = context.ddlEvent; + if (nameStr == EVENT_TYPE_NAME) + resultStr = context.eventType; + else if (nameStr == OBJECT_TYPE_NAME) + resultStr = context.objectType; + else if (nameStr == DDL_EVENT_NAME) + resultStr = context.eventType + " " + context.objectType; else if (nameStr == OBJECT_NAME) { resultStr = context.objectName.c_str(); Modified: firebird/trunk/src/jrd/constants.h =================================================================== --- firebird/trunk/src/jrd/constants.h 2011-02-19 03:31:22 UTC (rev 52406) +++ firebird/trunk/src/jrd/constants.h 2011-02-20 01:08:48 UTC (rev 52407) @@ -290,51 +290,51 @@ const int DB_TRIGGER_TRANS_ROLLBACK = 4; const int DB_TRIGGER_MAX = 5; -static const char* const DDL_TRIGGER_ACTION_NAMES[] = +static const char* const DDL_TRIGGER_ACTION_NAMES[][2] = { - NULL, - "CREATE TABLE", - "ALTER TABLE", - "DROP TABLE", - "CREATE PROCEDURE", - "ALTER PROCEDURE", - "DROP PROCEDURE", - "CREATE FUNCTION", - "ALTER FUNCTION", - "DROP FUNCTION", - "CREATE TRIGGER", - "ALTER TRIGGER", - "DROP TRIGGER", - "", "", "", // gap for TRIGGER_TYPE_MASK - 3 bits - "CREATE EXCEPTION", - "ALTER EXCEPTION", - "DROP EXCEPTION", - "CREATE VIEW", - "ALTER VIEW", - "DROP VIEW", - "CREATE DOMAIN", - "ALTER DOMAIN", - "DROP DOMAIN", - "CREATE ROLE", - "ALTER ROLE", - "DROP ROLE", - "CREATE INDEX", - "ALTER INDEX", - "DROP INDEX", - "CREATE SEQUENCE", - "ALTER SEQUENCE", - "DROP SEQUENCE", - "CREATE USER", - "ALTER USER", - "DROP USER", - "CREATE COLLATION", - "DROP COLLATION", - "ALTER CHARACTER SET", - "CREATE PACKAGE", - "ALTER PACKAGE", - "DROP PACKAGE", - "CREATE PACKAGE BODY", - "DROP PACKAGE BODY" + {NULL, NULL}, + {"CREATE", "TABLE"}, + {"ALTER", "TABLE"}, + {"DROP", "TABLE"}, + {"CREATE", "PROCEDURE"}, + {"ALTER", "PROCEDURE"}, + {"DROP", "PROCEDURE"}, + {"CREATE", "FUNCTION"}, + {"ALTER", "FUNCTION"}, + {"DROP", "FUNCTION"}, + {"CREATE", "TRIGGER"}, + {"ALTER", "TRIGGER"}, + {"DROP", "TRIGGER"}, + {"", ""}, {"", ""}, {"", ""}, // gap for TRIGGER_TYPE_MASK - 3 bits + {"CREATE", "EXCEPTION"}, + {"ALTER", "EXCEPTION"}, + {"DROP", "EXCEPTION"}, + {"CREATE", "VIEW"}, + {"ALTER", "VIEW"}, + {"DROP", "VIEW"}, + {"CREATE", "DOMAIN"}, + {"ALTER", "DOMAIN"}, + {"DROP", "DOMAIN"}, + {"CREATE", "ROLE"}, + {"ALTER", "ROLE"}, + {"DROP", "ROLE"}, + {"CREATE", "INDEX"}, + {"ALTER", "INDEX"}, + {"DROP", "INDEX"}, + {"CREATE", "SEQUENCE"}, + {"ALTER", "SEQUENCE"}, + {"DROP", "SEQUENCE"}, + {"CREATE", "USER"}, + {"ALTER", "USER"}, + {"DROP", "USER"}, + {"CREATE", "COLLATION"}, + {"DROP", "COLLATION"}, + {"ALTER", "CHARACTER SET"}, + {"CREATE", "PACKAGE"}, + {"ALTER", "PACKAGE"}, + {"DROP", "PACKAGE"}, + {"CREATE", "PACKAGE BODY"}, + {"DROP", "PACKAGE BODY"} }; const int DDL_TRIGGER_BEFORE = 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |