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