db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Yip Ng (JIRA)" <j...@apache.org>
Subject [jira] Commented: (DERBY-1204) CREATE TRIGGER with an INSERT action statement with multiple rows and a referenced column throws a StringIndexOutOfBoundsException
Date Mon, 13 Nov 2006 18:11:38 GMT
    [ http://issues.apache.org/jira/browse/DERBY-1204?page=comments#action_12449433 ] 
            
Yip Ng commented on DERBY-1204:
-------------------------------

The following statement fails with the exception:

create trigger tgood after insert on x
referencing new as n
for each row mode db2sql insert into x values (n.x), (999), (333); 

because the bindReferencesClause() method in CreateTriggerNode did not filter those column
references that are not relevent to the conversion processing for OLD/NEW transition variables.
 The above trigger action will have the following parse tree:  (roughly)

                      InsertNode
                                |
                       UnionNode
                      /                     \
            UnionNode      RowRSNode
            /                   \                          |
RowRSNode  RowRSNode     NumericConstantNode
      |                          |                                                   |
 ColRef    NumericConstantNode                      333
      |                         |
     n.i                    999

Note that the CollectNodesVisitor collects *ALL* the ColumnReferences in the trigger action.
 In the above case, it returned 3 column references nodes.  One in the top level Union node,
one in top level Union Node's
left child which it is also an UnionNode and the last one is found in the RowResultSetNode.


The UnionNodes will have a copy of the CRs from its left child and those CRs will not have
its beginOffset set which indicates they are not relevant for the conversion processing here,
so the corrective action here is to skip these entries.



> CREATE TRIGGER with an INSERT action statement with multiple rows and a referenced column
throws a StringIndexOutOfBoundsException
> ----------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-1204
>                 URL: http://issues.apache.org/jira/browse/DERBY-1204
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.2.1.6, 10.1.2.1
>            Reporter: Daniel John Debrunner
>         Assigned To: Yip Ng
>
> These triggers succeed
> create trigger tgood after insert on x
> for each statement mode db2sql insert into x values (666), (999), (333);
> create trigger tgood after insert on x
> referencing new as n
> for each row mode db2sql insert into x values (n.x);
> create trigger tgood after insert on x
> referencing new as n
> for each row mode db2sql insert into x values (333), (999), (333)
> This one fails
> create trigger tgood after insert on x
> referencing new as n
> for each row mode db2sql insert into x values (n.x), (999), (333);
> Test cases will be added to triggerGeneral under this bug number.
> java.lang.StringIndexOutOfBoundsException: String index out of range: -3
> 	at java.lang.String.substring(String.java:1444)
> 	at org.apache.derby.impl.sql.compile.CreateTriggerNode.bindReferencesClause(CreateTriggerNode.java:421)
> 	at org.apache.derby.impl.sql.compile.CreateTriggerNode.bind(CreateTriggerNode.java:258)
> 	at org.apache.derby.impl.sql.GenericStatement.prepMinion(GenericStatement.java:344)
> 	at org.apache.derby.impl.sql.GenericStatement.prepare(GenericStatement.java:118)
> 	at org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(GenericLanguageConnectionContext.java:713)
> 	at org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:560)
> 	at org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:507)
> 	at org.apache.derby.impl.tools.ij.ij.executeImmediate(ij.java:313)
> 	at org.apache.derby.impl.tools.ij.utilMain.doCatch(utilMain.java:433)
> 	at org.apache.derby.impl.tools.ij.utilMain.go(utilMain.java:310)
> 	at org.apache.derby.impl.tools.ij.Main.go(Main.java:203)
> 	at org.apache.derby.impl.tools.ij.Main.mainCore(Main.java:169)
> 	at org.apache.derby.impl.tools.ij.Main14.main(Main14.java:55)
> 	at org.apache.derby.tools.ij.main(ij.java:60)

-- 
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

        

Mime
View raw message