Author: jbellis
Date: Mon Aug 22 17:04:44 2011
New Revision: 1160335

URL: http://svn.apache.org/viewvc?rev=1160335&view=rev
Log:
use presence of resultset instead of regexp to determine whether executeUpdate 
or executeQuery should be allowed
patch by Rick Shaw; reviewed by jbellis for CASSANDRA-3052

Modified:
    cassandra/drivers/java/CHANGES.txt
    
cassandra/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraPreparedStatement.java
    
cassandra/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraStatement.java
    cassandra/drivers/java/src/org/apache/cassandra/cql/jdbc/Utils.java

Modified: cassandra/drivers/java/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/cassandra/drivers/java/CHANGES.txt?rev=1160335&r1=1160334&r2=1160335&view=diff
==============================================================================
--- cassandra/drivers/java/CHANGES.txt (original)
+++ cassandra/drivers/java/CHANGES.txt Mon Aug 22 17:04:44 2011
@@ -1,4 +1,4 @@
 1.0.4
- * improve JDBC spec compliance (CASSANDRA-2720, 2754)
+ * improve JDBC spec compliance (CASSANDRA-2720, 2754, 3052)
  * cooperate with other jdbc drivers (CASSANDRA-2842)
  * fix unbox-to-NPE with null primitives (CASSANDRA-2956)

Modified: 
cassandra/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraPreparedStatement.java
URL: 
http://svn.apache.org/viewvc/cassandra/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraPreparedStatement.java?rev=1160335&r1=1160334&r2=1160335&view=diff
==============================================================================
--- 
cassandra/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraPreparedStatement.java
 (original)
+++ 
cassandra/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraPreparedStatement.java
 Mon Aug 22 17:04:44 2011
@@ -267,17 +267,12 @@ public class CassandraPreparedStatement 
 
     public ResultSet executeQuery() throws SQLException
     {
-        return this.cql != null ? super.executeQuery(makeCql()) : null;
+        return this.cql == null ? null : super.executeQuery(makeCql());
     }
 
     public int executeUpdate() throws SQLException
     {
-        String q = makeCql();
-        if (!UpdatePattern.matcher(q).matches())
-            throw new SQLException("Not an update statement.");
-        super.execute(q);
-        // we don't know how many rows were updated.
-        return 0;
+        return this.cql == null ? 0 : super.executeUpdate(makeCql());
     }
 
     public ResultSetMetaData getMetaData() throws SQLException

Modified: 
cassandra/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraStatement.java
URL: 
http://svn.apache.org/viewvc/cassandra/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraStatement.java?rev=1160335&r1=1160334&r2=1160335&view=diff
==============================================================================
--- 
cassandra/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraStatement.java
 (original)
+++ 
cassandra/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraStatement.java
 Mon Aug 22 17:04:44 2011
@@ -28,6 +28,7 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.SQLFeatureNotSupportedException;
 import java.sql.SQLNonTransientConnectionException;
+import java.sql.SQLNonTransientException;
 import java.sql.SQLRecoverableException;
 import java.sql.SQLSyntaxErrorException;
 import java.sql.SQLTransientConnectionException;
@@ -48,8 +49,6 @@ import org.apache.thrift.TException;
 
 class CassandraStatement extends AbstractStatement implements Statement
 {
-    protected static final Pattern UpdatePattern = Pattern.compile("UPDATE 
.*", Pattern.CASE_INSENSITIVE);
-
     /**
      * The connection.
      */
@@ -221,16 +220,17 @@ class CassandraStatement extends Abstrac
     {
         checkNotClosed();
         doExecute(query);
+        if (currentResultSet == null)
+            throw new SQLNonTransientException(NO_RESULTSET);
         return currentResultSet;
     }
 
     public int executeUpdate(String query) throws SQLException
     {
         checkNotClosed();
-        if (!UpdatePattern.matcher(query).matches())
-            throw new SQLSyntaxErrorException("Not an update statement.");
-
         doExecute(query);
+        if (currentResultSet != null)
+            throw new SQLNonTransientException(NO_UPDATE_COUNT);
         return updateCount;
     }
 

Modified: cassandra/drivers/java/src/org/apache/cassandra/cql/jdbc/Utils.java
URL: 
http://svn.apache.org/viewvc/cassandra/drivers/java/src/org/apache/cassandra/cql/jdbc/Utils.java?rev=1160335&r1=1160334&r2=1160335&view=diff
==============================================================================
--- cassandra/drivers/java/src/org/apache/cassandra/cql/jdbc/Utils.java 
(original)
+++ cassandra/drivers/java/src/org/apache/cassandra/cql/jdbc/Utils.java Mon Aug 
22 17:04:44 2011
@@ -76,6 +76,8 @@ class Utils
     protected static final String NO_MULTIPLE = "the Cassandra implementation 
does not currently support multiple open Result Sets";
     protected static final String NO_VALIDATOR = "Could not find key validator 
for: %s.%s";
     protected static final String NO_COMPARATOR = "Could not find key 
comparator for: %s.%s";
+    protected static final String NO_RESULTSET = "No ResultSet returned from 
the CQL statement passed in an 'executeQuery()' method";
+    protected static final String NO_UPDATE_COUNT = "No Update Count was 
returned from the CQL statement passed in an 'executeUpdate()' method";
     protected static final String NO_CF = "no column family reference could be 
extracted from the provided CQL statement";
     protected static final String BAD_KEEP_RSET = "the argument for keeping 
the current result set : %s is not a valid value";
     protected static final String BAD_TYPE_RSET = "the argument for result set 
type : %s is not a valid value";


Reply via email to