You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2011/10/05 21:51:11 UTC

svn commit: r1179399 - in /cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc: CassandraConnection.java CassandraStatement.java

Author: jbellis
Date: Wed Oct  5 19:51:10 2011
New Revision: 1179399

URL: http://svn.apache.org/viewvc?rev=1179399&view=rev
Log:
remove statements from connection's list, when closed manually
patch by Rick Shaw; reviewed by Patricio Echague and jbellis for CASSANDRA-3244

Modified:
    cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraConnection.java
    cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraStatement.java

Modified: cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraConnection.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraConnection.java?rev=1179399&r1=1179398&r2=1179399&view=diff
==============================================================================
--- cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraConnection.java (original)
+++ cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraConnection.java Wed Oct  5 19:51:10 2011
@@ -20,51 +20,17 @@
  */
 package org.apache.cassandra.cql.jdbc;
 
-import static org.apache.cassandra.cql.jdbc.Utils.ALWAYS_AUTOCOMMIT;
-import static org.apache.cassandra.cql.jdbc.Utils.BAD_TIMEOUT;
-import static org.apache.cassandra.cql.jdbc.Utils.NO_INTERFACE;
-import static org.apache.cassandra.cql.jdbc.Utils.NO_TRANSACTIONS;
-import static org.apache.cassandra.cql.jdbc.Utils.PROTOCOL;
-import static org.apache.cassandra.cql.jdbc.Utils.SCHEMA_MISMATCH;
-import static org.apache.cassandra.cql.jdbc.Utils.TAG_SERVER_NAME;
-import static org.apache.cassandra.cql.jdbc.Utils.TAG_DATABASE_NAME;
-import static org.apache.cassandra.cql.jdbc.Utils.TAG_PASSWORD;
-import static org.apache.cassandra.cql.jdbc.Utils.TAG_PORT_NUMBER;
-import static org.apache.cassandra.cql.jdbc.Utils.TAG_USER;
-import static org.apache.cassandra.cql.jdbc.Utils.WAS_CLOSED_CON;
-import static org.apache.cassandra.cql.jdbc.Utils.createSubName;
-import static org.apache.cassandra.cql.jdbc.Utils.determineCurrentKeyspace;
-
-import java.sql.Connection;
-import java.sql.DatabaseMetaData;
-import java.sql.PreparedStatement;
-import java.sql.SQLClientInfoException;
-import java.sql.SQLException;
-import java.sql.SQLFeatureNotSupportedException;
-import java.sql.SQLInvalidAuthorizationSpecException;
-import java.sql.SQLNonTransientConnectionException;
-import java.sql.SQLRecoverableException;
-import java.sql.SQLSyntaxErrorException;
-import java.sql.SQLTimeoutException;
-import java.sql.SQLTransientConnectionException;
-import java.sql.SQLWarning;
-import java.sql.Statement;
-import java.util.ArrayList;
+import java.sql.*;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 import java.util.Properties;
+import java.util.Set;
+import java.util.concurrent.ConcurrentSkipListSet;
 
-import org.apache.cassandra.thrift.AuthenticationException;
-import org.apache.cassandra.thrift.AuthenticationRequest;
-import org.apache.cassandra.thrift.AuthorizationException;
-import org.apache.cassandra.thrift.Cassandra;
-import org.apache.cassandra.thrift.Compression;
-import org.apache.cassandra.thrift.CqlResult;
-import org.apache.cassandra.thrift.InvalidRequestException;
-import org.apache.cassandra.thrift.SchemaDisagreementException;
-import org.apache.cassandra.thrift.TimedOutException;
-import org.apache.cassandra.thrift.UnavailableException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.cassandra.thrift.*;
 import org.apache.thrift.TException;
 import org.apache.thrift.protocol.TBinaryProtocol;
 import org.apache.thrift.protocol.TProtocol;
