diff --git a/presto-jdbc/src/main/java/com/facebook/presto/jdbc/PrestoConnection.java b/presto-jdbc/src/main/java/com/facebook/presto/jdbc/PrestoConnection.java index d89ef658c5de8..6a834142634e1 100644 --- a/presto-jdbc/src/main/java/com/facebook/presto/jdbc/PrestoConnection.java +++ b/presto-jdbc/src/main/java/com/facebook/presto/jdbc/PrestoConnection.java @@ -786,6 +786,11 @@ void updateSession(StatementClient client) } } + void removePreparedStatement(String name) + { + preparedStatements.remove(name); + } + WarningsManager getWarningsManager() { return warningsManager; diff --git a/presto-jdbc/src/main/java/com/facebook/presto/jdbc/PrestoPreparedStatement.java b/presto-jdbc/src/main/java/com/facebook/presto/jdbc/PrestoPreparedStatement.java index 0a5384cb49542..68e1fcce9f953 100644 --- a/presto-jdbc/src/main/java/com/facebook/presto/jdbc/PrestoPreparedStatement.java +++ b/presto-jdbc/src/main/java/com/facebook/presto/jdbc/PrestoPreparedStatement.java @@ -88,7 +88,7 @@ public class PrestoPreparedStatement public void close() throws SQLException { - super.execute(format("DEALLOCATE PREPARE %s", statementName)); + optionalConnection().ifPresent(x -> x.removePreparedStatement(statementName)); super.close(); } diff --git a/presto-jdbc/src/main/java/com/facebook/presto/jdbc/PrestoStatement.java b/presto-jdbc/src/main/java/com/facebook/presto/jdbc/PrestoStatement.java index 8141f073208fe..51f847da8a84e 100644 --- a/presto-jdbc/src/main/java/com/facebook/presto/jdbc/PrestoStatement.java +++ b/presto-jdbc/src/main/java/com/facebook/presto/jdbc/PrestoStatement.java @@ -662,6 +662,11 @@ protected final PrestoConnection connection() return connection; } + protected final Optional optionalConnection() + { + return Optional.ofNullable(connection.get()); + } + private void closeResultSet() throws SQLException { diff --git a/presto-jdbc/src/test/java/com/facebook/presto/jdbc/TestJdbcPreparedStatement.java b/presto-jdbc/src/test/java/com/facebook/presto/jdbc/TestJdbcPreparedStatement.java index c854cc2a3f114..8314c172a11e9 100644 --- a/presto-jdbc/src/test/java/com/facebook/presto/jdbc/TestJdbcPreparedStatement.java +++ b/presto-jdbc/src/test/java/com/facebook/presto/jdbc/TestJdbcPreparedStatement.java @@ -649,6 +649,17 @@ private void assertParameter(Object expectedValue, int expectedSqlType, Binder b } } + @Test + public void testCloseIdempotency() + throws Exception + { + try (Connection connection = createConnection()) { + PreparedStatement statement = connection.prepareStatement("SELECT 123"); + statement.close(); + statement.close(); + } + } + private interface Binder { void bind(PreparedStatement ps, int i)