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

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

In the OR case, I think the end result would actually end up being wrong. If 
the predicate is X < 5 OR TRUE, and only X < 5 is pushed into the table 
function, the rows where X >= 5 won't be returned from the table function and 
Derby has no way to recreate these outside the table function.

But I agree, the predicates should have been normalized before we get there, so 
updating the comments would probably suffice.

> Hidden assumptions in FromVTI.makeRestriction()
> -----------------------------------------------
>
>                 Key: DERBY-4651
>                 URL: https://issues.apache.org/jira/browse/DERBY-4651
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.6.1.0
>            Reporter: Knut Anders Hatlen
>            Priority: Minor
>
> FromVTI.makeRestriction() has this code to strip away Boolean constants from 
> AND and OR expressions:
>             // strip off trailing vacuous constant if present
>             if ( andOperator.getRightOperand() instanceof BooleanConstantNode 
> )
>             { return makeRestriction( andOperator.getLeftOperand(), 
> columnNameMap ); }
> and
>             // strip off trailing vacuous constant if present
>             if ( orOperator.getRightOperand() instanceof BooleanConstantNode )
>             { return makeRestriction( orOperator.getLeftOperand(), 
> columnNameMap ); }
> The code for AND will only work as expected if the right operand is TRUE. The 
> code for OR only works correctly if the right operand is FALSE.
> I'm not sure if this can ever result in user-visible bugs, since Boolean 
> constants are usually removed before we get to this point in the code. The 
> predicate has probably been transformed to conjunctive normal form, in which 
> Boolean constants in the right operand of an AndNode or an OrNode in fact is 
> always TRUE or FALSE, respectively.
> I think this code either should be changed to work regardless of the value of 
> the constant in the right operand, or the assumption that the predicate is on 
> conjunctive normal form should be documented in the comments (and perhaps 
> also checked in an assert statement).

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