FirebirdSQL / firebird

Firebird server, client and tools
https://www.firebirdsql.org/
1.23k stars 213 forks source link

no exceptions raises when DATABASE-level trigger on transaction ROLLBACK fails [CORE3712] #4060

Open firebird-automations opened 12 years ago

firebird-automations commented 12 years ago

Submitted by: @pavel-zotov

Consider the following script that is stored in file 'TEST.SQL':

recreate table tmp(id int, s01 varchar(20)); commit;

set term ^; create or alter trigger t_rollback active on transaction rollback as declare v int; begin v = (select 1/0 from rdb$database); end^

create or alter trigger t_commit active on transaction commit as declare v int; begin if (exists(select * from tmp)) then v = (select 1/0 from rdb$database); end^ set term ;^ commit;

Then create a new database, make connect and run two cases.

CASE #⁠1. ------------ C:\1INSTALL\FIREBIRD\Data>isql TR.FDB Database: TR.FDB SQL> in TEST.SQL; SQL> insert into tmp values(1,'aaa'); SQL> commit; Statement failed, SQLSTATE = 22012 arithmetic exception, numeric overflow, or string truncation -Integer divide by zero. The code attempted to divide an integer value by an integer divisor of zero. -At trigger 'T_COMMIT' line: 6, col: 34

CASE #⁠2. ------------- C:\1INSTALL\FIREBIRD\Data>isql TR.FDB Database: TR.FDB SQL> in TEST.SQL; SQL> insert into tmp values(1,'aaa'); SQL> rollback; SQL> -- no messages about zero division --

-------------------------------------------------------------------------------------------------------------------------

PS. The trigger T_ROLLBACK was actually fired because in trace we can see for CASE #⁠2:

2011-12-29T01:02:47.5460 (468:021EDEE0) EXECUTE_STATEMENT_FINISH

C:\\1INSTALL\\FIREBIRD\\DATA\\TR\.FDB \(ATT\_5, SYSDBA:NONE, NONE, XNET:BALAHA\)

C:\\1INSTALL\\FIREBIRD\\FB\_2\_5\\bin\\isql\.exe:1584

    \(TRA\_100, CONCURRENCY \| WAIT \| READ\_WRITE\)

Statement 360:

-------------------------------------------------------------------------------

insert into tmp values(1,'aaa')

0 records fetched

  0 ms, 2 write\(s\), 7 fetch\(es\), 6 mark\(s\)

Table Natural Index Update Insert Delete Backout Purge Expunge

***************************************************************************************************************

TMP 1

2011-12-29T01:02:50.8750 (468:021EDEE0) EXECUTE_TRIGGER_START

C:\\1INSTALL\\FIREBIRD\\DATA\\TR\.FDB \(ATT\_5, SYSDBA:NONE, NONE, XNET:BALAHA\)

C:\\1INSTALL\\FIREBIRD\\FB\_2\_5\\bin\\isql\.exe:1584

    \(TRA\_100, CONCURRENCY \| WAIT \| READ\_WRITE\)

T\_ROLLBACK FOR MON$DATABASE \(ON TRANSACTION\_ROLLBACK\) 

2011-12-29T01:02:50.8750 (468:021EDEE0) FAILED EXECUTE_TRIGGER_FINISH

C:\\1INSTALL\\FIREBIRD\\DATA\\TR\.FDB \(ATT\_5, SYSDBA:NONE, NONE, XNET:BALAHA\)

C:\\1INSTALL\\FIREBIRD\\FB\_2\_5\\bin\\isql\.exe:1584

    \(TRA\_100, CONCURRENCY \| WAIT \| READ\_WRITE\)

T\_ROLLBACK FOR MON$DATABASE \(ON TRANSACTION\_ROLLBACK\) 

  0 ms, 1 fetch\(es\)

2011-12-29T01:02:50.8900 (468:021EDEE0) ROLLBACK_TRANSACTION

C:\\1INSTALL\\FIREBIRD\\DATA\\TR\.FDB \(ATT\_5, SYSDBA:NONE, NONE, XNET:BALAHA\)

C:\\1INSTALL\\FIREBIRD\\FB\_2\_5\\bin\\isql\.exe:1584

    \(TRA\_100, CONCURRENCY \| WAIT \| READ\_WRITE\)

  1 ms, 6 write\(s\), 13 fetch\(es\), 5 mark\(s\)
