@Override public boolean matches(final RelOptRuleCall call) { // Subquery must be a groupBy, so stage must be >= AGGREGATE. final DruidRel druidRel = call.rel(call.getRelList().size() - 1); return druidRel.getPartialDruidQuery().stage().compareTo(PartialDruidQuery.Stage.AGGREGATE) >= 0; } }
@Override public void onMatch(RelOptRuleCall call) { LogicalAggregate aggr = (LogicalAggregate) call.getRelList().get(0); RelNode input = aggr.getInput(); RelBuilder relBuilder = call.builder();
private MatchFunction getMatchIfRoot(RelOptRuleCall call) { List<RelNode> rels = call.getRelList(); if (call.getPlanner().getRoot().equals(call.rel(0))) { if (rels.size() == 2) { if ((rels.get(0) instanceof DrillFilterRel) && (rels.get(1) instanceof DrillScanRel)) { return ((DbScanToIndexScanPrule)FILTER_SCAN).match; } } else if (rels.size() == 3) { if ((rels.get(0) instanceof DrillFilterRel) && (rels.get(1) instanceof DrillProjectRel) && (rels.get(2) instanceof DrillScanRel)) { return ((DbScanToIndexScanPrule)FILTER_PROJECT_SCAN).match; } } } return null; }
@Override public boolean matches(final RelOptRuleCall call) { // Subquery must be a groupBy, so stage must be >= AGGREGATE. final DruidRel druidRel = call.rel(call.getRelList().size() - 1); return druidRel.getPartialDruidQuery().stage().compareTo(PartialDruidQuery.Stage.AGGREGATE) >= 0; } }
@Override public void onMatch(RelOptRuleCall call) { // Wait a bit to avoid looping too many times try { TimeUnit.MILLISECONDS.sleep(10); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } call.transformTo(new NoneRel(call.getRelList().get(0).getCluster())); } }
@Override public void onMatch(RelOptRuleCall call) { LogicalAggregate aggr = (LogicalAggregate) call.getRelList().get(0); RelNode input = aggr.getInput(); RelBuilder relBuilder = call.builder();