[ http://issues.apache.org/jira/browse/DERBY-1621?page=all ]

Yip Ng updated DERBY-1621:
--------------------------

    Attachment: derby1621trunkstat01.txt
                derby1621trunkdiff01.txt

Attaching patch for DERBY-1621.  This patch addresses the trigger recompilation 
problems mentioned in my previous comments.  It will now perform recompilation
of a trigger when it is invalidated.  Also, to address the other problem with 
having 2 separate transactions (user transaction + internal nested transaction) 
in the recompilation process, it will now use either one but not both so that 
the system catalog is consistent.  To do this, additional interface methods has 
to be introduced to dependency manager since currently there is no way of 
providing a transaction controller to its API.  Likewise,  additional interface 
methods have been added so that the caller can specify whether to wait or not 
for the scan.  I ran derbyall before and it passes all the testcases but since 
the code has changed, I have to remerge my modifications, so I'll need to run 
derbyall again.  Will post the result when it is completed.  But the patch is 
ready for review.   

> Trigger action statement is not recompile when there is a change that would 
> affect it.
> --------------------------------------------------------------------------------------
>
>                 Key: DERBY-1621
>                 URL: http://issues.apache.org/jira/browse/DERBY-1621
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.2.0.0
>            Reporter: Daniel John Debrunner
>         Assigned To: Yip Ng
>            Priority: Critical
>             Fix For: 10.2.0.0
>
>         Attachments: derby1621trunkdiff01.txt, derby1621trunkstat01.txt
>
>
> A trigger action statement, such as an INSERT statement is not recompiled 
> when there is some DDL change on the underlying table, such as a CREATE INDEX.
> In the example below a unique index is added to the table (t2) inserted into 
> by the trigger's action statement. When the tirgger fires it does not raise 
> any error (should raise a unique constraint violated error) and does not 
> insert the value into the index. A select from t2 does not show the 
> additional rows in t2 as it is performing an index scan, once the index is 
> dropped the rows appear to the select.
> ij version 10.2
> ij> connect 'jdbc:derby:cs;create=true';
> ij> create table t (i int);
> 0 rows inserted/updated/deleted
> ij> create table t2 (i int);
> 0 rows inserted/updated/deleted
> ij> create trigger tt after insert on t for each statement mode db2sql
> insert into t2 values 1;
> 0 rows inserted/updated/deleted
> ij> insert into t values 1;
> 1 row inserted/updated/deleted
> ij> select * from t2;
> I
> -----------
> 1
> 1 row selected
> ij> create unique index tu on t2(i);
> 0 rows inserted/updated/deleted
> ij> insert into t values 1;
> 1 row inserted/updated/deleted
> ij> select * from t2;
> I
> -----------
> 1
> 1 row selected
> ij> insert into t values 1;
> 1 row inserted/updated/deleted
> ij> select * from t2;
> I
> -----------
> 1
> 1 row selected
> ij> drop index tu;
> 0 rows inserted/updated/deleted
> ij> select * from t2;
> I
> -----------
> 1
> 1
> 1
> 3 rows selected

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to