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

Reply via email to