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..9720e6b167e0f 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 @@ -74,6 +74,7 @@ public class PrestoPreparedStatement private final Map parameters = new HashMap<>(); private final String statementName; private final String originalSql; + private boolean isClosed; PrestoPreparedStatement(PrestoConnection connection, String statementName, String sql) throws SQLException @@ -88,8 +89,12 @@ public class PrestoPreparedStatement public void close() throws SQLException { + if (isClosed) { + return; + } super.execute(format("DEALLOCATE PREPARE %s", statementName)); super.close(); + isClosed = true; } @Override 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..0cfa4668d81bf 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 @@ -232,6 +232,17 @@ public void testDeallocate() } } + @Test + public void testCloseIdempotency() + throws Exception + { + try (Connection connection = createConnection()) { + PreparedStatement statement = connection.prepareStatement("SELECT 123"); + statement.close(); + statement.close(); + } + } + @Test public void testExecuteUpdate() throws Exception