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 2018/06/29 18:41:58 UTC
[2/8] calcite git commit: [CALCITE-2365] Upgrade avatica to 1.12
[CALCITE-2365] Upgrade avatica to 1.12
Project: http://git-wip-us.apache.org/repos/asf/calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/b36a1072
Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/b36a1072
Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/b36a1072
Branch: refs/heads/master
Commit: b36a10725b2569d8583ea66aea9dcceb9e0341ac
Parents: f258706
Author: Julian Hyde <jh...@apache.org>
Authored: Thu Jun 28 17:56:11 2018 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Thu Jun 28 18:27:18 2018 -0700
----------------------------------------------------------------------
.../calcite/jdbc/CalciteConnectionImpl.java | 14 ++-
.../calcite/jdbc/CalciteJdbc41Factory.java | 3 +-
.../apache/calcite/jdbc/CalciteMetaImpl.java | 12 +-
.../calcite/jdbc/CalcitePreparedStatement.java | 2 +-
.../apache/calcite/jdbc/CalciteResultSet.java | 6 +-
.../org/apache/calcite/jdbc/MetadataSchema.java | 15 ++-
.../rel/rules/AggregateStarTableRule.java | 16 ++-
.../calcite/jdbc/CalciteRemoteDriverTest.java | 108 +++++++++--------
.../org/apache/calcite/test/CalciteAssert.java | 115 ++++++++-----------
.../java/org/apache/calcite/test/JdbcTest.java | 3 +-
core/src/test/resources/sql/misc.iq | 6 +-
pom.xml | 2 +-
12 files changed, 168 insertions(+), 134 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/b36a1072/core/src/main/java/org/apache/calcite/jdbc/CalciteConnectionImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/jdbc/CalciteConnectionImpl.java b/core/src/main/java/org/apache/calcite/jdbc/CalciteConnectionImpl.java
index 4e19554..ec5d610 100644
--- a/core/src/main/java/org/apache/calcite/jdbc/CalciteConnectionImpl.java
+++ b/core/src/main/java/org/apache/calcite/jdbc/CalciteConnectionImpl.java
@@ -447,7 +447,12 @@ abstract class CalciteConnectionImpl
private SqlAdvisor getSqlAdvisor() {
final CalciteConnectionImpl con = (CalciteConnectionImpl) queryProvider;
- final String schemaName = con.getSchema();
+ final String schemaName;
+ try {
+ schemaName = con.getSchema();
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
final List<String> schemaPath =
schemaName == null
? ImmutableList.<String>of()
@@ -500,7 +505,12 @@ abstract class CalciteConnectionImpl
}
public List<String> getDefaultSchemaPath() {
- final String schemaName = connection.getSchema();
+ final String schemaName;
+ try {
+ schemaName = connection.getSchema();
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
return schemaName == null
? ImmutableList.<String>of()
: ImmutableList.of(schemaName);
http://git-wip-us.apache.org/repos/asf/calcite/blob/b36a1072/core/src/main/java/org/apache/calcite/jdbc/CalciteJdbc41Factory.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/jdbc/CalciteJdbc41Factory.java b/core/src/main/java/org/apache/calcite/jdbc/CalciteJdbc41Factory.java
index 034563a..7aedae4 100644
--- a/core/src/main/java/org/apache/calcite/jdbc/CalciteJdbc41Factory.java
+++ b/core/src/main/java/org/apache/calcite/jdbc/CalciteJdbc41Factory.java
@@ -92,7 +92,8 @@ public class CalciteJdbc41Factory extends CalciteFactory {
}
public CalciteResultSet newResultSet(AvaticaStatement statement, QueryState state,
- Meta.Signature signature, TimeZone timeZone, Meta.Frame firstFrame) {
+ Meta.Signature signature, TimeZone timeZone, Meta.Frame firstFrame)
+ throws SQLException {
final ResultSetMetaData metaData =
newResultSetMetaData(statement, signature);
final CalcitePrepare.CalciteSignature calciteSignature =
http://git-wip-us.apache.org/repos/asf/calcite/blob/b36a1072/core/src/main/java/org/apache/calcite/jdbc/CalciteMetaImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/jdbc/CalciteMetaImpl.java b/core/src/main/java/org/apache/calcite/jdbc/CalciteMetaImpl.java
index 12d6296..837aece 100644
--- a/core/src/main/java/org/apache/calcite/jdbc/CalciteMetaImpl.java
+++ b/core/src/main/java/org/apache/calcite/jdbc/CalciteMetaImpl.java
@@ -372,8 +372,14 @@ public class CalciteMetaImpl extends MetaImpl {
}
Enumerable<MetaCatalog> catalogs() {
+ final String catalog;
+ try {
+ catalog = connection.getCatalog();
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
return Linq4j.asEnumerable(
- ImmutableList.of(new MetaCatalog(connection.getCatalog())));
+ ImmutableList.of(new MetaCatalog(catalog)));
}
Enumerable<MetaTableType> tableTypes() {
@@ -382,7 +388,7 @@ public class CalciteMetaImpl extends MetaImpl {
new MetaTableType("TABLE"), new MetaTableType("VIEW")));
}
- Enumerable<MetaSchema> schemas(String catalog) {
+ Enumerable<MetaSchema> schemas(final String catalog) {
return Linq4j.asEnumerable(
getConnection().rootSchema.getSubSchemaMap().values())
.select(
@@ -390,7 +396,7 @@ public class CalciteMetaImpl extends MetaImpl {
public MetaSchema apply(CalciteSchema calciteSchema) {
return new CalciteMetaSchema(
calciteSchema,
- connection.getCatalog(),
+ catalog,
calciteSchema.getName());
}
})
http://git-wip-us.apache.org/repos/asf/calcite/blob/b36a1072/core/src/main/java/org/apache/calcite/jdbc/CalcitePreparedStatement.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/jdbc/CalcitePreparedStatement.java b/core/src/main/java/org/apache/calcite/jdbc/CalcitePreparedStatement.java
index dbbc351..50e4036 100644
--- a/core/src/main/java/org/apache/calcite/jdbc/CalcitePreparedStatement.java
+++ b/core/src/main/java/org/apache/calcite/jdbc/CalcitePreparedStatement.java
@@ -48,7 +48,7 @@ abstract class CalcitePreparedStatement extends AvaticaPreparedStatement {
resultSetHoldability);
}
- @Override public CalciteConnectionImpl getConnection() {
+ @Override public CalciteConnectionImpl getConnection() throws SQLException {
return (CalciteConnectionImpl) super.getConnection();
}
}
http://git-wip-us.apache.org/repos/asf/calcite/blob/b36a1072/core/src/main/java/org/apache/calcite/jdbc/CalciteResultSet.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/jdbc/CalciteResultSet.java b/core/src/main/java/org/apache/calcite/jdbc/CalciteResultSet.java
index bf7957f..a8e2ecf 100644
--- a/core/src/main/java/org/apache/calcite/jdbc/CalciteResultSet.java
+++ b/core/src/main/java/org/apache/calcite/jdbc/CalciteResultSet.java
@@ -47,7 +47,7 @@ public class CalciteResultSet extends AvaticaResultSet {
CalciteResultSet(AvaticaStatement statement,
CalcitePrepare.CalciteSignature calciteSignature,
ResultSetMetaData resultSetMetaData, TimeZone timeZone,
- Meta.Frame firstFrame) {
+ Meta.Frame firstFrame) throws SQLException {
super(statement, null, calciteSignature, resultSetMetaData, timeZone, firstFrame);
}
@@ -69,7 +69,7 @@ public class CalciteResultSet extends AvaticaResultSet {
}
@Override public ResultSet create(ColumnMetaData.AvaticaType elementType,
- Iterable<Object> iterable) {
+ Iterable<Object> iterable) throws SQLException {
final List<ColumnMetaData> columnMetaDataList;
if (elementType instanceof ColumnMetaData.StructType) {
columnMetaDataList = ((ColumnMetaData.StructType) elementType).columns;
@@ -111,7 +111,7 @@ public class CalciteResultSet extends AvaticaResultSet {
}
// do not make public
- CalciteConnectionImpl getCalciteConnection() {
+ CalciteConnectionImpl getCalciteConnection() throws SQLException {
return (CalciteConnectionImpl) statement.getConnection();
}
}
http://git-wip-us.apache.org/repos/asf/calcite/blob/b36a1072/core/src/main/java/org/apache/calcite/jdbc/MetadataSchema.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/jdbc/MetadataSchema.java b/core/src/main/java/org/apache/calcite/jdbc/MetadataSchema.java
index b896f18..5fb2e89 100644
--- a/core/src/main/java/org/apache/calcite/jdbc/MetadataSchema.java
+++ b/core/src/main/java/org/apache/calcite/jdbc/MetadataSchema.java
@@ -25,6 +25,7 @@ import org.apache.calcite.schema.impl.AbstractSchema;
import com.google.common.collect.ImmutableMap;
+import java.sql.SQLException;
import java.util.Map;
import static org.apache.calcite.jdbc.CalciteMetaImpl.MetaColumn;
@@ -38,7 +39,12 @@ class MetadataSchema extends AbstractSchema {
new CalciteMetaImpl.MetadataTable<MetaColumn>(MetaColumn.class) {
public Enumerator<MetaColumn> enumerator(
final CalciteMetaImpl meta) {
- final String catalog = meta.getConnection().getCatalog();
+ final String catalog;
+ try {
+ catalog = meta.getConnection().getCatalog();
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
return meta.tables(catalog).selectMany(
new Function1<MetaTable, Enumerable<MetaColumn>>() {
public Enumerable<MetaColumn> apply(MetaTable table) {
@@ -50,7 +56,12 @@ class MetadataSchema extends AbstractSchema {
"TABLES",
new CalciteMetaImpl.MetadataTable<MetaTable>(MetaTable.class) {
public Enumerator<MetaTable> enumerator(CalciteMetaImpl meta) {
- final String catalog = meta.getConnection().getCatalog();
+ final String catalog;
+ try {
+ catalog = meta.getConnection().getCatalog();
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
return meta.tables(catalog).enumerator();
}
});
http://git-wip-us.apache.org/repos/asf/calcite/blob/b36a1072/core/src/main/java/org/apache/calcite/rel/rules/AggregateStarTableRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/AggregateStarTableRule.java b/core/src/main/java/org/apache/calcite/rel/rules/AggregateStarTableRule.java
index 22ee628..f000d39 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/AggregateStarTableRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/AggregateStarTableRule.java
@@ -16,11 +16,13 @@
*/
package org.apache.calcite.rel.rules;
+import org.apache.calcite.config.CalciteConnectionConfig;
import org.apache.calcite.jdbc.CalciteSchema;
import org.apache.calcite.materialize.Lattice;
import org.apache.calcite.materialize.TileKey;
import org.apache.calcite.plan.RelOptCluster;
import org.apache.calcite.plan.RelOptLattice;
+import org.apache.calcite.plan.RelOptPlanner;
import org.apache.calcite.plan.RelOptRule;
import org.apache.calcite.plan.RelOptRuleCall;
import org.apache.calcite.plan.RelOptRuleOperand;
@@ -113,14 +115,22 @@ public class AggregateStarTableRule extends RelOptRule {
protected void apply(RelOptRuleCall call, Project postProject,
final Aggregate aggregate, StarTable.StarTableScan scan) {
+ final RelOptPlanner planner = call.getPlanner();
+ final CalciteConnectionConfig config =
+ planner.getContext().unwrap(CalciteConnectionConfig.class);
+ if (config == null || !config.createMaterializations()) {
+ // Disable this rule if we if materializations are disabled - in
+ // particular, if we are in a recursive statement that is being used to
+ // populate a materialization
+ return;
+ }
final RelOptCluster cluster = scan.getCluster();
final RelOptTable table = scan.getTable();
- final RelOptLattice lattice = call.getPlanner().getLattice(table);
+ final RelOptLattice lattice = planner.getLattice(table);
final List<Lattice.Measure> measures =
lattice.lattice.toMeasures(aggregate.getAggCallList());
final Pair<CalciteSchema.TableEntry, TileKey> pair =
- lattice.getAggregate(
- call.getPlanner(), aggregate.getGroupSet(), measures);
+ lattice.getAggregate(planner, aggregate.getGroupSet(), measures);
if (pair == null) {
return;
}
http://git-wip-us.apache.org/repos/asf/calcite/blob/b36a1072/core/src/test/java/org/apache/calcite/jdbc/CalciteRemoteDriverTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/jdbc/CalciteRemoteDriverTest.java b/core/src/test/java/org/apache/calcite/jdbc/CalciteRemoteDriverTest.java
index 1c3ff40..801caa9 100644
--- a/core/src/test/java/org/apache/calcite/jdbc/CalciteRemoteDriverTest.java
+++ b/core/src/test/java/org/apache/calcite/jdbc/CalciteRemoteDriverTest.java
@@ -95,7 +95,7 @@ public class CalciteRemoteDriverTest {
private static final CalciteAssert.ConnectionFactory REMOTE_CONNECTION_FACTORY =
new CalciteAssert.ConnectionFactory() {
public Connection createConnection() throws SQLException {
- return remoteConnection;
+ return getRemoteConnection();
}
};
@@ -151,7 +151,6 @@ public class CalciteRemoteDriverTest {
};
private static Connection localConnection;
- private static Connection remoteConnection;
private static HttpServer start;
@BeforeClass public static void beforeClass() throws Exception {
@@ -163,8 +162,11 @@ public class CalciteRemoteDriverTest {
return new AvaticaJsonHandler(service);
}
});
+ }
+
+ protected static Connection getRemoteConnection() throws SQLException {
final int port = start.getPort();
- remoteConnection = DriverManager.getConnection(
+ return DriverManager.getConnection(
"jdbc:avatica:remote:url=http://localhost:" + port);
}
@@ -293,14 +295,16 @@ public class CalciteRemoteDriverTest {
/** Same query as {@link #testRemoteExecuteQuery()}, run without the test
* infrastructure. */
@Test public void testRemoteExecuteQuery2() throws Exception {
- final Statement statement = remoteConnection.createStatement();
- final ResultSet resultSet =
- statement.executeQuery("values (1, 'a'), (cast(null as integer), 'b')");
- int n = 0;
- while (resultSet.next()) {
- ++n;
+ try (Connection remoteConnection = getRemoteConnection()) {
+ final Statement statement = remoteConnection.createStatement();
+ final String sql = "values (1, 'a'), (cast(null as integer), 'b')";
+ final ResultSet resultSet = statement.executeQuery(sql);
+ int n = 0;
+ while (resultSet.next()) {
+ ++n;
+ }
+ assertThat(n, equalTo(2));
}
- assertThat(n, equalTo(2));
}
/** For each (source, destination) type, make sure that we can convert bind
@@ -450,70 +454,84 @@ public class CalciteRemoteDriverTest {
* <a href="https://issues.apache.org/jira/browse/CALCITE-646">[CALCITE-646]
* AvaticaStatement execute method broken over remote JDBC</a>. */
@Test public void testRemoteStatementExecute() throws Exception {
- final Statement statement = remoteConnection.createStatement();
- final boolean status = statement.execute("values (1, 2), (3, 4), (5, 6)");
- assertThat(status, is(true));
- final ResultSet resultSet = statement.getResultSet();
- int n = 0;
- while (resultSet.next()) {
- ++n;
+ try (Connection remoteConnection = getRemoteConnection()) {
+ final Statement statement = remoteConnection.createStatement();
+ final boolean status = statement.execute("values (1, 2), (3, 4), (5, 6)");
+ assertThat(status, is(true));
+ final ResultSet resultSet = statement.getResultSet();
+ int n = 0;
+ while (resultSet.next()) {
+ ++n;
+ }
+ assertThat(n, equalTo(3));
}
- assertThat(n, equalTo(3));
}
@Test(expected = SQLException.class)
public void testAvaticaConnectionException() throws Exception {
- remoteConnection.isValid(-1);
+ try (Connection remoteConnection = getRemoteConnection()) {
+ remoteConnection.isValid(-1);
+ }
}
@Test(expected = SQLException.class)
public void testAvaticaStatementException() throws Exception {
- try (Statement statement = remoteConnection.createStatement()) {
- statement.setCursorName("foo");
+ try (Connection remoteConnection = getRemoteConnection()) {
+ try (Statement statement = remoteConnection.createStatement()) {
+ statement.setCursorName("foo");
+ }
}
}
@Test public void testAvaticaStatementGetMoreResults() throws Exception {
- try (Statement statement = remoteConnection.createStatement()) {
- assertThat(statement.getMoreResults(), is(false));
+ try (Connection remoteConnection = getRemoteConnection()) {
+ try (Statement statement = remoteConnection.createStatement()) {
+ assertThat(statement.getMoreResults(), is(false));
+ }
}
}
@Test public void testRemoteExecute() throws Exception {
- ResultSet resultSet =
- remoteConnection.createStatement().executeQuery(
- "select * from \"hr\".\"emps\"");
- int count = 0;
- while (resultSet.next()) {
- ++count;
+ try (Connection remoteConnection = getRemoteConnection()) {
+ ResultSet resultSet =
+ remoteConnection.createStatement().executeQuery(
+ "select * from \"hr\".\"emps\"");
+ int count = 0;
+ while (resultSet.next()) {
+ ++count;
+ }
+ assertThat(count > 0, is(true));
}
- assertThat(count > 0, is(true));
}
@Test public void testRemoteExecuteMaxRow() throws Exception {
- Statement statement = remoteConnection.createStatement();
- statement.setMaxRows(2);
- ResultSet resultSet = statement.executeQuery(
- "select * from \"hr\".\"emps\"");
- int count = 0;
- while (resultSet.next()) {
- ++count;
+ try (Connection remoteConnection = getRemoteConnection()) {
+ Statement statement = remoteConnection.createStatement();
+ statement.setMaxRows(2);
+ ResultSet resultSet = statement.executeQuery(
+ "select * from \"hr\".\"emps\"");
+ int count = 0;
+ while (resultSet.next()) {
+ ++count;
+ }
+ assertThat(count, equalTo(2));
}
- assertThat(count, equalTo(2));
}
/** Test case for
* <a href="https://issues.apache.org/jira/browse/CALCITE-661">[CALCITE-661]
* Remote fetch in Calcite JDBC driver</a>. */
@Test public void testRemotePrepareExecute() throws Exception {
- final PreparedStatement preparedStatement =
- remoteConnection.prepareStatement("select * from \"hr\".\"emps\"");
- ResultSet resultSet = preparedStatement.executeQuery();
- int count = 0;
- while (resultSet.next()) {
- ++count;
+ try (Connection remoteConnection = getRemoteConnection()) {
+ final PreparedStatement preparedStatement =
+ remoteConnection.prepareStatement("select * from \"hr\".\"emps\"");
+ ResultSet resultSet = preparedStatement.executeQuery();
+ int count = 0;
+ while (resultSet.next()) {
+ ++count;
+ }
+ assertThat(count > 0, is(true));
}
- assertThat(count > 0, is(true));
}
public static Connection makeConnection() throws Exception {
http://git-wip-us.apache.org/repos/asf/calcite/blob/b36a1072/core/src/test/java/org/apache/calcite/test/CalciteAssert.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/test/CalciteAssert.java b/core/src/test/java/org/apache/calcite/test/CalciteAssert.java
index 2a30093..7078f8d 100644
--- a/core/src/test/java/org/apache/calcite/test/CalciteAssert.java
+++ b/core/src/test/java/org/apache/calcite/test/CalciteAssert.java
@@ -50,20 +50,19 @@ import org.apache.calcite.util.JsonBuilder;
import org.apache.calcite.util.Pair;
import org.apache.calcite.util.Util;
+import org.apache.commons.dbcp2.PoolableConnectionFactory;
+import org.apache.commons.dbcp2.PoolingDataSource;
import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.pool2.impl.GenericObjectPool;
import com.google.common.base.Function;
import com.google.common.base.Functions;
import com.google.common.base.Joiner;
import com.google.common.base.Preconditions;
-import com.google.common.cache.CacheBuilder;
-import com.google.common.cache.CacheLoader;
-import com.google.common.cache.LoadingCache;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableMultiset;
import com.google.common.collect.Lists;
-import com.google.common.util.concurrent.UncheckedExecutionException;
import net.hydromatic.foodmart.data.hsqldb.FoodmartHsqldb;
import net.hydromatic.scott.data.hsqldb.ScottHsqldb;
@@ -95,9 +94,7 @@ import java.util.Objects;
import java.util.Properties;
import java.util.TimeZone;
import java.util.TreeSet;
-import java.util.concurrent.ExecutionException;
import java.util.concurrent.atomic.AtomicInteger;
-import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.sql.DataSource;
@@ -544,18 +541,20 @@ public class CalciteAssert {
"With materializationsEnabled=" + materializationsEnabled
+ ", limit=" + limit;
try (final Closer closer = new Closer()) {
- if (connection instanceof CalciteConnection) {
- CalciteConnection calciteConnection = (CalciteConnection) connection;
- calciteConnection.getProperties().setProperty(
+ if (connection.isWrapperFor(CalciteConnection.class)) {
+ final CalciteConnection calciteConnection =
+ connection.unwrap(CalciteConnection.class);
+ final Properties properties = calciteConnection.getProperties();
+ properties.setProperty(
CalciteConnectionProperty.MATERIALIZATIONS_ENABLED.camelName(),
Boolean.toString(materializationsEnabled));
- calciteConnection.getProperties().setProperty(
+ properties.setProperty(
CalciteConnectionProperty.CREATE_MATERIALIZATIONS.camelName(),
Boolean.toString(materializationsEnabled));
- if (!calciteConnection.getProperties()
+ if (!properties
.containsKey(CalciteConnectionProperty.TIME_ZONE.camelName())) {
// Do not override id some test has already set this property.
- calciteConnection.getProperties().setProperty(
+ properties.setProperty(
CalciteConnectionProperty.TIME_ZONE.camelName(),
DateTimeUtils.UTC_ZONE.getID());
}
@@ -1031,8 +1030,7 @@ public class CalciteAssert {
public AssertThat connectThrows(
Function<Throwable, Void> exceptionChecker) {
Throwable throwable;
- try {
- Connection x = connectionFactory.createConnection();
+ try (Connection x = connectionFactory.createConnection()) {
try {
x.close();
} catch (SQLException e) {
@@ -1060,16 +1058,13 @@ public class CalciteAssert {
/** Creates a {@link DataContext} and executes a callback. */
public <T> AssertThat doWithDataContext(Function<DataContext, T> fn)
throws Exception {
- CalciteConnection connection =
- (CalciteConnection) connectionFactory.createConnection();
- final DataContext dataContext = CalciteMetaImpl.createDataContext(
- connection);
- try {
+ try (CalciteConnection connection =
+ (CalciteConnection) connectionFactory.createConnection()) {
+ final DataContext dataContext =
+ CalciteMetaImpl.createDataContext(connection);
T t = fn.apply(dataContext);
Util.discard(t);
return AssertThat.this;
- } finally {
- connection.close();
}
}
@@ -1181,31 +1176,18 @@ public class CalciteAssert {
/** Connection factory that uses the same instance of connections. */
private static class PoolingConnectionFactory
extends ConnectionFactory {
-
- /** Connection pool. */
- private static class Pool {
- private static final LoadingCache<ConnectionFactory, Connection> POOL =
- CacheBuilder.newBuilder().build(
- new CacheLoader<ConnectionFactory, Connection>() {
- public Connection load(@Nonnull ConnectionFactory key) throws Exception {
- return key.createConnection();
- }
- });
- }
-
- private final ConnectionFactory factory;
+ private final PoolingDataSource dataSource;
PoolingConnectionFactory(final ConnectionFactory factory) {
- this.factory = factory;
+ final PoolableConnectionFactory connectionFactory =
+ new PoolableConnectionFactory(factory::createConnection, null);
+ connectionFactory.setRollbackOnReturn(false);
+ this.dataSource = new PoolingDataSource<>(
+ new GenericObjectPool<>(connectionFactory));
}
public Connection createConnection() throws SQLException {
- try {
- return Pool.POOL.get(factory);
- } catch (UncheckedExecutionException | ExecutionException e) {
- throw new SQLException(
- "Unable to get pooled connection for " + factory, e.getCause());
- }
+ return dataSource.getConnection();
}
}
@@ -1334,8 +1316,8 @@ public class CalciteAssert {
}
public final AssertQuery updates(int count) {
- try {
- assertQuery(createConnection(), sql, limit, materializationsEnabled,
+ try (final Connection connection = createConnection()) {
+ assertQuery(connection, sql, limit, materializationsEnabled,
hooks, null, checkUpdateCount(count), null);
return this;
} catch (Exception e) {
@@ -1346,8 +1328,8 @@ public class CalciteAssert {
protected AssertQuery returns(String sql,
Function<ResultSet, Void> checker) {
- try {
- assertQuery(createConnection(), sql, limit, materializationsEnabled,
+ try (final Connection connection = createConnection()) {
+ assertQuery(connection, sql, limit, materializationsEnabled,
hooks, checker, null, null);
return this;
} catch (Exception e) {
@@ -1370,8 +1352,8 @@ public class CalciteAssert {
}
public AssertQuery throws_(String message) {
- try {
- assertQuery(createConnection(), sql, limit, materializationsEnabled,
+ try (final Connection connection = createConnection()) {
+ assertQuery(connection, sql, limit, materializationsEnabled,
hooks, null, null, checkException(message));
return this;
} catch (Exception e) {
@@ -1387,14 +1369,13 @@ public class CalciteAssert {
* @param optionalMessage An optional message to check for in the output stacktrace
* */
public AssertQuery failsAtValidation(String optionalMessage) {
- try {
- assertQuery(createConnection(), sql, limit, materializationsEnabled,
- hooks, null, null,
- checkValidationException(optionalMessage));
+ try (final Connection connection = createConnection()) {
+ assertQuery(connection, sql, limit, materializationsEnabled,
+ hooks, null, null, checkValidationException(optionalMessage));
return this;
} catch (Exception e) {
- throw new RuntimeException(
- "exception while executing [" + sql + "]", e);
+ throw new RuntimeException("exception while executing [" + sql + "]",
+ e);
}
}
@@ -1407,8 +1388,8 @@ public class CalciteAssert {
}
public AssertQuery runs() {
- try {
- assertQuery(createConnection(), sql, limit, materializationsEnabled,
+ try (final Connection connection = createConnection()) {
+ assertQuery(connection, sql, limit, materializationsEnabled,
hooks, null, null, null);
return this;
} catch (Exception e) {
@@ -1418,8 +1399,8 @@ public class CalciteAssert {
}
public AssertQuery typeIs(String expected) {
- try {
- assertQuery(createConnection(), sql, limit, false,
+ try (final Connection connection = createConnection()) {
+ assertQuery(connection, sql, limit, false,
hooks, checkResultType(expected), null, null);
return this;
} catch (Exception e) {
@@ -1436,8 +1417,8 @@ public class CalciteAssert {
}
public AssertQuery convertMatches(final Function<RelNode, Void> checker) {
- try {
- assertPrepare(createConnection(), sql, this.materializationsEnabled,
+ try (final Connection connection = createConnection()) {
+ assertPrepare(connection, sql, this.materializationsEnabled,
checker, null);
return this;
} catch (Exception e) {
@@ -1448,9 +1429,8 @@ public class CalciteAssert {
public AssertQuery substitutionMatches(
final Function<RelNode, Void> checker) {
- try {
- assertPrepare(createConnection(), sql, materializationsEnabled,
- null, checker);
+ try (final Connection connection = createConnection()) {
+ assertPrepare(connection, sql, materializationsEnabled, null, checker);
return this;
} catch (Exception e) {
throw new RuntimeException("exception while preparing [" + sql + "]",
@@ -1512,8 +1492,8 @@ public class CalciteAssert {
return null;
}
});
- try {
- assertQuery(createConnection(), sql, limit, materializationsEnabled,
+ try (final Connection connection = createConnection()) {
+ assertQuery(connection, sql, limit, materializationsEnabled,
hooks, null, checkUpdate, null);
assertNotNull(plan);
} catch (Exception e) {
@@ -1535,8 +1515,8 @@ public class CalciteAssert {
return null;
}
});
- try {
- assertQuery(createConnection(), sql, limit, materializationsEnabled,
+ try (final Connection connection = createConnection()) {
+ assertQuery(connection, sql, limit, materializationsEnabled,
hooks, null, null, null);
predicate1.apply(list);
return this;
@@ -1617,8 +1597,7 @@ public class CalciteAssert {
}
public final AssertMetaData returns(Function<ResultSet, Void> checker) {
- try {
- Connection c = connectionFactory.createConnection();
+ try (final Connection c = connectionFactory.createConnection()) {
final ResultSet resultSet = function.apply(c);
checker.apply(resultSet);
resultSet.close();
http://git-wip-us.apache.org/repos/asf/calcite/blob/b36a1072/core/src/test/java/org/apache/calcite/test/JdbcTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/test/JdbcTest.java b/core/src/test/java/org/apache/calcite/test/JdbcTest.java
index f013f3e..fcdc0a6 100644
--- a/core/src/test/java/org/apache/calcite/test/JdbcTest.java
+++ b/core/src/test/java/org/apache/calcite/test/JdbcTest.java
@@ -655,8 +655,7 @@ public class JdbcTest {
resultSet.next();
fail("resultSet.next() should throw SQLException when closed");
} catch (SQLException e) {
- assertThat(e.getMessage(),
- containsString("next() called on closed cursor"));
+ assertThat(e.getMessage(), containsString("ResultSet closed"));
}
assertEquals(0, closeCount[0]);
assertEquals(0, statementCloseCount[0]);
http://git-wip-us.apache.org/repos/asf/calcite/blob/b36a1072/core/src/test/resources/sql/misc.iq
----------------------------------------------------------------------
diff --git a/core/src/test/resources/sql/misc.iq b/core/src/test/resources/sql/misc.iq
index e643b97..22d1422 100644
--- a/core/src/test/resources/sql/misc.iq
+++ b/core/src/test/resources/sql/misc.iq
@@ -170,9 +170,6 @@ select cast(c_timestamp as varchar(20)), cast(c_timestamp as date) from data whe
| 1997-02-14 17:32:01 | 1997-02-14 |
| 1997-02-15 17:32:01 | 1997-02-15 |
| 1997-02-16 17:32:01 | 1997-02-16 |
-| 0097-02-14 17:32:01 | 0097-02-14 |
-| 0597-02-18 17:32:01 | 0597-02-18 |
-| 1097-02-22 17:32:01 | 1097-02-22 |
| 1697-02-16 17:32:01 | 1697-02-16 |
| 1797-02-16 17:32:01 | 1797-02-16 |
| 1897-02-16 17:32:01 | 1897-02-16 |
@@ -181,6 +178,9 @@ select cast(c_timestamp as varchar(20)), cast(c_timestamp as date) from data whe
| 1996-02-28 17:32:01 | 1996-02-28 |
| 1996-02-29 17:32:01 | 1996-02-29 |
| 1996-03-01 17:32:01 | 1996-03-01 |
+| 0097-02-16 17:32:01 | 0097-02-16 |
+| 0597-02-16 17:32:01 | 0597-02-16 |
+| 1097-02-16 17:32:01 | 1097-02-16 |
+---------------------+------------+
(22 rows)
http://git-wip-us.apache.org/repos/asf/calcite/blob/b36a1072/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index a53a13e..8d4a4db 100644
--- a/pom.xml
+++ b/pom.xml
@@ -58,7 +58,7 @@ limitations under the License.
<!-- This list is in alphabetical order. -->
<airlift-tpch.version>0.1</airlift-tpch.version>
- <avatica.version>1.11.0</avatica.version>
+ <avatica.version>1.12.0</avatica.version>
<build-helper-maven-plugin.version>3.0.0</build-helper-maven-plugin.version>
<cassandra-driver-core.version>3.4.0</cassandra-driver-core.version>
<checksum-maven-plugin.version>1.2</checksum-maven-plugin.version>