@Test public void testAggregateExtractProjectRuleWithGroupingSets() { final String sql = "select empno, deptno, sum(sal)\n" + "from emp\n" + "group by grouping sets ((empno, deptno),(deptno),(empno))"; HepProgram pre = new HepProgramBuilder() .addRuleInstance(AggregateProjectMergeRule.INSTANCE) .build(); final AggregateExtractProjectRule rule = new AggregateExtractProjectRule(Aggregate.class, LogicalTableScan.class, RelFactories.LOGICAL_BUILDER); sql(sql).withPre(pre).withRule(rule).check(); }
@Test public void testAggregateExtractProjectRule() { final String sql = "select sum(sal)\n" + "from emp"; HepProgram pre = new HepProgramBuilder() .addRuleInstance(AggregateProjectMergeRule.INSTANCE) .build(); final AggregateExtractProjectRule rule = new AggregateExtractProjectRule(Aggregate.class, LogicalTableScan.class, RelFactories.LOGICAL_BUILDER); sql(sql).withPre(pre).withRule(rule).check(); }
@Test public void testAggregateExtractProjectRule() { final String sql = "select sum(sal)\n" + "from emp"; HepProgram pre = new HepProgramBuilder() .addRuleInstance(AggregateProjectMergeRule.INSTANCE) .build(); final AggregateExtractProjectRule rule = new AggregateExtractProjectRule(Aggregate.class, LogicalTableScan.class, RelFactories.LOGICAL_BUILDER); sql(sql).withPre(pre).withRule(rule).check(); }
@Test public void testAggregateExtractProjectRuleWithGroupingSets() { final String sql = "select empno, deptno, sum(sal)\n" + "from emp\n" + "group by grouping sets ((empno, deptno),(deptno),(empno))"; HepProgram pre = new HepProgramBuilder() .addRuleInstance(AggregateProjectMergeRule.INSTANCE) .build(); final AggregateExtractProjectRule rule = new AggregateExtractProjectRule(Aggregate.class, LogicalTableScan.class, RelFactories.LOGICAL_BUILDER); sql(sql).withPre(pre).withRule(rule).check(); }
/** Test with column used in both grouping set and argument to aggregate * function. */ @Test public void testAggregateExtractProjectRuleWithGroupingSets2() { final String sql = "select empno, deptno, sum(empno)\n" + "from emp\n" + "group by grouping sets ((empno, deptno),(deptno),(empno))"; HepProgram pre = new HepProgramBuilder() .addRuleInstance(AggregateProjectMergeRule.INSTANCE) .build(); final AggregateExtractProjectRule rule = new AggregateExtractProjectRule(Aggregate.class, LogicalTableScan.class, RelFactories.LOGICAL_BUILDER); sql(sql).withPre(pre).withRule(rule).check(); }
/** Test with column used in both grouping set and argument to aggregate * function. */ @Test public void testAggregateExtractProjectRuleWithGroupingSets2() { final String sql = "select empno, deptno, sum(empno)\n" + "from emp\n" + "group by grouping sets ((empno, deptno),(deptno),(empno))"; HepProgram pre = new HepProgramBuilder() .addRuleInstance(AggregateProjectMergeRule.INSTANCE) .build(); final AggregateExtractProjectRule rule = new AggregateExtractProjectRule(Aggregate.class, LogicalTableScan.class, RelFactories.LOGICAL_BUILDER); sql(sql).withPre(pre).withRule(rule).check(); }
@Test public void testAggregateExtractProjectRuleWithFilter() { final String sql = "select sum(sal) filter (where empno = 40)\n" + "from emp"; HepProgram pre = new HepProgramBuilder() .addRuleInstance(AggregateProjectMergeRule.INSTANCE) .build(); // AggregateProjectMergeRule does not merges Project with Filter. // Force match Aggregate on top of Project once explicitly in unit test. final AggregateExtractProjectRule rule = new AggregateExtractProjectRule( operand(Aggregate.class, operandJ(Project.class, null, new Predicate<Project>() { int matchCount = 0; public boolean test(Project project) { return matchCount++ == 0; } }, none())), RelFactories.LOGICAL_BUILDER); sql(sql).withPre(pre).withRule(rule).checkUnchanged(); }
@Test public void testAggregateExtractProjectRuleWithFilter() { final String sql = "select sum(sal) filter (where empno = 40)\n" + "from emp"; HepProgram pre = new HepProgramBuilder() .addRuleInstance(AggregateProjectMergeRule.INSTANCE) .build(); // AggregateProjectMergeRule does not merges Project with Filter. // Force match Aggregate on top of Project once explicitly in unit test. final AggregateExtractProjectRule rule = new AggregateExtractProjectRule( operand(Aggregate.class, operandJ(Project.class, null, new Predicate<Project>() { int matchCount = 0; public boolean test(Project project) { return matchCount++ == 0; } }, none())), RelFactories.LOGICAL_BUILDER); sql(sql).withPre(pre).withRule(rule).checkUnchanged(); }