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