[ 
https://issues.apache.org/jira/browse/DERBY-4610?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12861766#action_12861766
 ] 

Knut Anders Hatlen commented on DERBY-4610:
-------------------------------------------

We always have the option to back out DERBY-3049. Since that issue was just a 
cleanup issue that wasn't supposed to fix or change the behaviour of anything, 
backing it out shouldn't do much harm. As long as it seems that one of the 
assumptions in that issue isn't sound and we don't fully understand which 
consequences this has for the various parts of the code, backing out the whole 
thing may be safer than trying to guess which parts have to be changed and 
which are safe to leave as they are.

For the record, the following svn command successfully reverted all the commits 
from DERBY-3049, with no conflicts:

$ svn merge -c -601395,-600678,-598739,-572753 .

To get it to compile, I had to add import statements for the ResultDescription 
class in BasicNoPutResultSetImpl and TemporaryRowHolderImpl, since they 
apparently had been removed later. With that change, it compiled and the repro 
script ran without error. I'm running derbyall and suites.All now to see if any 
of the regression tests are affected by it.

> Error attempting delete with cascade and triggers
> -------------------------------------------------
>
>                 Key: DERBY-4610
>                 URL: https://issues.apache.org/jira/browse/DERBY-4610
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.4.1.3, 10.4.2.0, 10.5.3.0, 10.6.1.0
>         Environment: Apache Derby 10.5.3.0 and Sun JDK 1.6.0_07
>            Reporter: Eric Long
>
> The scenario is a parent and child table with a cascade delete and triggers 
> on both tables.  Here are the steps to reproduce.
> First, compile TestFunctions.java and put it on the classpath:
> public class TestFunctions
> {
>    public static void test(String str)
>    {
>    }
> }
> Next, enter commands into interactive SQL:
> create table testtable (id integer, name varchar(20), primary key(id));
> create table testchild (
> id integer
> constraint fk_id references testtable on delete cascade,
> ordernum int,
> primary key(id));
> create procedure testproc (str varchar(20))
> PARAMETER STYLE JAVA LANGUAGE JAVA EXTERNAL NAME 'TestFunctions.test';
> create trigger testtabletrigger after delete on testtable referencing old as 
> old
> for each row mode db2sql call testproc(char(old.id));
> create trigger testchildtrigger after delete on testchild referencing old as 
> old
> for each row mode db2sql call testproc(char(old.ordernum));
> insert into testtable values (1, 'test1');
> insert into testchild values (1, 10);
> delete from testtable where id = 1;
> The expected result is that deleting a row from "testtable" will cascade the 
> delete to "testchild", and the triggers will be called for each delete.  The 
> actual result is that the delete is rolled back with the following error:
> Error: An attempt was made to put a data value of type 'java.lang.String' 
> into a data value of
> type 'INTEGER'.
> SQLState:  XCL12
> ErrorCode: 30000
> There are no additional entries in the derby.log after the error.  If only 
> one trigger is used, or if the cascade is removed, then the delete will 
> succeed.
> This issue was found while using SymmetricDS, which uses triggers to 
> replicate tables between Derby databases.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to