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.