firebird-automations commented 12 years ago
Modified by: @pavel-zotov description: Consider the following script that is store in file 'TEST\.SQL': recreate table tmp\(id int, s01 varchar\(20\)\); commit; set term ^; create or alter trigger t\_rollback active on transaction rollback as declare v int; begin v = \(select 1/0 from rdb$database\); end^ create or alter trigger t\_commit active on transaction commit as declare v int; begin if \(exists\(select \* from tmp\)\) then v = \(select 1/0 from rdb$database\); end^ set term ;^ commit; Then create a new database, make connect and run two cases\. CASE #⁠1\. \-\-\-\-\-\-\-\-\-\-\-\- C:\\1INSTALL\\FIREBIRD\\Data\>isql TR\.FDB Database: TR\.FDB SQL\> in TEST\.SQL; SQL\> insert into tmp values\(1,'aaa'\); SQL\> commit; Statement failed, SQLSTATE = 22012 arithmetic exception, numeric overflow, or string truncation \-Integer divide by zero\. The code attempted to divide an integer value by an integer divisor of zero\. \-At trigger 'T\_COMMIT' line: 6, col: 34 CASE #⁠2\. \-\-\-\-\-\-\-\-\-\-\-\-\- C:\\1INSTALL\\FIREBIRD\\Data\>isql TR\.FDB Database: TR\.FDB SQL\> in tb0; SQL\> insert into tmp values\(1,'aaa'\); SQL\> rollback; SQL\> \-\- no messages about zero division \-\- \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- PS\. The trigger T\_COMMIT was actually fired because in trace we can see for CASE #⁠2: 2011\-12\-29T01:02:47\.5460 \(468:021EDEE0\) EXECUTE\_STATEMENT\_FINISH C:\\1INSTALL\\FIREBIRD\\DATA\\TR\.FDB \(ATT\_5, SYSDBA:NONE, NONE, XNET:BALAHA\) C:\\1INSTALL\\FIREBIRD\\FB\_2\_5\\bin\\isql\.exe:1584 \(TRA\_100, CONCURRENCY \| WAIT \| READ\_WRITE\) Statement 360: \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- insert into tmp values\(1,'aaa'\) 0 records fetched 0 ms, 2 write\(s\), 7 fetch\(es\), 6 mark\(s\) Table Natural Index Update Insert Delete Backout Purge Expunge \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* TMP 1 2011\-12\-29T01:02:50\.8750 \(468:021EDEE0\) EXECUTE\_TRIGGER\_START C:\\1INSTALL\\FIREBIRD\\DATA\\TR\.FDB \(ATT\_5, SYSDBA:NONE, NONE, XNET:BALAHA\) C:\\1INSTALL\\FIREBIRD\\FB\_2\_5\\bin\\isql\.exe:1584 \(TRA\_100, CONCURRENCY \| WAIT \| READ\_WRITE\) T\_ROLLBACK FOR MON$DATABASE \(ON TRANSACTION\_ROLLBACK\) 2011\-12\-29T01:02:50\.8750 \(468:021EDEE0\) FAILED EXECUTE\_TRIGGER\_FINISH C:\\1INSTALL\\FIREBIRD\\DATA\\TR\.FDB \(ATT\_5, SYSDBA:NONE, NONE, XNET:BALAHA\) C:\\1INSTALL\\FIREBIRD\\FB\_2\_5\\bin\\isql\.exe:1584 \(TRA\_100, CONCURRENCY \| WAIT \| READ\_WRITE\) T\_ROLLBACK FOR MON$DATABASE \(ON TRANSACTION\_ROLLBACK\) 0 ms, 1 fetch\(es\) 2011\-12\-29T01:02:50\.8900 \(468:021EDEE0\) ROLLBACK\_TRANSACTION C:\\1INSTALL\\FIREBIRD\\DATA\\TR\.FDB \(ATT\_5, SYSDBA:NONE, NONE, XNET:BALAHA\) C:\\1INSTALL\\FIREBIRD\\FB\_2\_5\\bin\\isql\.exe:1584 \(TRA\_100, CONCURRENCY \| WAIT \| READ\_WRITE\) 1 ms, 6 write\(s\), 13 fetch\(es\), 5 mark\(s\) =\> Consider the following script that is stored in file 'TEST\.SQL': recreate table tmp\(id int, s01 varchar\(20\)\); commit; set term ^; create or alter trigger t\_rollback active on transaction rollback as declare v int; begin v = \(select 1/0 from rdb$database\); end^ create or alter trigger t\_commit active on transaction commit as declare v int; begin if \(exists\(select \* from tmp\)\) then v = \(select 1/0 from rdb$database\); end^ set term ;^ commit; Then create a new database, make connect and run two cases\. CASE #⁠1\. \-\-\-\-\-\-\-\-\-\-\-\- C:\\1INSTALL\\FIREBIRD\\Data\>isql TR\.FDB Database: TR\.FDB SQL\> in TEST\.SQL; SQL\> insert into tmp values\(1,'aaa'\); SQL\> commit; Statement failed, SQLSTATE = 22012 arithmetic exception, numeric overflow, or string truncation \-Integer divide by zero\. The code attempted to divide an integer value by an integer divisor of zero\. \-At trigger 'T\_COMMIT' line: 6, col: 34 CASE #⁠2\. \-\-\-\-\-\-\-\-\-\-\-\-\- C:\\1INSTALL\\FIREBIRD\\Data\>isql TR\.FDB Database: TR\.FDB SQL\> in TEST\.SQL; SQL\> insert into tmp values\(1,'aaa'\); SQL\> rollback; SQL\> \-\- no messages about zero division \-\- \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- PS\. The trigger T\_COMMIT was actually fired because in trace we can see for CASE #⁠2: 2011\-12\-29T01:02:47\.5460 \(468:021EDEE0\) EXECUTE\_STATEMENT\_FINISH C:\\1INSTALL\\FIREBIRD\\DATA\\TR\.FDB \(ATT\_5, SYSDBA:NONE, NONE, XNET:BALAHA\) C:\\1INSTALL\\FIREBIRD\\FB\_2\_5\\bin\\isql\.exe:1584 \(TRA\_100, CONCURRENCY \| WAIT \| READ\_WRITE\) Statement 360: \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- insert into tmp values\(1,'aaa'\) 0 records fetched 0 ms, 2 write\(s\), 7 fetch\(es\), 6 mark\(s\) Table Natural Index Update Insert Delete Backout Purge Expunge \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* TMP 1 2011\-12\-29T01:02:50\.8750 \(468:021EDEE0\) EXECUTE\_TRIGGER\_START C:\\1INSTALL\\FIREBIRD\\DATA\\TR\.FDB \(ATT\_5, SYSDBA:NONE, NONE, XNET:BALAHA\) C:\\1INSTALL\\FIREBIRD\\FB\_2\_5\\bin\\isql\.exe:1584 \(TRA\_100, CONCURRENCY \| WAIT \| READ\_WRITE\) T\_ROLLBACK FOR MON$DATABASE \(ON TRANSACTION\_ROLLBACK\) 2011\-12\-29T01:02:50\.8750 \(468:021EDEE0\) FAILED EXECUTE\_TRIGGER\_FINISH C:\\1INSTALL\\FIREBIRD\\DATA\\TR\.FDB \(ATT\_5, SYSDBA:NONE, NONE, XNET:BALAHA\) C:\\1INSTALL\\FIREBIRD\\FB\_2\_5\\bin\\isql\.exe:1584 \(TRA\_100, CONCURRENCY \| WAIT \| READ\_WRITE\) T\_ROLLBACK FOR MON$DATABASE \(ON TRANSACTION\_ROLLBACK\) 0 ms, 1 fetch\(es\) 2011\-12\-29T01:02:50\.8900 \(468:021EDEE0\) ROLLBACK\_TRANSACTION C:\\1INSTALL\\FIREBIRD\\DATA\\TR\.FDB \(ATT\_5, SYSDBA:NONE, NONE, XNET:BALAHA\) C:\\1INSTALL\\FIREBIRD\\FB\_2\_5\\bin\\isql\.exe:1584 \(TRA\_100, CONCURRENCY \| WAIT \| READ\_WRITE\) 1 ms, 6 write\(s\), 13 fetch\(es\), 5 mark\(s\)
firebird-automations commented 12 years ago