@@ -72,8 +38,7 @@ import org.apache.thrift.transport.TFram
 import org.apache.thrift.transport.TSocket;
 import org.apache.thrift.transport.TTransport;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import static org.apache.cassandra.cql.jdbc.Utils.*;
 
 /**
  * Implementation class for {@link Connection}.
@@ -99,9 +64,9 @@ class CassandraConnection extends Abstra
     private Properties clientInfo = new Properties();
 
     /**
-     * List of all Statements that have been created by this connection
+     * Set of all Statements that have been created by this connection
      */
-    private List<Statement> statements;
+    private Set<Statement> statements = new ConcurrentSkipListSet<Statement>();
 
     private Cassandra.Client client;
     private TTransport transport;
@@ -119,7 +84,6 @@ class CassandraConnection extends Abstra
      */
     public CassandraConnection(Properties props) throws SQLException
     {
-        statements = new ArrayList<Statement>();
         clientInfo = new Properties();
         url = PROTOCOL + createSubName(props);
         try
@@ -202,10 +166,13 @@ class CassandraConnection extends Abstra
      */
     public synchronized void close() throws SQLException
     {
+        // close all statements associated with this connection upon close
+        for (Statement statement : statements)
+            statement.close();
+        statements.clear();
+        
         if (isConnected())
         {
-            // spec says to close all statements associated with this connection upon close
-            for (Statement statement : statements) statement.close();
             // then disconnect from the transport                
             disconnect();
         }
@@ -220,22 +187,25 @@ class CassandraConnection extends Abstra
     public Statement createStatement() throws SQLException
     {
         checkNotClosed();
-        statements.add(new CassandraStatement(this));
-        return statements.get(statements.size() - 1);
+        Statement statement = new CassandraStatement(this);
+        statements.add(statement);
+        return statement;
     }
 
     public Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException
     {
         checkNotClosed();
-        statements.add(new CassandraStatement(this, null, resultSetType, resultSetConcurrency));
-        return statements.get(statements.size() - 1);
+        Statement statement = new CassandraStatement(this, null, resultSetType, resultSetConcurrency);
+        statements.add(statement);
+        return statement;
     }
 
     public Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException
     {
         checkNotClosed();
-        statements.add(new CassandraStatement(this, null, resultSetType, resultSetConcurrency, resultSetHoldability));
-        return statements.get(statements.size() - 1);
+        Statement statement = new CassandraStatement(this, null, resultSetType, resultSetConcurrency, resultSetHoldability);
+        statements.add(statement);
+        return statement;
     }
 
     public boolean getAutoCommit() throws SQLException
@@ -327,8 +297,9 @@ class CassandraConnection extends Abstra
     public PreparedStatement prepareStatement(String sql) throws SQLException
     {
         checkNotClosed();
-        statements.add(new CassandraPreparedStatement(this, sql));
-        return (PreparedStatement) statements.get(statements.size() - 1);
+        PreparedStatement statement = new CassandraPreparedStatement(this, sql);
+        statements.add(statement);
+        return statement;
     }
 
     public PreparedStatement prepareStatement(String arg0, int arg1, int arg2) throws SQLException
@@ -442,6 +413,14 @@ class CassandraConnection extends Abstra
     }
 
     /**
+     * Remove a Statement from the Open Statements List
+     */
+    protected boolean removeStatement(Statement statement)
+    {
+        return statements.remove(statement);
+    }
+    
+    /**
      * Shutdown the remote connection
      */
     protected void disconnect()

Modified: cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraStatement.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraStatement.java?rev=1179399&r1=1179398&r2=1179399&view=diff
==============================================================================
--- cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraStatement.java (original)
+++ cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraStatement.java Wed Oct  5 19:51:10 2011
@@ -34,7 +34,6 @@ import java.sql.SQLSyntaxErrorException;
 import java.sql.SQLTransientConnectionException;
 import java.sql.SQLWarning;
 import java.sql.Statement;
-import java.util.regex.Pattern;
 
 import org.apache.cassandra.thrift.CqlResult;
 import org.apache.cassandra.thrift.InvalidRequestException;
@@ -143,10 +142,11 @@ class CassandraStatement extends Abstrac
 
     public void close() throws SQLException
     {
+        connection.removeStatement(this);
         connection = null;
         cql = null;
     }
-
+    
     private void doExecute(String sql) throws SQLException
     {
         try