osdir.com


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RelBuilder API on the top of a view


Hello,

I was wondering if one can use relational algebra
<https://calcite.apache.org/docs/algebra.html> API on the top of existing
view (or only tables are supported) ? Below is an example which fails for
me :

// suppose one creates a view as follows
CREATE VIEW view AS select * from elastic.docs;

@Test
public void sql() {
  // works when using SQL
  CalciteAssert.that()
          .with(newConnectionFactory())
          .query("select * from view")
      .returnsCount(1);
}


/**
 * Example when querying calcite view using {@link RelBuilder} api fails.
 * It is working fine when using SQL or when using RelBuilder on a
table (not view).
 */
@Test
public void relBuilder() throws Exception {
  Connection connection = newConnectionFactory().createConnection();
  SchemaPlus root = connection.unwrap(CalciteConnection.class).getRootSchema();
  FrameworkConfig config =
Frameworks.newConfigBuilder().defaultSchema(root).build();
  // querying a view using RelBuilder fails
  RelBuilder builder = RelBuilder.create(config).scan("VIEW");
  // querying directly a table works
  // RelBuilder builder = RelBuilder.create(config).scan("elastic", "docs");

  int count = 0;
  try (PreparedStatement stm =
connection.unwrap(RelRunner.class).prepare(builder.build());
       ResultSet rset = stm.executeQuery() ) {
    while (rset.next()) {
      count++;
    }
  }

  assertEquals(1, count);
}

Exception

Caused by: java.lang.UnsupportedOperationException
	at org.apache.calcite.plan.RelOptUtil$4.expandView(RelOptUtil.java:2805)
	at org.apache.calcite.schema.impl.ViewTable.expandView(ViewTable.java:124)
	... 39 more


Anything I'm doing wrong ?

Many thanks,
Andrei.