db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Knut Anders Hatlen (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (DERBY-6443) ArrayIndexOutOfBoundsException when calling function from trigger
Date Mon, 06 Jan 2014 13:55:51 GMT

     [ https://issues.apache.org/jira/browse/DERBY-6443?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Knut Anders Hatlen updated DERBY-6443:
--------------------------------------

    Affects Version/s: 10.0.2.1

The repro in the bug description doesn't reproduce the ArrayIndexOutOfBoundsException on 10.4.1.3
and earlier. Instead, it fails with a different kind of error message, probably because of
DERBY-3649. Also, on 10.0 and 10.1 the FLOOR and LOG10 functions used in the repro are not
available.

The following code reproduces the ArrayIndexOutOfBoundsException all the way back to the initial
version (10.0.2.1), so it seems this is not a new bug:

{noformat}
ij version 10.0
ij> connect 'jdbc:derby:db;create=true';
ij> create table t1(a int);
0 rows inserted/updated/deleted
ij> create table t2(b int);
0 rows inserted/updated/deleted
ij> create function f(x int) returns int language java parameter style java external name
'java.lang.Math.abs' no sql;
0 rows inserted/updated/deleted
ij> insert into t1 select f(avg(b)) from t2;
ERROR XJ001: Java exception: '-1: java.lang.ArrayIndexOutOfBoundsException'.
{noformat}

> ArrayIndexOutOfBoundsException when calling function from trigger
> -----------------------------------------------------------------
>
>                 Key: DERBY-6443
>                 URL: https://issues.apache.org/jira/browse/DERBY-6443
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.0.2.1, 10.10.1.1
>            Reporter: Tim Dudgeon
>
> I'm having problems will calling functions from within a trigger.
> The problem seems to be with the outer function call (FLOOR() in this case, but it also
happens with other functions). It works fine in the SELECT statement, but when used in the
trigger it throws a ArrayIndexOutOfBoundsException.
> Remove the FLOOR() part from the trigger and it works fine.
> {code}
> -- create source table and some data
> CREATE TABLE foo (name VARCHAR(20), val DOUBLE);
> INSERT INTO foo (name, val) VALUES ('A', 10), ('A', 20), ('B', 30), ('C', 40);
> -- calling the function works fine here
> SELECT name, FLOOR(AVG(LOG10(val))), COUNT(*)
> FROM foo
> GROUP BY name;
> -- create target table for trigger
> CREATE TABLE summary (name VARCHAR(20), aver DOUBLE, size INT);
> -- create the trigger
> CREATE TRIGGER trg_foo AFTER INSERT ON foo
> REFERENCING NEW TABLE AS changed FOR EACH STATEMENT MODE DB2SQL
> INSERT INTO summary (name, aver, size)
> SELECT name, FLOOR(AVG(LOG10(val))), COUNT(*)
> FROM changed
> GROUP BY name;
> -- insert rows to cause trigger to fire
> INSERT INTO foo (name, val) VALUES ('A', 10), ('A', 20), ('B', 30), ('C', 40);
> SELECT * FROM foo;
> SELECT * FROM summary;
> {code}



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Mime
View raw message