[
https://issues.apache.org/jira/browse/DERBY-4388?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12762184#action_12762184
]
Knut Anders Hatlen commented on DERBY-4388:
-------------------------------------------
BetweenOperatorNode.eliminateNots() rewrites T1.X NOT BETWEEN 0 AND 4 to T1.X <
0 OR T1.X > 4. I compared the optimized tree for a NOT BETWEEN query with a
query manually rewritten to the equivalent less-than/greater-than form and saw
that the structure of the column references was different.
Looking at how other nodes implement eliminateNots(), I found that
InListOperatorNode is similar to BetweenOperatorNode, except that it always
clones the left operand if it is a ColumnReference. A comment told that the
cloning was necessary because the reference could be remapped during
optimization, and then the different nodes would need a separate instance.
Changing BetweenOperatorNode to clone ColumnReferences appears to fix the NPE.
> NullPointerException in RIGHT JOIN with NOT BETWEEN
> ---------------------------------------------------
>
> Key: DERBY-4388
> URL: https://issues.apache.org/jira/browse/DERBY-4388
> Project: Derby
> Issue Type: Bug
> Components: SQL
> Affects Versions: 10.0.2.1, 10.1.3.1, 10.2.2.0, 10.3.3.0, 10.4.2.0,
> 10.5.3.0, 10.6.0.0
> Reporter: Knut Anders Hatlen
> Assignee: Knut Anders Hatlen
>
> ij> create table t1(x int);
> 0 rows inserted/updated/deleted
> ij> create table t2(x int);
> 0 rows inserted/updated/deleted
> ij> insert into t2 values (1);
> 1 row inserted/updated/deleted
> ij> select * from t1 right join t2 on t1.x = t2.x where t1.x not between 0
> and 4;
> X |X
> -----------------------
> ERROR 38000: The exception 'java.lang.NullPointerException' was thrown while
> evaluating an expression.
> ERROR XJ001: Java exception: ': java.lang.NullPointerException'.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.