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

Reply via email to