Search in sources :

Example 21 with ReflectiveSchema

use of org.apache.calcite.adapter.java.ReflectiveSchema in project calcite by apache.

the class PlannerTest method testOrderByNonSelectColumn.

/**
 * Test case for
 * <a href="https://issues.apache.org/jira/browse/CALCITE-569">[CALCITE-569]
 * ArrayIndexOutOfBoundsException when deducing collation</a>.
 */
@Test
public void testOrderByNonSelectColumn() throws Exception {
    final SchemaPlus schema = Frameworks.createRootSchema(true).add("tpch", new ReflectiveSchema(new TpchSchema()));
    String query = "select t.psPartkey from \n" + "(select ps.psPartkey from `tpch`.`partsupp` ps \n" + "order by ps.psPartkey, ps.psSupplyCost) t \n" + "order by t.psPartkey";
    List<RelTraitDef> traitDefs = new ArrayList<>();
    traitDefs.add(ConventionTraitDef.INSTANCE);
    traitDefs.add(RelCollationTraitDef.INSTANCE);
    final SqlParser.Config parserConfig = SqlParser.configBuilder().setLex(Lex.MYSQL).build();
    FrameworkConfig config = Frameworks.newConfigBuilder().parserConfig(parserConfig).defaultSchema(schema).traitDefs(traitDefs).programs(Programs.ofRules(Programs.RULE_SET)).build();
    String plan;
    try (Planner p = Frameworks.getPlanner(config)) {
        SqlNode n = p.parse(query);
        n = p.validate(n);
        RelNode r = p.rel(n).project();
        plan = RelOptUtil.toString(r);
        plan = Util.toLinux(plan);
    }
    assertThat(plan, equalTo("LogicalSort(sort0=[$0], dir0=[ASC])\n" + "  LogicalProject(psPartkey=[$0])\n" + "    LogicalProject(psPartkey=[$0])\n" + "      LogicalSort(sort0=[$0], sort1=[$1], dir0=[ASC], dir1=[ASC])\n" + "        LogicalProject(psPartkey=[$0], psSupplyCost=[$1])\n" + "          EnumerableTableScan(table=[[tpch, partsupp]])\n"));
}
Also used : SchemaPlus(org.apache.calcite.schema.SchemaPlus) ArrayList(java.util.ArrayList) SqlParser(org.apache.calcite.sql.parser.SqlParser) ReflectiveSchema(org.apache.calcite.adapter.java.ReflectiveSchema) CoreMatchers.containsString(org.hamcrest.CoreMatchers.containsString) RelNode(org.apache.calcite.rel.RelNode) RelTraitDef(org.apache.calcite.plan.RelTraitDef) RelOptPlanner(org.apache.calcite.plan.RelOptPlanner) SqlNode(org.apache.calcite.sql.SqlNode) Test(org.junit.Test)

Example 22 with ReflectiveSchema

use of org.apache.calcite.adapter.java.ReflectiveSchema in project calcite by apache.

the class RelWriterTest method testWriter.

/**
 * Unit test for {@link org.apache.calcite.rel.externalize.RelJsonWriter} on
 * a simple tree of relational expressions, consisting of a table, a filter
 * and an aggregate node.
 */
@Test
public void testWriter() {
    String s = Frameworks.withPlanner(new Frameworks.PlannerAction<String>() {

        public String apply(RelOptCluster cluster, RelOptSchema relOptSchema, SchemaPlus rootSchema) {
            rootSchema.add("hr", new ReflectiveSchema(new JdbcTest.HrSchema()));
            LogicalTableScan scan = LogicalTableScan.create(cluster, relOptSchema.getTableForMember(Arrays.asList("hr", "emps")));
            final RexBuilder rexBuilder = cluster.getRexBuilder();
            LogicalFilter filter = LogicalFilter.create(scan, rexBuilder.makeCall(SqlStdOperatorTable.EQUALS, rexBuilder.makeFieldAccess(rexBuilder.makeRangeReference(scan), "deptno", true), rexBuilder.makeExactLiteral(BigDecimal.TEN)));
            final RelJsonWriter writer = new RelJsonWriter();
            final RelDataType bigIntType = cluster.getTypeFactory().createSqlType(SqlTypeName.BIGINT);
            LogicalAggregate aggregate = LogicalAggregate.create(filter, ImmutableBitSet.of(0), null, ImmutableList.of(AggregateCall.create(SqlStdOperatorTable.COUNT, true, false, ImmutableList.of(1), -1, bigIntType, "c"), AggregateCall.create(SqlStdOperatorTable.COUNT, false, false, ImmutableList.<Integer>of(), -1, bigIntType, "d")));
            aggregate.explain(writer);
            return writer.asString();
        }
    });
    assertThat(s, is(XX));
}
Also used : LogicalFilter(org.apache.calcite.rel.logical.LogicalFilter) SchemaPlus(org.apache.calcite.schema.SchemaPlus) ReflectiveSchema(org.apache.calcite.adapter.java.ReflectiveSchema) RelDataType(org.apache.calcite.rel.type.RelDataType) RelJsonWriter(org.apache.calcite.rel.externalize.RelJsonWriter) LogicalTableScan(org.apache.calcite.rel.logical.LogicalTableScan) LogicalAggregate(org.apache.calcite.rel.logical.LogicalAggregate) JdbcTest(org.apache.calcite.test.JdbcTest) Frameworks(org.apache.calcite.tools.Frameworks) RexBuilder(org.apache.calcite.rex.RexBuilder) JdbcTest(org.apache.calcite.test.JdbcTest) Test(org.junit.Test)

Aggregations

ReflectiveSchema (org.apache.calcite.adapter.java.ReflectiveSchema)22 SchemaPlus (org.apache.calcite.schema.SchemaPlus)21 CalciteConnection (org.apache.calcite.jdbc.CalciteConnection)16 Test (org.junit.Test)16 ResultSet (java.sql.ResultSet)13 Connection (java.sql.Connection)11 Statement (java.sql.Statement)11 PreparedStatement (java.sql.PreparedStatement)7 Properties (java.util.Properties)7 AbstractSchema (org.apache.calcite.schema.impl.AbstractSchema)7 CoreMatchers.containsString (org.hamcrest.CoreMatchers.containsString)6 AvaticaStatement (org.apache.calcite.avatica.AvaticaStatement)5 AvaticaConnection (org.apache.calcite.avatica.AvaticaConnection)4 Driver (org.apache.calcite.jdbc.Driver)3 RelNode (org.apache.calcite.rel.RelNode)3 SQLException (java.sql.SQLException)2 ArrayList (java.util.ArrayList)2 RelOptPlanner (org.apache.calcite.plan.RelOptPlanner)2 SqlNode (org.apache.calcite.sql.SqlNode)2 JdbcTest (org.apache.calcite.test.JdbcTest)2