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";