You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2019/10/17 08:13:25 UTC

[calcite] 01/02: Refactor InterpreterTest

This is an automated email from the ASF dual-hosted git repository.

jhyde pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/calcite.git

commit bfb716aefbb2673eaa3d91a7effdb7cc905546a2
Author: Julian Hyde <jh...@apache.org>
AuthorDate: Wed Oct 16 15:51:13 2019 -0700

    Refactor InterpreterTest
---
 .../org/apache/calcite/test/InterpreterTest.java   | 223 +++++++++------------
 1 file changed, 90 insertions(+), 133 deletions(-)

diff --git a/core/src/test/java/org/apache/calcite/test/InterpreterTest.java b/core/src/test/java/org/apache/calcite/test/InterpreterTest.java
index 7f1025d..de284dd 100644
--- a/core/src/test/java/org/apache/calcite/test/InterpreterTest.java
+++ b/core/src/test/java/org/apache/calcite/test/InterpreterTest.java
@@ -21,6 +21,7 @@ import org.apache.calcite.adapter.java.JavaTypeFactory;
 import org.apache.calcite.interpreter.Interpreter;
 import org.apache.calcite.linq4j.QueryProvider;
 import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.RelRoot;
 import org.apache.calcite.schema.SchemaPlus;
 import org.apache.calcite.sql.SqlNode;
 import org.apache.calcite.sql.parser.SqlParser;
@@ -74,6 +75,56 @@ public class InterpreterTest {
     }
   }
 
