|
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.
|