Fix bug in the SMA code (#223) * Fix bug in the SMA code so that the SMA predicate evaluation is only applied if at least one of the operands in the predicate is a static value.
Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/847941df Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/847941df Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/847941df Branch: refs/heads/decimal-type Commit: 847941dfe48f8055be1ea2f6a420fc5613c80653 Parents: 43f1626 Author: Jignesh Patel <pate...@users.noreply.github.com> Authored: Mon May 16 12:04:32 2016 -0500 Committer: Zuyu Zhang <zzh...@pivotal.io> Committed: Wed Jun 8 11:57:43 2016 -0700 ---------------------------------------------------------------------- storage/SMAIndexSubBlock.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/847941df/storage/SMAIndexSubBlock.cpp ---------------------------------------------------------------------- diff --git a/storage/SMAIndexSubBlock.cpp b/storage/SMAIndexSubBlock.cpp index 2a0e4f9..aa9bc54 100644 --- a/storage/SMAIndexSubBlock.cpp +++ b/storage/SMAIndexSubBlock.cpp @@ -621,9 +621,14 @@ Selectivity SMAIndexSubBlock::getSelectivityForPredicate(const ComparisonPredica predicate_cost_t SMAIndexSubBlock::estimatePredicateEvaluationCost( const ComparisonPredicate &predicate) const { DCHECK(initialized_); - Selectivity selectivity = getSelectivityForPredicate(predicate); - if (selectivity == Selectivity::kAll || selectivity == Selectivity::kNone) { - return predicate_cost::kConstantTime; + + // Check that at least one of the operands has a static value. + if (predicate.getLeftOperand().hasStaticValue() || + predicate.getRightOperand().hasStaticValue()) { + Selectivity selectivity = getSelectivityForPredicate(predicate); + if (selectivity == Selectivity::kAll || selectivity == Selectivity::kNone) { + return predicate_cost::kConstantTime; + } } return predicate_cost::kInfinite; }