New database trigger "before Statement"
-----------------------------------------
Key: CORE-5451
URL: http://tracker.firebirdsql.org/browse/CORE-5451
Project: Firebird Core
Issue Type: Improvement
Components: Engine
Affects Versions: 4.0 Initial, 4.0 Alpha 1, 4.0 Beta 1
Environment: all
Reporter: Holger Klemt
i had often situations where s specific sql syntax used by a customer needs a
small modification when it is used in firebird
a very simple example based on a script from mysql
-a command like "create table ... if not exists" could be easily replace by the
firebird command "create or alter table"
-a table definition with a datatype INT for example can be replaced by INTEGER
-...
An option for fb4.x to solve such a problem globally could be the follwing idea:
Any sql statement is processed by a new database trigger where the sourcecode
of the statement can be manipulated
using old. and new. instance
a typical mysql statement like this
CREATE TABLE if not exists db.people (First text, Last text, Age int)
is replaced with the following trigger
CREATE OR ALTER trigger TrgStatementCleaner
active before any statement position 0
AS
begin
new.statement=old.statement;
new.statement=replace(new.statement, 'TRUNCATE TABLE ' ,'DELETE FROM ');
new.statement=replace(new.statement, 'db.','');
new.statement=replace(new.statement, 'CREATE TABLE if not exists','CREATE OR
ALTER TABLE');
new.statement=replace(new.statement, 'text','BLOB SUB_TYPE TEXT');
new.statement=replace(new.statement, 'int', 'INTEGER');
new.statement=replace(new.statement,
'VERYLONGVARNAMEINASPTHATMAKESNOSENSE','VLVNTMSN');
end
by
CREATE OR ALTER TABLE people (First BLOB SUB_TYPE TEXT, Last BLOB SUB_TYPE
TEXT, Age INTEGER)
which is now compatible to firebird.
Beeing able to develop a platform specific statement trigger where the whole
functionality of trigger programming (incl reg exp etc)
allows to manipulate the sql statement before it is processed by the internal
firebird parser would allow to implement a very easy
way to add a sql language compatibility level and existing web application
currently only support mysql might work with a very easy
way. When final replacements of the stament was done, the trigger can add the
original source (or simply a hash) in a local cache table
and when a new statement comes with an existing hash, it can take the
translated version from the cache table.
What do you think about such an idea? it is a greate advantage also for
backwards compatibility
inside firebird (see too long variable names available only until fb25 ;-))
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://tracker.firebirdsql.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today. http://sdm.link/xeonphi
Firebird-Devel mailing list, web interface at
https://lists.sourceforge.net/lists/listinfo/firebird-devel