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

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

    Attachment: derby1621trunkstat03.txt
                derby1621trunkdiff03.txt

Attaching patch derby1621trunkdiff03.txt, this patch adds a new overloaded open 
method with a wait option in RowChanger interface and implements it in 
RowChangerImpl.java.  

After investigating abit, I realized that 
TransactionController.OPENMODE_LOCK_NOWAIT option only applies to table or 
table intent locks and not row locks which explains why in some scenarios the 
recompilation for the nested transaction is still waiting for a lock. e.g.:

...
create unique index tu on t2(i);
create trigger tt after insert on t1 for each statement mode db2sql insert into 
t2 values 1;
autocommit off;
-- invalidates the trigger since it depends on tu
drop index tu;                 <=== got a S row lock on one of the SYSDEPENDS 
row.
insert into t1 values 1;  <=== waiting for X row lock on one of the SYSDEPENDS 
row  
                                                    with the nested 
transaction...  not what we want...
...

Is there a way to provide NOWAIT on fetch operation to the store currently?


> 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, derby1621trunkdiff02.txt, 
> derby1621trunkdiff03.txt, derby1621trunkstat01.txt, derby1621trunkstat02.txt, 
> derby1621trunkstat03.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