calciteOptimizedPlan = hepPlan(calciteOptimizedPlan, false, mdProvider.getMetadataProvider(), null, HepMatchOrder.BOTTOM_UP, ProjectRemoveRule.INSTANCE, new ProjectMergeRule(false, HiveRelFactories.HIVE_BUILDER)); calciteOptimizedPlan = hepPlan(calciteOptimizedPlan, true, mdProvider.getMetadataProvider(), null, HiveFilterProjectTSTransposeRule.INSTANCE, HiveFilterProjectTSTransposeRule.INSTANCE_DRUID,
@Override public boolean matches(RelOptRuleCall call) { // Currently we do not support merging windowing functions with other // windowing functions i.e. embedding windowing functions within each // other final Project topProject = call.rel(0); final Project bottomProject = call.rel(1); for (RexNode expr : topProject.getChildExps()) { if (expr instanceof RexOver) { Set<Integer> positions = HiveCalciteUtil.getInputRefs(expr); for (int pos : positions) { if (bottomProject.getChildExps().get(pos) instanceof RexOver) { return false; } } } } return super.matches(call); }
public void onMatch(RelOptRuleCall call) { final Project topProject = call.rel(0); final Project bottomProject = call.rel(1); // If top project does not reference any column at the bottom project, // we can just remove botton project final ImmutableBitSet topRefs = RelOptUtil.InputFinder.bits(topProject.getChildExps(), null); if (topRefs.isEmpty()) { RelBuilder relBuilder = call.builder(); relBuilder.push(bottomProject.getInput()); relBuilder.project(topProject.getChildExps()); call.transformTo(relBuilder.build()); return; } super.onMatch(call); }
/** * Creates a ProjectMergeRule, specifying whether to always merge projects. * * @param force Whether to always merge projects */ public ProjectMergeRule(boolean force, RelBuilderFactory relBuilderFactory) { super( operand(Project.class, operand(Project.class, any())), relBuilderFactory, "ProjectMergeRule" + (force ? ":force_mode" : "")); this.force = force; }
/** * Creates a ProjectMergeRule, specifying whether to always merge projects. * * @param force Whether to always merge projects */ public ProjectMergeRule(boolean force, RelBuilderFactory relBuilderFactory) { super( operand(Project.class, operand(Project.class, any())), relBuilderFactory, "ProjectMergeRule" + (force ? ":force_mode" : "")); this.force = force; }
calciteOptimizedPlan = hepPlan(calciteOptimizedPlan, false, mdProvider.getMetadataProvider(), null, HepMatchOrder.BOTTOM_UP, ProjectRemoveRule.INSTANCE, new ProjectMergeRule(false, HiveRelFactories.HIVE_BUILDER)); calciteOptimizedPlan = hepPlan(calciteOptimizedPlan, true, mdProvider.getMetadataProvider(), null, HiveFilterProjectTSTransposeRule.INSTANCE, HiveFilterProjectTSTransposeRule.INSTANCE_DRUID,
@Override public boolean matches(RelOptRuleCall call) { // Currently we do not support merging windowing functions with other // windowing functions i.e. embedding windowing functions within each // other final Project topProject = call.rel(0); final Project bottomProject = call.rel(1); for (RexNode expr : topProject.getChildExps()) { if (expr instanceof RexOver) { Set<Integer> positions = HiveCalciteUtil.getInputRefs(expr); for (int pos : positions) { if (bottomProject.getChildExps().get(pos) instanceof RexOver) { return false; } } } } return super.matches(call); }
/** Creates a MaterializedViewAggregateRule. */ protected MaterializedViewAggregateRule(RelOptRuleOperand operand, RelBuilderFactory relBuilderFactory, String description, boolean generateUnionRewriting, HepProgram unionRewritingPullProgram) { super(operand, relBuilderFactory, description, generateUnionRewriting, unionRewritingPullProgram, false); this.filterProjectTransposeRule = new FilterProjectTransposeRule( Filter.class, Project.class, true, true, relBuilderFactory); this.filterAggregateTransposeRule = new FilterAggregateTransposeRule( Filter.class, relBuilderFactory, Aggregate.class); this.aggregateProjectPullUpConstantsRule = new AggregateProjectPullUpConstantsRule( Aggregate.class, Filter.class, relBuilderFactory, "AggFilterPullUpConstants"); this.projectMergeRule = new ProjectMergeRule(true, relBuilderFactory); }
/** Creates a MaterializedViewAggregateRule. */ protected MaterializedViewAggregateRule(RelOptRuleOperand operand, RelBuilderFactory relBuilderFactory, String description, boolean generateUnionRewriting, HepProgram unionRewritingPullProgram) { super(operand, relBuilderFactory, description, generateUnionRewriting, unionRewritingPullProgram, false); this.filterProjectTransposeRule = new FilterProjectTransposeRule( Filter.class, Project.class, true, true, relBuilderFactory); this.filterAggregateTransposeRule = new FilterAggregateTransposeRule( Filter.class, relBuilderFactory, Aggregate.class); this.aggregateProjectPullUpConstantsRule = new AggregateProjectPullUpConstantsRule( Aggregate.class, Filter.class, relBuilderFactory, "AggFilterPullUpConstants"); this.projectMergeRule = new ProjectMergeRule(true, relBuilderFactory); }
/** Test case for * <a href="https://issues.apache.org/jira/browse/CALCITE-648">[CALCITE-649] * Update ProjectMergeRule description for new naming convention</a>. */ @Test public void testMergeProjectForceMode() throws Exception { RuleSet ruleSet = RuleSets.ofList( new ProjectMergeRule(true, RelBuilder.proto(RelFactories.DEFAULT_PROJECT_FACTORY))); Planner planner = getPlanner(null, Programs.of(ruleSet)); planner.close(); } }
/** Test case for * <a href="https://issues.apache.org/jira/browse/CALCITE-648">[CALCITE-649] * Update ProjectMergeRule description for new naming convention</a>. */ @Test public void testMergeProjectForceMode() throws Exception { RuleSet ruleSet = RuleSets.ofList( new ProjectMergeRule(true, RelBuilder.proto(RelFactories.DEFAULT_PROJECT_FACTORY))); Planner planner = getPlanner(null, Programs.of(ruleSet)); planner.close(); }
hepPgmBldr.addRuleInstance(ProjectRemoveRule.INSTANCE); hepPgmBldr.addRuleInstance(UnionMergeRule.INSTANCE); hepPgmBldr.addRuleInstance(new ProjectMergeRule(false, HiveProject.DEFAULT_PROJECT_FACTORY));