/** Returns the root relational expression, creating a {@link LogicalProject} * if necessary to remove fields that are not needed. */ public RelNode project() { return project(false); }
/** Returns the root relational expression, creating a {@link LogicalProject} * if necessary to remove fields that are not needed. */ public RelNode project() { return project(false); }
private RexToJavaCompiler createExpressionCompiler(RelRoot relRoot) { RelDataTypeFactory dataTypeFactory = relRoot.project().getCluster().getTypeFactory(); RexBuilder rexBuilder = new SamzaSqlRexBuilder(dataTypeFactory); return new RexToJavaCompiler(rexBuilder); }
private RexToJavaCompiler createExpressionCompiler(RelRoot relRoot) { RelDataTypeFactory dataTypeFactory = relRoot.project().getCluster().getTypeFactory(); RexBuilder rexBuilder = new SamzaSqlRexBuilder(dataTypeFactory); return new RexToJavaCompiler(rexBuilder); }
public RelRoot sqlToRel(SqlNode sqlNode) { assert sqlNode != null; RexBuilder rexBuilder = this.createRexBuilder(); RelOptCluster cluster = RelOptCluster.create(this.planner, rexBuilder); SqlToRelConverter sqlToRelConverter = new SqlToRelConverter( new ViewExpanderImpl(), this.validator, this.createCatalogReader(), cluster, this.convertletTable, SqlToRelConverter.Config.DEFAULT); RelRoot tempRoot = sqlToRelConverter.convertQuery(sqlNode, false, true); tempRoot = tempRoot.withRel(sqlToRelConverter.flattenTypes(tempRoot.project(), true)); tempRoot = tempRoot.withRel(RelDecorrelator.decorrelateQuery(tempRoot.project())); return tempRoot; }
protected RelNode convertInsert(SqlInsert call) { RelOptTable targetTable = getTargetTable(call); final RelDataType targetRowType = validator.getValidatedNodeType(call); assert targetRowType != null; RelNode sourceRel = convertQueryRecursive(call.getSource(), false, targetRowType).project(); RelNode massagedRel = convertColumnList(call, sourceRel); return createModify(targetTable, massagedRel); }
protected RelNode convertInsert(SqlInsert call) { RelOptTable targetTable = getTargetTable(call); final RelDataType targetRowType = validator.getValidatedNodeType(call); assert targetRowType != null; RelNode sourceRel = convertQueryRecursive(call.getSource(), false, targetRowType).project(); RelNode massagedRel = convertColumnList(call, sourceRel); return createModify(targetTable, massagedRel); }
protected RelNode convertInsert(SqlInsert call) { RelOptTable targetTable = getTargetTable(call); final RelDataType targetRowType = validator.getValidatedNodeType(call); assert targetRowType != null; RelNode sourceRel = convertQueryRecursive(call.getSource(), false, targetRowType).project(); RelNode massagedRel = convertColumnList(call, sourceRel); return createModify(targetTable, massagedRel); }
protected RelNode convertInsert(SqlInsert call) { RelOptTable targetTable = getTargetTable(call); final RelDataType targetRowType = validator.getValidatedNodeType(call); assert targetRowType != null; RelNode sourceRel = convertQueryRecursive(call.getSource(), false, targetRowType).project(); RelNode massagedRel = convertColumnList(call, sourceRel); return createModify(targetTable, massagedRel); }
@Test public void testLarge() { // Size factor used to be 400, but lambdas use a lot of stack final int x = 300; SqlValidatorTest.checkLarge(x, input -> { final RelRoot root = tester.convertSqlToRel(input); final String s = RelOptUtil.toString(root.project()); assertThat(s, notNullValue()); }); }
@Test public void testLarge() { // Size factor used to be 400, but lambdas use a lot of stack final int x = 300; SqlValidatorTest.checkLarge(x, input -> { final RelRoot root = tester.convertSqlToRel(input); final String s = RelOptUtil.toString(root.project()); assertThat(s, notNullValue()); }); }
private void checkParseAndConvert(String query, String queryFromParseTree, String expectedRelExpr) throws Exception { Planner planner = getPlanner(null); SqlNode parse = planner.parse(query); assertThat(Util.toLinux(parse.toString()), equalTo(queryFromParseTree)); SqlNode validate = planner.validate(parse); RelNode rel = planner.rel(validate).project(); assertThat(toString(rel), equalTo(expectedRelExpr)); }
List<Lattice> addQuery(String q) throws SqlParseException, ValidationException, RelConversionException { final Planner planner = new PlannerImpl(config); final SqlNode node = planner.parse(q); final SqlNode node2 = planner.validate(node); final RelRoot root = planner.rel(node2); return s.addQuery(root.project()); }
private void checkParseAndConvert(String query, String queryFromParseTree, String expectedRelExpr) throws Exception { Planner planner = getPlanner(null); SqlNode parse = planner.parse(query); assertThat(Util.toLinux(parse.toString()), equalTo(queryFromParseTree)); SqlNode validate = planner.validate(parse); RelNode rel = planner.rel(validate).project(); assertThat(toString(rel), equalTo(expectedRelExpr)); }
/** Helper method for testing {@link RelMetadataQuery#getPulledUpPredicates} * metadata. */ private void checkMetadataPredicates(String sql, String expectedPredicates) throws Exception { Planner planner = getPlanner(null); SqlNode parse = planner.parse(sql); SqlNode validate = planner.validate(parse); RelNode rel = planner.rel(validate).project(); final RelMetadataQuery mq = RelMetadataQuery.instance(); final RelOptPredicateList predicates = mq.getPulledUpPredicates(rel); final String buf = predicates.pulledUpPredicates.toString(); assertThat(buf, equalTo(expectedPredicates)); }
/** Tests a plan where the sort field is projected away. */ @Test public void testInterpretOrder() throws Exception { final String sql = "select y\n" + "from (values (1, 'a'), (2, 'b'), (3, 'c')) as t(x, y)\n" + "order by -x"; SqlNode parse = planner.parse(sql); SqlNode validate = planner.validate(parse); RelNode convert = planner.rel(validate).project(); final Interpreter interpreter = new Interpreter(dataContext, convert); assertRows(interpreter, "[c]", "[b]", "[a]"); }
/** Tests a plan where the sort field is projected away. */ @Test public void testInterpretOrder() throws Exception { final String sql = "select y\n" + "from (values (1, 'a'), (2, 'b'), (3, 'c')) as t(x, y)\n" + "order by -x"; SqlNode parse = planner.parse(sql); SqlNode validate = planner.validate(parse); RelNode convert = planner.rel(validate).project(); final Interpreter interpreter = new Interpreter(dataContext, convert); assertRows(interpreter, "[c]", "[b]", "[a]"); }
/** Helper method for testing {@link RelMetadataQuery#getPulledUpPredicates} * metadata. */ private void checkMetadataPredicates(String sql, String expectedPredicates) throws Exception { Planner planner = getPlanner(null); SqlNode parse = planner.parse(sql); SqlNode validate = planner.validate(parse); RelNode rel = planner.rel(validate).project(); final RelMetadataQuery mq = RelMetadataQuery.instance(); final RelOptPredicateList predicates = mq.getPulledUpPredicates(rel); final String buf = predicates.pulledUpPredicates.toString(); assertThat(buf, equalTo(expectedPredicates)); }
/** Unit test that parses, validates, converts and plans. */ @Test public void testPlan() throws Exception { Program program = Programs.ofRules( FilterMergeRule.INSTANCE, EnumerableRules.ENUMERABLE_FILTER_RULE, EnumerableRules.ENUMERABLE_PROJECT_RULE); Planner planner = getPlanner(null, program); SqlNode parse = planner.parse("select * from \"emps\""); SqlNode validate = planner.validate(parse); RelNode convert = planner.rel(validate).project(); RelTraitSet traitSet = planner.getEmptyTraitSet() .replace(EnumerableConvention.INSTANCE); RelNode transform = planner.transform(0, traitSet, convert); assertThat(toString(transform), equalTo( "EnumerableProject(empid=[$0], deptno=[$1], name=[$2], salary=[$3], commission=[$4])\n" + " EnumerableTableScan(table=[[hr, emps]])\n")); }
public String checkTpchQuery(String tpchTestQuery) throws Exception { final SchemaPlus schema = Frameworks.createRootSchema(true).add("tpch", new ReflectiveSchema(new TpchSchema())); final FrameworkConfig config = Frameworks.newConfigBuilder() .parserConfig(SqlParser.configBuilder().setLex(Lex.MYSQL).build()) .defaultSchema(schema) .programs(Programs.ofRules(Programs.RULE_SET)) .build(); String plan; try (Planner p = Frameworks.getPlanner(config)) { SqlNode n = p.parse(tpchTestQuery); n = p.validate(n); RelNode r = p.rel(n).project(); plan = RelOptUtil.toString(r); } return plan; }