/** * Tests that planner throws an error if you pass to {@link * Planner#convert(org.eigenbase.sql.SqlNode)} a {@link org.eigenbase.sql.SqlNode} that has been * parsed but not validated. */ @Test public void testConvertWithoutValidateFails() throws Exception { Planner planner = getPlanner(); SqlNode parse = planner.parse("select * from \"emps\""); try { RelNode rel = planner.convert(parse); fail("expected error, got " + rel); } catch (IllegalArgumentException e) { assertThat( e.getMessage(), containsString("cannot move from STATE_3_PARSED to STATE_4_VALIDATED")); } }
@Test public void testParseAndConvert() throws Exception { Planner planner = getPlanner(); SqlNode parse = planner.parse("select * from \"emps\" where \"name\" like '%e%'"); assertThat( parse.toString(), equalTo("SELECT *\n" + "FROM `emps`\n" + "WHERE `name` LIKE '%e%'")); SqlNode validate = planner.validate(parse); RelNode rel = planner.convert(validate); assertThat( toString(rel), equalTo( "ProjectRel(empid=[$0], deptno=[$1], name=[$2], salary=[$3], commission=[$4])\n" + " FilterRel(condition=[LIKE($2, '%e%')])\n" + " EnumerableTableAccessRel(table=[[hr, emps]])\n")); }
/** Unit test that parses, validates, converts and plans. */ @Test public void testPlan() throws Exception { RuleSet ruleSet = RuleSets.ofList( MergeFilterRule.INSTANCE, JavaRules.ENUMERABLE_FILTER_RULE, JavaRules.ENUMERABLE_PROJECT_RULE); Planner planner = getPlanner(ruleSet); SqlNode parse = planner.parse("select * from \"emps\""); SqlNode validate = planner.validate(parse); RelNode convert = planner.convert(validate); RelTraitSet traitSet = planner.getEmptyTraitSet().replace(EnumerableConvention.INSTANCE); RelNode transform = planner.transform(0, traitSet, convert); assertThat( toString(transform), equalTo( "EnumerableProjectRel(empid=[$0], deptno=[$1], name=[$2], salary=[$3], commission=[$4])\n" + " EnumerableTableAccessRel(table=[[hr, emps]])\n")); }