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.