+  /** Fluent class that contains information necessary to run a test. */
+  private static class Sql {
+    private final String sql;
+    private final MyDataContext dataContext;
+    private final Planner planner;
+    private final boolean project;
+
+    Sql(String sql, MyDataContext dataContext, Planner planner,
+        boolean project) {
+      this.sql = sql;
+      this.dataContext = dataContext;
+      this.planner = planner;
+      this.project = project;
+    }
+
+    @SuppressWarnings("SameParameterValue")
+    Sql withProject(boolean project) {
+      return new Sql(sql, dataContext, planner, project);
+    }
+
+    /** Interprets the sql and checks result with specified rows, ordered. */
+    @SuppressWarnings("UnusedReturnValue")
+    Sql returnsRows(String... rows) throws Exception {
+      return returnsRows(false, rows);
+    }
+
+    /** Interprets the sql and checks result with specified rows, unordered. */
+    @SuppressWarnings("UnusedReturnValue")
+    Sql returnsRowsUnordered(String... rows) throws Exception {
+      return returnsRows(true, rows);
+    }
+
+    /** Interprets the sql and checks result with specified rows. */
+    private Sql returnsRows(boolean unordered, String[] rows)
+        throws Exception {
+      SqlNode parse = planner.parse(sql);
+      SqlNode validate = planner.validate(parse);
+      final RelRoot root = planner.rel(validate);
+      RelNode convert = project ? root.project() : root.rel;
+      final Interpreter interpreter = new Interpreter(dataContext, convert);
+      assertRows(interpreter, unordered, rows);
+      return this;
+    }
+  }
+
+  /** Creates a {@link Sql}. */
+  private Sql sql(String sql) {
+    return new Sql(sql, dataContext, planner, false);
+  }
+
   @Before public void setUp() {
     rootSchema = Frameworks.createRootSchema(true);
     final FrameworkConfig config = Frameworks.newConfigBuilder()
@@ -93,16 +144,10 @@ public class InterpreterTest {
 
   /** Tests executing a simple plan using an interpreter. */
   @Test public void testInterpretProjectFilterValues() throws Exception {
-    SqlNode parse =
-        planner.parse("select y, x\n"
-            + "from (values (1, 'a'), (2, 'b'), (3, 'c')) as t(x, y)\n"
-            + "where x > 1");
-
-    SqlNode validate = planner.validate(parse);
-    RelNode convert = planner.rel(validate).rel;
-
-    final Interpreter interpreter = new Interpreter(dataContext, convert);
-    assertRows(interpreter, "[b, 2]", "[c, 3]");
+    final String sql = "select y, x\n"
+        + "from (values (1, 'a'), (2, 'b'), (3, 'c')) as t(x, y)\n"
+        + "where x > 1";
+    sql(sql).returnsRows("[b, 2]", "[c, 3]");
   }
 
   /** Tests a plan where the sort field is projected away. */
@@ -110,31 +155,12 @@ public class InterpreterTest {
     final String sql = "select y\n"
         + "from (values (1, 'a'), (2, 'b'), (3, 'c')) as t(x, y)\n"
         + "order by -x";
-    SqlNode parse = planner.parse(sql);
-    SqlNode validate = planner.validate(parse);
-    RelNode convert = planner.rel(validate).project();
-
-    final Interpreter interpreter = new Interpreter(dataContext, convert);
-    assertRows(interpreter, "[c]", "[b]", "[a]");
+    sql(sql).withProject(true).returnsRows("[c]", "[b]", "[a]");
   }
 
   @Test public void testInterpretMultiset() throws Exception {
     final String sql = "select multiset['a', 'b', 'c']";
-    SqlNode parse = planner.parse(sql);
-    SqlNode validate = planner.validate(parse);
-    RelNode convert = planner.rel(validate).project();
-
-    final Interpreter interpreter = new Interpreter(dataContext, convert);
-    assertRows(interpreter, "[[a, b, c]]");
-  }
-
-  private static void assertRows(Interpreter interpreter, String... rows) {
-    assertRows(interpreter, false, rows);
-  }
-
-  private static void assertRowsUnordered(Interpreter interpreter,
-      String... rows) {
-    assertRows(interpreter, true, rows);
+    sql(sql).withProject(true).returnsRows("[[a, b, c]]");
   }
 
   private static void assertRows(Interpreter interpreter,
@@ -153,91 +179,44 @@ public class InterpreterTest {
 
   /** Tests executing a simple plan using an interpreter. */
   @Test public void testInterpretTable() throws Exception {
-    SqlNode parse =
-        planner.parse("select * from \"hr\".\"emps\" order by \"empid\"");
-
-    SqlNode validate = planner.validate(parse);
-    RelNode convert = planner.rel(validate).rel;
-
-    final Interpreter interpreter = new Interpreter(dataContext, convert);
-    assertRows(interpreter,
-        "[100, 10, Bill, 10000.0, 1000]",
-        "[110, 10, Theodore, 11500.0, 250]",
-        "[150, 10, Sebastian, 7000.0, null]",
-        "[200, 20, Eric, 8000.0, 500]");
+    sql("select * from \"hr\".\"emps\" order by \"empid\"")
+        .returnsRows("[100, 10, Bill, 10000.0, 1000]",
+            "[110, 10, Theodore, 11500.0, 250]",
+            "[150, 10, Sebastian, 7000.0, null]",
+            "[200, 20, Eric, 8000.0, 500]");
   }
 
   /** Tests executing a plan on a
    * {@link org.apache.calcite.schema.ScannableTable} using an interpreter. */
   @Test public void testInterpretScannableTable() throws Exception {
     rootSchema.add("beatles", new ScannableTableTest.BeatlesTable());
-    SqlNode parse =
-        planner.parse("select * from \"beatles\" order by \"i\"");
-
-    SqlNode validate = planner.validate(parse);
-    RelNode convert = planner.rel(validate).rel;
-
-    final Interpreter interpreter = new Interpreter(dataContext, convert);
-    assertRows(interpreter,
-        "[4, John]",
-        "[4, Paul]",
-        "[5, Ringo]",
-        "[6, George]");
+    sql("select * from \"beatles\" order by \"i\"")
+        .returnsRows("[4, John]", "[4, Paul]", "[5, Ringo]", "[6, George]");
   }
 
   @Test public void testAggregateCount() throws Exception {
     rootSchema.add("beatles", new ScannableTableTest.BeatlesTable());
-    SqlNode parse =
-        planner.parse("select  count(*) from \"beatles\"");
-
-    SqlNode validate = planner.validate(parse);
-    RelNode convert = planner.rel(validate).rel;
-
-    final Interpreter interpreter = new Interpreter(dataContext, convert);
-    assertRows(interpreter,
-        "[4]");
+    sql("select count(*) from \"beatles\"")
+        .returnsRows("[4]");
   }
 
   @Test public void testAggregateMax() throws Exception {
     rootSchema.add("beatles", new ScannableTableTest.BeatlesTable());
-    SqlNode parse =
-        planner.parse("select  max(\"i\") from \"beatles\"");
-
-    SqlNode validate = planner.validate(parse);
-    RelNode convert = planner.rel(validate).rel;
-
-    final Interpreter interpreter = new Interpreter(dataContext, convert);
-    assertRows(interpreter,
-        "[6]");
+    sql("select max(\"i\") from \"beatles\"")
+        .returnsRows("[6]");
   }
 
   @Test public void testAggregateMin() throws Exception {
     rootSchema.add("beatles", new ScannableTableTest.BeatlesTable());
-    SqlNode parse =
-        planner.parse("select  min(\"i\") from \"beatles\"");
-
-    SqlNode validate = planner.validate(parse);
-    RelNode convert = planner.rel(validate).rel;
-
-    final Interpreter interpreter = new Interpreter(dataContext, convert);
-    assertRows(interpreter,
-        "[4]");
+    sql("select min(\"i\") from \"beatles\"")
+        .returnsRows("[4]");
   }
 
   @Test public void testAggregateGroup() throws Exception {
     rootSchema.add("beatles", new ScannableTableTest.BeatlesTable());
-    SqlNode parse =
-        planner.parse("select \"j\", count(*) from \"beatles\" group by \"j\"");
-
-    SqlNode validate = planner.validate(parse);
-    RelNode convert = planner.rel(validate).rel;
-
-    final Interpreter interpreter = new Interpreter(dataContext, convert);
-    assertRowsUnordered(interpreter,
-        "[George, 1]",
-        "[Paul, 1]",
-        "[John, 1]",
-        "[Ringo, 1]");
+    sql("select \"j\", count(*) from \"beatles\" group by \"j\"")
+        .returnsRowsUnordered("[George, 1]", "[Paul, 1]", "[John, 1]",
+            "[Ringo, 1]");
   }
 
   @Test public void testAggregateGroupFilter() throws Exception {
@@ -245,62 +224,40 @@ public class InterpreterTest {
     final String sql = "select \"j\",\n"
         + "  count(*) filter (where char_length(\"j\") > 4)\n"
         + "from \"beatles\" group by \"j\"";
-    SqlNode parse = planner.parse(sql);
-    SqlNode validate = planner.validate(parse);
-    RelNode convert = planner.rel(validate).rel;
-
-    final Interpreter interpreter = new Interpreter(dataContext, convert);
-    assertRowsUnordered(interpreter,
-        "[George, 1]",
-        "[Paul, 0]",
-        "[John, 0]",
-        "[Ringo, 1]");
+    sql(sql)
+        .returnsRowsUnordered("[George, 1]",
+            "[Paul, 0]",
+            "[John, 0]",
+            "[Ringo, 1]");
   }
 
   /** Tests executing a plan on a single-column
    * {@link org.apache.calcite.schema.ScannableTable} using an interpreter. */
   @Test public void testInterpretSimpleScannableTable() throws Exception {
     rootSchema.add("simple", new ScannableTableTest.SimpleTable());
-    SqlNode parse =
-        planner.parse("select * from \"simple\" limit 2");
-
-    SqlNode validate = planner.validate(parse);
-    RelNode convert = planner.rel(validate).rel;
-
-    final Interpreter interpreter = new Interpreter(dataContext, convert);
-    assertRows(interpreter, "[0]", "[10]");
+    sql("select * from \"simple\" limit 2")
+        .returnsRows("[0]", "[10]");
   }
 
   /** Tests executing a UNION ALL query using an interpreter. */
   @Test public void testInterpretUnionAll() throws Exception {
     rootSchema.add("simple", new ScannableTableTest.SimpleTable());
-    SqlNode parse =
-        planner.parse("select * from \"simple\"\n"
-            + "union all\n"
-            + "select * from \"simple\"\n");
-
-    SqlNode validate = planner.validate(parse);
-    RelNode convert = planner.rel(validate).rel;
-
-    final Interpreter interpreter = new Interpreter(dataContext, convert);
-    assertRows(interpreter,
-        "[0]", "[10]", "[20]", "[30]", "[0]", "[10]", "[20]", "[30]");
+    final String sql = "select * from \"simple\"\n"
+        + "union all\n"
+        + "select * from \"simple\"";
+    sql(sql).returnsRowsUnordered("[0]", "[10]", "[20]", "[30]", "[0]", "[10]",
+        "[20]", "[30]");
   }
 
   /** Tests executing a UNION query using an interpreter. */
   @Test public void testInterpretUnion() throws Exception {
     rootSchema.add("simple", new ScannableTableTest.SimpleTable());
-    SqlNode parse =
-        planner.parse("select * from \"simple\"\n"
-            + "union\n"
-            + "select * from \"simple\"\n");
-
-    SqlNode validate = planner.validate(parse);
-    RelNode convert = planner.rel(validate).rel;
-
-    final Interpreter interpreter = new Interpreter(dataContext, convert);
-    assertRows(interpreter, "[0]", "[10]", "[20]", "[30]");
+    final String sql = "select * from \"simple\"\n"
+        + "union\n"
+        + "select * from \"simple\"";
+    sql(sql).returnsRowsUnordered("[0]", "[10]", "[20]", "[30]");
   }
+
 }
 
 // End InterpreterTest.java