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

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

The NPE is raised by this code in ResultSetNode.setTableConstructorTypes() 
because re is null:

                        ResultColumn    rc = (ResultColumn) 
resultColumns.elementAt(index);

                        ValueNode re = rc.getExpression();

                        if (re.requiresTypeFromContext())

I looked at it in the debugger, and it turned out that rc was an instance of 
AllResultColumn, which represents the "*" in the select list. So the problem 
seems to be related to the "*" not having been expanded to the actual RC at 
that time.

The insert statement works if the "*" in the first operand of the except 
operator is replaced with the actual column name:

ij> insert into t3 select x from t1 except select * from t2;
1 row inserted/updated/deleted

> NullPointerException with INSERT INTO ... from EXCEPT/INTERSECT
> ---------------------------------------------------------------
>
>                 Key: DERBY-4420
>                 URL: https://issues.apache.org/jira/browse/DERBY-4420
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.1.1.0, 10.2.1.6, 10.3.1.4, 10.4.1.3, 10.5.1.1, 
> 10.5.3.0, 10.6.0.0
>            Reporter: Knut Anders Hatlen
>         Attachments: npe.sql
>
>
> The sequence of statements below give a NullPointerException. The statements 
> are very similar to the ones in DERBY-4419, but this is a separate bug since 
> the stack traces are different, and this bug can be seen all the way back to 
> 10.1.1.0, whereas DERBY-4419 was a regression in 10.3. (On 10.0.2.1, a syntax 
> error is raised instead of the NPE.)
> ij> create table t1(x int);
> 0 rows inserted/updated/deleted
> ij> insert into t1 values 1,2;
> 2 rows inserted/updated/deleted
> ij> create table t2(x int);
> 0 rows inserted/updated/deleted
> ij> insert into t2 values 2,3;
> 2 rows inserted/updated/deleted
> ij> create table t3(x int, y int generated always as identity);
> 0 rows inserted/updated/deleted
> ij> insert into t3(x) select * from t1 except select * from t2;
> ERROR XJ001: Java exception: ': java.lang.NullPointerException'.
> Same error if INTERSECT is used instead of EXCEPT.

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