use of org.apache.calcite.test.SqlToRelTestBase.NL in project calcite by apache.
the class RelOptRulesTest method testProjectJoinTransposeRuleOnAggWithNoFieldsWithTrimmer.
/**
* Test case for
* <a href="https://issues.apache.org/jira/browse/CALCITE-4317">[CALCITE-4317]
* RelFieldTrimmer after trimming all the fields in an aggregate
* should not return a zero field Aggregate</a>.
*/
@Test
void testProjectJoinTransposeRuleOnAggWithNoFieldsWithTrimmer() {
fixture().withVolcanoPlanner(false, p -> {
p.addRelTraitDef(RelDistributionTraitDef.INSTANCE);
RelOptUtil.registerDefaultRules(p, false, false);
}).withDynamicTable().withTrim(true).relFn(b -> {
// Build a rel equivalent to sql:
// SELECT name FROM (SELECT count(*) cnt_star, count(empno) cnt_en FROM sales.emp)
// cross join sales.dept
// limit 10
RelNode left = b.scan("DEPT").build();
RelNode right = b.scan("EMP").project(b.alias(b.literal(0), "DUMMY")).aggregate(b.groupKey(), b.count(b.field(0)).as("DUMMY_COUNT")).build();
return b.push(left).push(right).join(JoinRelType.INNER, b.literal(true)).project(b.field("DEPTNO")).build();
}).withBefore((f, r) -> {
final String planBeforeTrimming = NL + RelOptUtil.toString(r);
f.diffRepos().assertEquals("planBeforeTrimming", "${planBeforeTrimming}", planBeforeTrimming);
RelNode r2 = f.tester.trimRelNode(f.factory, r);
final String planAfterTrimming = NL + RelOptUtil.toString(r2);
f.diffRepos().assertEquals("planAfterTrimming", "${planAfterTrimming}", planAfterTrimming);
return r2;
}).withRule(CoreRules.PROJECT_JOIN_TRANSPOSE).checkUnchanged();
}
Aggregations