[
https://issues.apache.org/jira/browse/DERBY-4651?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Knut Anders Hatlen updated DERBY-4651:
--------------------------------------
Attachment: no_cast.diff
I'm making one small simplification before I close the issue. isBooleanTrue()
and isBooleanFalse() are defined in ValueNode, and return false if the object
is not an instance of BooleanConstantNode, so there's no need to check the type
of the right operand and cast it to BooleanConstantNode before calling one of
those methods. Removing redundant check and cast in patch no_cast.diff.
Committed revision 944174.
> 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
> Assignee: Rick Hillegas
> Priority: Minor
> Attachments: derby-4651-01-aa-verificationTest.diff,
> derby-4651-02-aa-fixBug.diff, no_cast.diff
>
>
> 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.