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