You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by jh...@apache.org on 2015/12/10 06:31:11 UTC
tajo git commit: TAJO-2013: FilterPushDownRule fails due to the
unsupported index.
Repository: tajo
Updated Branches:
refs/heads/master b1959116a -> 3d59eebd5
TAJO-2013: FilterPushDownRule fails due to the unsupported index.
Closes #904
Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/3d59eebd
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/3d59eebd
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/3d59eebd
Branch: refs/heads/master
Commit: 3d59eebd57c3af9809a7ea9199472925904ecc1c
Parents: b195911
Author: Jinho Kim <jh...@apache.org>
Authored: Thu Dec 10 14:30:22 2015 +0900
Committer: Jinho Kim <jh...@apache.org>
Committed: Thu Dec 10 14:30:22 2015 +0900
----------------------------------------------------------------------
CHANGES | 2 +
.../plan/rewrite/rules/FilterPushDownRule.java | 59 +++++++++++---------
2 files changed, 34 insertions(+), 27 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/3d59eebd/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 6f20d8d..c859b18 100644
--- a/CHANGES
+++ b/CHANGES
@@ -57,6 +57,8 @@ Release 0.12.0 - unreleased
BUG FIXES
+ TAJO-2013: FilterPushDownRule fails due to the unsupported index. (jinho)
+
TAJO-2014: TestRpcClientManager fails occasionally. (jinho)
TAJO-2000: BSTIndex can cause OOM. (jinho)
http://git-wip-us.apache.org/repos/asf/tajo/blob/3d59eebd/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/FilterPushDownRule.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/FilterPushDownRule.java b/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/FilterPushDownRule.java
index 43868a5..29780d4 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/FilterPushDownRule.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/FilterPushDownRule.java
@@ -24,6 +24,7 @@ import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.tajo.SessionVars;
import org.apache.tajo.algebra.JoinType;
import org.apache.tajo.catalog.*;
import org.apache.tajo.datum.Datum;
@@ -58,6 +59,7 @@ public class FilterPushDownRule extends BasicLogicalPlanVisitor<FilterPushDownCo
static class FilterPushDownContext {
Set<EvalNode> pushingDownFilters = new HashSet<>();
+ LogicalPlanRewriteRuleContext rewriteRuleContext;
public void clear() {
pushingDownFilters.clear();
@@ -111,6 +113,7 @@ public class FilterPushDownRule extends BasicLogicalPlanVisitor<FilterPushDownCo
. It not, create new HavingNode and set parent's child.
*/
FilterPushDownContext context = new FilterPushDownContext();
+ context.rewriteRuleContext = rewriteRuleContext;
LogicalPlan plan = rewriteRuleContext.getPlan();
catalog = rewriteRuleContext.getCatalog();
for (LogicalPlan.QueryBlock block : plan.getQueryBlocks()) {
@@ -966,35 +969,37 @@ public class FilterPushDownRule extends BasicLogicalPlanVisitor<FilterPushDownCo
scanNode.setQual(qual);
// Index path can be identified only after filters are pushed into each scan.
- String databaseName, tableName;
- databaseName = CatalogUtil.extractQualifier(table.getName());
- tableName = CatalogUtil.extractSimpleName(table.getName());
- Set<Predicate> predicates = new HashSet<>();
- for (EvalNode eval : PlannerUtil.getAllEqualEvals(qual)) {
- BinaryEval binaryEval = (BinaryEval) eval;
- // TODO: consider more complex predicates
- if (binaryEval.getLeftExpr().getType() == EvalType.FIELD &&
- binaryEval.getRightExpr().getType() == EvalType.CONST) {
- predicates.add(new Predicate(binaryEval.getType(),
- ((FieldEval) binaryEval.getLeftExpr()).getColumnRef(),
- ((ConstEval)binaryEval.getRightExpr()).getValue()));
- } else if (binaryEval.getLeftExpr().getType() == EvalType.CONST &&
- binaryEval.getRightExpr().getType() == EvalType.FIELD) {
- predicates.add(new Predicate(binaryEval.getType(),
- ((FieldEval) binaryEval.getRightExpr()).getColumnRef(),
- ((ConstEval)binaryEval.getLeftExpr()).getValue()));
+ if(context.rewriteRuleContext.getQueryContext().getBool(SessionVars.INDEX_ENABLED)) {
+ String databaseName, tableName;
+ databaseName = CatalogUtil.extractQualifier(table.getName());
+ tableName = CatalogUtil.extractSimpleName(table.getName());
+ Set<Predicate> predicates = new HashSet<>();
+ for (EvalNode eval : PlannerUtil.getAllEqualEvals(qual)) {
+ BinaryEval binaryEval = (BinaryEval) eval;
+ // TODO: consider more complex predicates
+ if (binaryEval.getLeftExpr().getType() == EvalType.FIELD &&
+ binaryEval.getRightExpr().getType() == EvalType.CONST) {
+ predicates.add(new Predicate(binaryEval.getType(),
+ ((FieldEval) binaryEval.getLeftExpr()).getColumnRef(),
+ ((ConstEval) binaryEval.getRightExpr()).getValue()));
+ } else if (binaryEval.getLeftExpr().getType() == EvalType.CONST &&
+ binaryEval.getRightExpr().getType() == EvalType.FIELD) {
+ predicates.add(new Predicate(binaryEval.getType(),
+ ((FieldEval) binaryEval.getRightExpr()).getColumnRef(),
+ ((ConstEval) binaryEval.getLeftExpr()).getValue()));
+ }
}
- }
- // for every subset of the set of columns, find all matched index paths
- for (Set<Predicate> subset : Sets.powerSet(predicates)) {
- if (subset.size() == 0)
- continue;
- Column[] columns = extractColumns(subset);
- if (catalog.existIndexByColumns(databaseName, tableName, columns)) {
- IndexDesc indexDesc = catalog.getIndexByColumns(databaseName, tableName, columns);
- block.addAccessPath(scanNode, new IndexScanInfo(
- table.getStats(), indexDesc, getSimplePredicates(indexDesc, subset)));
+ // for every subset of the set of columns, find all matched index paths
+ for (Set<Predicate> subset : Sets.powerSet(predicates)) {
+ if (subset.size() == 0)
+ continue;
+ Column[] columns = extractColumns(subset);
+ if (catalog.existIndexByColumns(databaseName, tableName, columns)) {
+ IndexDesc indexDesc = catalog.getIndexByColumns(databaseName, tableName, columns);
+ block.addAccessPath(scanNode, new IndexScanInfo(
+ table.getStats(), indexDesc, getSimplePredicates(indexDesc, subset)));
+ }
}
}
}