Repository: calcite Updated Branches: refs/heads/master 3c6b5ec75 -> ca858dd72
Test case (disabled) for [CALCITE-2441] Relational algebra doesn't work with SQL views (Andrei Sereda) RelBuilder doesn't work with SQL views. expandView() method is not implemented and fails with UnsupportedOperationException. Close apache/calcite#774 Project: http://git-wip-us.apache.org/repos/asf/calcite/repo Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/eb496c70 Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/eb496c70 Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/eb496c70 Branch: refs/heads/master Commit: eb496c702cb2b8998836d02cde28a53861fc39aa Parents: 3c6b5ec Author: Andrei Sereda <[email protected]> Authored: Fri Aug 3 00:39:25 2018 -0400 Committer: Julian Hyde <[email protected]> Committed: Fri Aug 10 10:05:41 2018 -0700 ---------------------------------------------------------------------- .../org/apache/calcite/test/RelBuilderTest.java | 50 ++++++++++++++++++++ 1 file changed, 50 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/calcite/blob/eb496c70/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java b/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java index cb87d19..b6ae845 100644 --- a/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java +++ b/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java @@ -16,6 +16,7 @@ */ package org.apache.calcite.test; +import org.apache.calcite.jdbc.CalciteConnection; import org.apache.calcite.plan.RelTraitDef; import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.core.AggregateCall; @@ -33,13 +34,17 @@ import org.apache.calcite.rex.RexInputRef; import org.apache.calcite.rex.RexNode; import org.apache.calcite.runtime.CalciteException; import org.apache.calcite.schema.SchemaPlus; +import org.apache.calcite.schema.impl.ViewTable; +import org.apache.calcite.schema.impl.ViewTableMacro; import org.apache.calcite.sql.SqlMatchRecognize; import org.apache.calcite.sql.fun.SqlStdOperatorTable; import org.apache.calcite.sql.parser.SqlParser; import org.apache.calcite.sql.type.SqlTypeName; +import org.apache.calcite.tools.FrameworkConfig; import org.apache.calcite.tools.Frameworks; import org.apache.calcite.tools.Programs; import org.apache.calcite.tools.RelBuilder; +import org.apache.calcite.tools.RelRunner; import org.apache.calcite.tools.RelRunners; import org.apache.calcite.util.Holder; import org.apache.calcite.util.ImmutableBitSet; @@ -50,11 +55,17 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; +import org.junit.Ignore; import org.junit.Test; +import java.sql.Connection; +import java.sql.DriverManager; import java.sql.PreparedStatement; +import java.sql.ResultSet; import java.util.Arrays; +import java.util.Collections; import java.util.List; +import java.util.Locale; import java.util.TreeSet; import static org.apache.calcite.test.Matchers.hasTree; @@ -62,6 +73,7 @@ import static org.apache.calcite.test.Matchers.hasTree; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; /** @@ -2085,6 +2097,44 @@ public class RelBuilderTest { + " LogicalTableScan(table=[[scott, EMP]])\n"; assertThat(root, hasTree(expected)); } + + /** + * Ensures that relational algebra ({@link RelBuilder}) works with SQL views. + * + * <p>This test currently fails (thus ignored). + */ + @Ignore("https://issues.apache.org/jira/browse/CALCITE-2441") + @Test public void testExpandViewInRelBuilder() throws Exception { + final Connection connection = DriverManager.getConnection("jdbc:calcite:"); + final SchemaPlus root = connection.unwrap(CalciteConnection.class).getRootSchema(); + CalciteAssert.SchemaSpec spec = CalciteAssert.SchemaSpec.SCOTT; + CalciteAssert.addSchema(root, spec); + final String viewSql = + String.format(Locale.ROOT, "select * from \"%s\".\"%s\" where 1=1", + spec.schemaName, "EMP"); + + // create view + ViewTableMacro macro = ViewTable.viewMacro(root, viewSql, + Collections.singletonList("test"), Arrays.asList("test", "view"), false); + + // register view (in root schema) + root.add("MYVIEW", macro); + + FrameworkConfig config = Frameworks.newConfigBuilder().defaultSchema(root).build(); + RelNode node = RelBuilder.create(config).scan("MYVIEW").build(); + + int count = 0; + try (PreparedStatement statement = + connection.unwrap(RelRunner.class).prepare(node); + ResultSet resultSet = statement.executeQuery()) { + while (resultSet.next()) { + count++; + } + } + + assertTrue(count > 1); + } + } // End RelBuilderTest.java
