[
https://issues.apache.org/jira/browse/DERBY-5120?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13060783#comment-13060783
]
Dag H. Wanvik commented on DERBY-5120:
--------------------------------------
I guess the trigger action statement here ("values(1)") isn't really dependent
on either the table or the trigger definition for that matter? So maybe it
doesn't matter. Maybe it was gratuitous in the first place? Maybe the table
dependency should always (only) be added by the compilation step of the SPS..?
The comment ("SIDE EFFECTS") in SPSDescriptor#prepareAndRelease seems to
indicate it would happen there..
It seems weird that adding a second trigger should invalidate the first
trigger's SPS, though, but as far as I can see it's a side effect of forcing
DML statements to be recompiled when adding the second trigger. It would seems
this could set of a ping-pong of invalidation between triggers, but I guess it
doesn't, since on invalidation of the first trigger's SPS we just recompile and
do not re-execute the code in CreateTriggerConstantAction (which would
otherwise set off the CREATE_TRIGGER invalidation on the trigger table and
hence recompile of the second etc)...
The whole idea of invalidation is to keep things up to date, maybe we should
revisit what dependencies are really needed for triggers, right now it's not
clear to me..
> Row from SYSDEPENDS gets deleted when a table has update triggers defined on
> it and an upate is made to the table
> -----------------------------------------------------------------------------------------------------------------
>
> Key: DERBY-5120
> URL: https://issues.apache.org/jira/browse/DERBY-5120
> Project: Derby
> Issue Type: Task
> Components: SQL
> Affects Versions: 10.2.2.0, 10.8.1.2
> Reporter: Mamta A. Satoor
> Assignee: Mamta A. Satoor
>
> I have an ij script below which shows that the number of rows in SYSDEPENDS
> go down by 1 for the following test case after an update is made to a table
> with update triggers defined on it. Am not sure what kind of problems the
> missing dependnecy might cause.
> connect 'jdbc:derby:c:/dellater/db1;create=true';
> CREATE TABLE ATDC_13_TAB1(c11 int, c12 int);
> insert into ATDC_13_TAB1 values (1,11);
> create table ATDC_13_TAB2(c21 int, c22 int);
> insert into ATDC_13_TAB2 values (1,11);
> create table ATDC_13_TAB3(c31 int, c32 int);
> insert into ATDC_13_TAB3 values (1,11);
> create table ATDC_13_TAB1_backup(c11 int, c12 int);
> insert into ATDC_13_TAB1_backup values (1,11);
> create trigger ATDC_13_TAB1_trigger_1 after update
> on ATDC_13_TAB1 for each row mode db2sql
> INSERT INTO ATDC_13_TAB1_BACKUP(C11)
> SELECT C21 from ATDC_13_TAB2;
> create trigger ATDC_13_TAB1_trigger_2 after update
> on ATDC_13_TAB1 for each row mode db2sql
> INSERT INTO ATDC_13_TAB1_BACKUP
> SELECT C31, C32 from ATDC_13_TAB3;
> -- following shows 14 rows
> select * from sys.sysdepends;
> update ATDC_13_TAB1 set c12=11;
> -- following shows only 13 rows
> I tried this on 10.2 and 10.8 and saw the same behavior on both. It seems
> like the dependency that gets dropped is between the stored prepared
> statement and a table. Have not spent enough time to find out more details
> but I thought it is worth pointing out the behavior
> select * from sys.sysdepends;
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira