You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@drill.apache.org by ja...@apache.org on 2013/06/06 21:00:46 UTC
[12/18] git commit: Factor JDBC test infrastructure into a fluent API,
JdbcAssert.
Factor JDBC test infrastructure into a fluent API, JdbcAssert.
Signed-off-by: Jacques Nadeau <ja...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/46696a74
Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/46696a74
Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/46696a74
Branch: refs/heads/execwork
Commit: 46696a74cfe422a5fc016eeb3e0b31bc9abaa4ea
Parents: 6a0cf9c
Author: Julian Hyde <ju...@gmail.com>
Authored: Fri Mar 8 14:22:33 2013 -0800
Committer: Jacques Nadeau <ja...@apache.org>
Committed: Thu Jun 6 11:06:42 2013 -0700
----------------------------------------------------------------------
.../org/apache/drill/jdbc/test/JdbcAssert.java | 121 ++++++++++++
.../java/org/apache/drill/jdbc/test/JdbcTest.java | 148 ++++++---------
2 files changed, 177 insertions(+), 92 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/46696a74/sandbox/prototype/sqlparser/src/test/java/org/apache/drill/jdbc/test/JdbcAssert.java
----------------------------------------------------------------------
diff --git a/sandbox/prototype/sqlparser/src/test/java/org/apache/drill/jdbc/test/JdbcAssert.java b/sandbox/prototype/sqlparser/src/test/java/org/apache/drill/jdbc/test/JdbcAssert.java
new file mode 100644
index 0000000..4bd3462
--- /dev/null
+++ b/sandbox/prototype/sqlparser/src/test/java/org/apache/drill/jdbc/test/JdbcAssert.java
@@ -0,0 +1,121 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+package org.apache.drill.jdbc.test;
+
+import com.google.common.base.Function;
+import junit.framework.Assert;
+
+import java.sql.*;
+import java.util.Properties;
+
+/**
+ * Fluent interface for writing JDBC and query-planning tests.
+ */
+public class JdbcAssert {
+ public static One withModel(String model, String schema) {
+ final Properties info = new Properties();
+ info.setProperty("schema", schema);
+ info.setProperty("model", "inline:" + model);
+ return new One(info);
+ }
+
+ static String toString(ResultSet resultSet) throws SQLException {
+ StringBuilder buf = new StringBuilder();
+ while (resultSet.next()) {
+ int n = resultSet.getMetaData().getColumnCount();
+ String sep = "";
+ for (int i = 1; i <= n; i++) {
+ buf.append(sep)
+ .append(resultSet.getMetaData().getColumnLabel(i))
+ .append("=")
+ .append(resultSet.getObject(i));
+ sep = "; ";
+ }
+ buf.append("\n");
+ }
+ return buf.toString();
+ }
+
+ public static class One {
+ private final Properties info;
+ private final ConnectionFactory connectionFactory;
+
+ public One(Properties info) {
+ this.info = info;
+ this.connectionFactory = new ConnectionFactory() {
+ public Connection createConnection() throws Exception {
+ Class.forName("org.apache.drill.jdbc.Driver");
+ return DriverManager.getConnection("jdbc:drill:", One.this.info);
+ }
+ };
+ }
+
+ public Two sql(String sql) {
+ return new Two(connectionFactory, sql);
+ }
+
+ public <T> T withConnection(Function<Connection, T> function)
+ throws Exception {
+ Connection connection = null;
+ try {
+ connection = connectionFactory.createConnection();
+ return function.apply(connection);
+ } finally {
+ if (connection != null) {
+ connection.close();
+ }
+ }
+ }
+ }
+
+ public static class Two {
+ private final ConnectionFactory connectionFactory;
+ private final String sql;
+
+ Two(ConnectionFactory connectionFactory, String sql) {
+ this.connectionFactory = connectionFactory;
+ this.sql = sql;
+ }
+
+ public Two returns(String expected) throws Exception {
+ Connection connection = null;
+ Statement statement = null;
+ try {
+ connection = connectionFactory.createConnection();
+ statement = connection.createStatement();
+ ResultSet resultSet = statement.executeQuery(sql);
+ Assert.assertEquals(expected, JdbcAssert.toString(resultSet));
+ resultSet.close();
+ return this;
+ } finally {
+ if (statement != null) {
+ statement.close();
+ }
+ if (connection != null) {
+ connection.close();
+ }
+ }
+ }
+ }
+
+ private static interface ConnectionFactory {
+ Connection createConnection() throws Exception;
+ }
+}
+
+// End JdbcAssert.java
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/46696a74/sandbox/prototype/sqlparser/src/test/java/org/apache/drill/jdbc/test/JdbcTest.java
----------------------------------------------------------------------
diff --git a/sandbox/prototype/sqlparser/src/test/java/org/apache/drill/jdbc/test/JdbcTest.java b/sandbox/prototype/sqlparser/src/test/java/org/apache/drill/jdbc/test/JdbcTest.java
index 206d6f6..d0d30fd 100644
--- a/sandbox/prototype/sqlparser/src/test/java/org/apache/drill/jdbc/test/JdbcTest.java
+++ b/sandbox/prototype/sqlparser/src/test/java/org/apache/drill/jdbc/test/JdbcTest.java
@@ -17,11 +17,13 @@
******************************************************************************/
package org.apache.drill.jdbc.test;
+import com.google.common.base.Function;
+
import junit.framework.TestCase;
+
import org.apache.drill.jdbc.DrillTable;
import java.sql.*;
-import java.util.Properties;
/** Unit tests for Drill's JDBC driver. */
public class JdbcTest extends TestCase {
@@ -58,126 +60,88 @@ public class JdbcTest extends TestCase {
public void testConnect() throws Exception {
Class.forName("org.apache.drill.jdbc.Driver");
final Connection connection = DriverManager.getConnection(
- "jdbc:drill:schema=DONUTS;tables=EMP,DEPT");
+ "jdbc:drill:schema=DONUTS");
connection.close();
}
/** Load driver, make a connection, prepare a statement. */
- public void _testPrepare() throws Exception {
- Class.forName("org.apache.drill.jdbc.Driver");
- final Connection connection = DriverManager.getConnection(
- "jdbc:drill:schema=DONUTS;tables=EMP,DEPT");
- final Statement statement = connection.prepareStatement(
- "select * from emp where cast(name as varchar(10)) = 'Eric'");
- statement.close();
- connection.close();
+ public void testPrepare() throws Exception {
+ JdbcAssert.withModel(MODEL, "DONUTS")
+ .withConnection(
+ new Function<Connection, Void>() {
+ public Void apply(Connection connection) {
+ try {
+ final Statement statement = connection.prepareStatement(
+ "select * from donuts");
+ statement.close();
+ return null;
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+ });
}
/** Simple query against JSON. */
public void testSelectJson() throws Exception {
- Class.forName("org.apache.drill.jdbc.Driver");
- final Properties info = new Properties();
- info.setProperty("schema", "DONUTS");
- info.setProperty("model", "inline:" + MODEL);
- final Connection connection =
- DriverManager.getConnection("jdbc:drill:", info);
- final Statement statement = connection.createStatement();
- final ResultSet resultSet = statement.executeQuery(
- "select * from donuts");
- assertEquals(
- EXPECTED,
- toString(resultSet));
- resultSet.close();
- statement.close();
- connection.close();
+ JdbcAssert.withModel(MODEL, "DONUTS")
+ .sql("select * from donuts")
+ .returns(EXPECTED);
}
/** Query with project list. No field references yet. */
public void testProjectConstant() throws Exception {
- assertSqlReturns(
- "select 1 + 3 as c from donuts",
- "C=4\n"
- + "C=4\n"
- + "C=4\n"
- + "C=4\n"
- + "C=4\n");
+ JdbcAssert.withModel(MODEL, "DONUTS")
+ .sql("select 1 + 3 as c from donuts")
+ .returns("C=4\n"
+ + "C=4\n"
+ + "C=4\n"
+ + "C=4\n"
+ + "C=4\n");
}
/** Query that projects an element from the map. */
public void testProject() throws Exception {
- assertSqlReturns(
- "select _MAP['donuts']['ppu'] as ppu from donuts",
- "PPU=0.55\n"
- + "PPU=0.69\n"
- + "PPU=0.55\n"
- + "PPU=0.69\n"
- + "PPU=1.0\n");
+ JdbcAssert.withModel(MODEL, "DONUTS")
+ .sql("select _MAP['donuts']['ppu'] as ppu from donuts")
+ .returns("PPU=0.55\n"
+ + "PPU=0.69\n"
+ + "PPU=0.55\n"
+ + "PPU=0.69\n"
+ + "PPU=1.0\n");
}
/** Query with subquery, filter, and projection of one real and one
* nonexistent field from a map field. */
public void testProjectFilterSubquery() throws Exception {
- assertSqlReturns(
- "select d['name'] as name, d['xx'] as xx from (\n"
- + " select _MAP['donuts'] as d from donuts)\n"
- + "where cast(d['ppu'] as double) > 0.6",
- "NAME=Raised; XX=null\n"
- + "NAME=Filled; XX=null\n"
- + "NAME=Apple Fritter; XX=null\n");
+ JdbcAssert.withModel(MODEL, "DONUTS")
+ .sql("select d['name'] as name, d['xx'] as xx from (\n"
+ + " select _MAP['donuts'] as d from donuts)\n"
+ + "where cast(d['ppu'] as double) > 0.6")
+ .returns("NAME=Raised; XX=null\n"
+ + "NAME=Filled; XX=null\n"
+ + "NAME=Apple Fritter; XX=null\n");
}
/** Query that projects one field. (Disabled; uses sugared syntax.) */
public void _testProjectNestedFieldSugared() throws Exception {
- assertSqlReturns(
- "select donuts.ppu from donuts",
- "C=4\n"
- + "C=4\n"
- + "C=4\n"
- + "C=4\n"
- + "C=4\n");
+ JdbcAssert.withModel(MODEL, "DONUTS")
+ .sql("select donuts.ppu from donuts")
+ .returns("C=4\n"
+ + "C=4\n"
+ + "C=4\n"
+ + "C=4\n"
+ + "C=4\n");
}
/** Query with filter. No field references yet. */
public void testFilterConstant() throws Exception {
- assertSqlReturns(
- "select * from donuts where 3 > 4",
- "");
- assertSqlReturns(
- "select * from donuts where 3 < 4",
- EXPECTED);
- }
-
- private void assertSqlReturns(String sql, String expected)
- throws ClassNotFoundException, SQLException {
- Class.forName("org.apache.drill.jdbc.Driver");
- final Properties info = new Properties();
- info.setProperty("schema", "DONUTS");
- info.setProperty("model", "inline:" + MODEL);
- final Connection connection =
- DriverManager.getConnection("jdbc:drill:", info);
- try (Statement statement = connection.createStatement();
- ResultSet resultSet = statement.executeQuery(sql)) {
- assertEquals(expected, toString(resultSet));
- } finally {
- connection.close();
- }
- }
-
- static String toString(ResultSet resultSet) throws SQLException {
- StringBuilder buf = new StringBuilder();
- while (resultSet.next()) {
- int n = resultSet.getMetaData().getColumnCount();
- String sep = "";
- for (int i = 1; i <= n; i++) {
- buf.append(sep)
- .append(resultSet.getMetaData().getColumnLabel(i))
- .append("=")
- .append(resultSet.getObject(i));
- sep = "; ";
- }
- buf.append("\n");
- }
- return buf.toString();
+ JdbcAssert.withModel(MODEL, "DONUTS")
+ .sql("select * from donuts where 3 > 4")
+ .returns("");
+ JdbcAssert.withModel(MODEL, "DONUTS")
+ .sql("select * from donuts where 3 < 4")
+ .returns(EXPECTED);
}
}