/** 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); }
new FilterProjectTransposeRule(Filter.class, HiveFilter.DEFAULT_FILTER_FACTORY, HiveProject.class, HiveProject.DEFAULT_PROJECT_FACTORY));
/** Tests a variant of {@link FilterProjectTransposeRule} * that pushes a Filter that contains a correlating variable. */ @Test public void testFilterProjectTranspose() { final String sql = "SELECT e.empno\n" + "FROM emp as e\n" + "WHERE exists (\n" + " SELECT *\n" + " FROM (\n" + " SELECT deptno * 2 AS twiceDeptno\n" + " FROM dept) AS d\n" + " WHERE e.deptno = d.twiceDeptno)"; final FilterProjectTransposeRule filterProjectTransposeRule = new FilterProjectTransposeRule(Filter.class, filter -> true, Project.class, project -> true, true, true, RelFactories.LOGICAL_BUILDER); HepProgram program = new HepProgramBuilder() .addRuleInstance(filterProjectTransposeRule) .build(); sql(sql) .withDecorrelation(false) .expand(true) .with(program) .check(); }
FilterJoinRule.TRUE_PREDICATE)) .addRuleInstance( new FilterProjectTransposeRule(Filter.class, Project.class, true, true, f)) .addRuleInstance(new FilterCorrelateRule(f))
FilterJoinRule.TRUE_PREDICATE)) .addRuleInstance( new FilterProjectTransposeRule(Filter.class, Project.class, true, true, f)) .addRuleInstance(new FilterCorrelateRule(f))