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