Commented by: @hvlad

Currently, the ON TRANSACTION ROLLBACK and ON DISCONNECT triggers are silently ignores exceptions (except of bugcheks, but this is another story). This is done so because we don't want to abort ROLLBACK or DISCONNECT action, else application could be left in "no exit" state. But this is not good to hide errors, i think. We should make user somehow know about it. One possible way is to log such errors into firebird.log. Another is to catch error, store it somewhere and continue ROLLBACK\DISCONNECT. Then report catched error and, probably, add special message that ROLLBACK\DISCONNECT was completed despite of exception. Probably we can do something more clever, ideas are welcome...

firebird-automations commented 12 years ago

Commented by: @dyemanov

Also, the error could be reported as a warning in this special case.

firebird-automations commented 12 years ago
Modified by: @pavel-zotov description: Consider the following script that is stored in file 'TEST\.SQL': recreate table tmp\(id int, s01 varchar\(20\)\); commit; set term ^; create or alter trigger t\_rollback active on transaction rollback as declare v int; begin v = \(select 1/0 from rdb$database\); end^ create or alter trigger t\_commit active on transaction commit as declare v int; begin if \(exists\(select \* from tmp\)\) then v = \(select 1/0 from rdb$database\); end^ set term ;^ commit; Then create a new database, make connect and run two cases\. CASE #⁠1\. \-\-\-\-\-\-\-\-\-\-\-\- C:\\1INSTALL\\FIREBIRD\\Data\>isql TR\.FDB Database: TR\.FDB SQL\> in TEST\.SQL; SQL\> insert into tmp values\(1,'aaa'\); SQL\> commit; Statement failed, SQLSTATE = 22012 arithmetic exception, numeric overflow, or string truncation \-Integer divide by zero\. The code attempted to divide an integer value by an integer divisor of zero\. \-At trigger 'T\_COMMIT' line: 6, col: 34 CASE #⁠2\. \-\-\-\-\-\-\-\-\-\-\-\-\- C:\\1INSTALL\\FIREBIRD\\Data\>isql TR\.FDB Database: TR\.FDB SQL\> in TEST\.SQL; SQL\> insert into tmp values\(1,'aaa'\); SQL\> rollback; SQL\> \-\- no messages about zero division \-\- \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- PS\. The trigger T\_COMMIT was actually fired because in trace we can see for CASE #⁠2: 2011\-12\-29T01:02:47\.5460 \(468:021EDEE0\) EXECUTE\_STATEMENT\_FINISH C:\\1INSTALL\\FIREBIRD\\DATA\\TR\.FDB \(ATT\_5, SYSDBA:NONE, NONE, XNET:BALAHA\) C:\\1INSTALL\\FIREBIRD\\FB\_2\_5\\bin\\isql\.exe:1584 \(TRA\_100, CONCURRENCY \| WAIT \| READ\_WRITE\) Statement 360: \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- insert into tmp values\(1,'aaa'\) 0 records fetched 0 ms, 2 write\(s\), 7 fetch\(es\), 6 mark\(s\) Table Natural Index Update Insert Delete Backout Purge Expunge \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* TMP 1 2011\-12\-29T01:02:50\.8750 \(468:021EDEE0\) EXECUTE\_TRIGGER\_START C:\\1INSTALL\\FIREBIRD\\DATA\\TR\.FDB \(ATT\_5, SYSDBA:NONE, NONE, XNET:BALAHA\) C:\\1INSTALL\\FIREBIRD\\FB\_2\_5\\bin\\isql\.exe:1584 \(TRA\_100, CONCURRENCY \| WAIT \| READ\_WRITE\) T\_ROLLBACK FOR MON$DATABASE \(ON TRANSACTION\_ROLLBACK\) 2011\-12\-29T01:02:50\.8750 \(468:021EDEE0\) FAILED EXECUTE\_TRIGGER\_FINISH C:\\1INSTALL\\FIREBIRD\\DATA\\TR\.FDB \(ATT\_5, SYSDBA:NONE, NONE, XNET:BALAHA\) C:\\1INSTALL\\FIREBIRD\\FB\_2\_5\\bin\\isql\.exe:1584 \(TRA\_100, CONCURRENCY \| WAIT \| READ\_WRITE\) T\_ROLLBACK FOR MON$DATABASE \(ON TRANSACTION\_ROLLBACK\) 0 ms, 1 fetch\(es\) 2011\-12\-29T01:02:50\.8900 \(468:021EDEE0\) ROLLBACK\_TRANSACTION C:\\1INSTALL\\FIREBIRD\\DATA\\TR\.FDB \(ATT\_5, SYSDBA:NONE, NONE, XNET:BALAHA\) C:\\1INSTALL\\FIREBIRD\\FB\_2\_5\\bin\\isql\.exe:1584 \(TRA\_100, CONCURRENCY \| WAIT \| READ\_WRITE\) 1 ms, 6 write\(s\), 13 fetch\(es\), 5 mark\(s\) =\> Consider the following script that is stored in file 'TEST\.SQL': recreate table tmp\(id int, s01 varchar\(20\)\); commit; set term ^; create or alter trigger t\_rollback active on transaction rollback as declare v int; begin v = \(select 1/0 from rdb$database\); end^ create or alter trigger t\_commit active on transaction commit as declare v int; begin if \(exists\(select \* from tmp\)\) then v = \(select 1/0 from rdb$database\); end^ set term ;^ commit; Then create a new database, make connect and run two cases\. CASE #⁠1\. \-\-\-\-\-\-\-\-\-\-\-\- C:\\1INSTALL\\FIREBIRD\\Data\>isql TR\.FDB Database: TR\.FDB SQL\> in TEST\.SQL; SQL\> insert into tmp values\(1,'aaa'\); SQL\> commit; Statement failed, SQLSTATE = 22012 arithmetic exception, numeric overflow, or string truncation \-Integer divide by zero\. The code attempted to divide an integer value by an integer divisor of zero\. \-At trigger 'T\_COMMIT' line: 6, col: 34 CASE #⁠2\. \-\-\-\-\-\-\-\-\-\-\-\-\- C:\\1INSTALL\\FIREBIRD\\Data\>isql TR\.FDB Database: TR\.FDB SQL\> in TEST\.SQL; SQL\> insert into tmp values\(1,'aaa'\); SQL\> rollback; SQL\> \-\- no messages about zero division \-\- \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- PS\. The trigger T\_ROLLBACK was actually fired because in trace we can see for CASE #⁠2: 2011\-12\-29T01:02:47\.5460 \(468:021EDEE0\) EXECUTE\_STATEMENT\_FINISH C:\\1INSTALL\\FIREBIRD\\DATA\\TR\.FDB \(ATT\_5, SYSDBA:NONE, NONE, XNET:BALAHA\) C:\\1INSTALL\\FIREBIRD\\FB\_2\_5\\bin\\isql\.exe:1584 \(TRA\_100, CONCURRENCY \| WAIT \| READ\_WRITE\) Statement 360: \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- insert into tmp values\(1,'aaa'\) 0 records fetched 0 ms, 2 write\(s\), 7 fetch\(es\), 6 mark\(s\) Table Natural Index Update Insert Delete Backout Purge Expunge \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* TMP 1 2011\-12\-29T01:02:50\.8750 \(468:021EDEE0\) EXECUTE\_TRIGGER\_START C:\\1INSTALL\\FIREBIRD\\DATA\\TR\.FDB \(ATT\_5, SYSDBA:NONE, NONE, XNET:BALAHA\) C:\\1INSTALL\\FIREBIRD\\FB\_2\_5\\bin\\isql\.exe:1584 \(TRA\_100, CONCURRENCY \| WAIT \| READ\_WRITE\) T\_ROLLBACK FOR MON$DATABASE \(ON TRANSACTION\_ROLLBACK\) 2011\-12\-29T01:02:50\.8750 \(468:021EDEE0\) FAILED EXECUTE\_TRIGGER\_FINISH C:\\1INSTALL\\FIREBIRD\\DATA\\TR\.FDB \(ATT\_5, SYSDBA:NONE, NONE, XNET:BALAHA\) C:\\1INSTALL\\FIREBIRD\\FB\_2\_5\\bin\\isql\.exe:1584 \(TRA\_100, CONCURRENCY \| WAIT \| READ\_WRITE\) T\_ROLLBACK FOR MON$DATABASE \(ON TRANSACTION\_ROLLBACK\) 0 ms, 1 fetch\(es\) 2011\-12\-29T01:02:50\.8900 \(468:021EDEE0\) ROLLBACK\_TRANSACTION C:\\1INSTALL\\FIREBIRD\\DATA\\TR\.FDB \(ATT\_5, SYSDBA:NONE, NONE, XNET:BALAHA\) C:\\1INSTALL\\FIREBIRD\\FB\_2\_5\\bin\\isql\.exe:1584 \(TRA\_100, CONCURRENCY \| WAIT \| READ\_WRITE\) 1 ms, 6 write\(s\), 13 fetch\(es\), 5 mark\(s\)