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/06/01 18:06:58 UTC
svn commit: r1130201 - in /cassandra/branches/cassandra-0.8/drivers/java:
src/org/apache/cassandra/cql/jdbc/ test/org/apache/cassandra/cql/
Author: jbellis
Date: Wed Jun 1 16:06:58 2011
New Revision: 1130201
URL: http://svn.apache.org/viewvc?rev=1130201&view=rev
Log:
add key-as-TypedColumn to CassandraResultSet
patch by amorton; reviewed by jbellis for CASSANDRA-2704
Modified:
cassandra/branches/cassandra-0.8/drivers/java/src/org/apache/cassandra/cql/jdbc/CResultSet.java
cassandra/branches/cassandra-0.8/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraResultSet.java
cassandra/branches/cassandra-0.8/drivers/java/src/org/apache/cassandra/cql/jdbc/ColumnDecoder.java
cassandra/branches/cassandra-0.8/drivers/java/test/org/apache/cassandra/cql/JdbcDriverTest.java
Modified: cassandra/branches/cassandra-0.8/drivers/java/src/org/apache/cassandra/cql/jdbc/CResultSet.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/drivers/java/src/org/apache/cassandra/cql/jdbc/CResultSet.java?rev=1130201&r1=1130200&r2=1130201&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.8/drivers/java/src/org/apache/cassandra/cql/jdbc/CResultSet.java (original)
+++ cassandra/branches/cassandra-0.8/drivers/java/src/org/apache/cassandra/cql/jdbc/CResultSet.java Wed Jun 1 16:06:58 2011
@@ -48,6 +48,7 @@ public class CResultSet extends Abstract
// the current row key when iterating through results.
private byte[] curRowKey = null;
+ private TypedColumn typedCurRowKey = null;
/** The values. */
private List<TypedColumn> values = new ArrayList<TypedColumn>();
@@ -78,6 +79,11 @@ public class CResultSet extends Abstract
return curRowKey;
}
+ public TypedColumn getTypedKey()
+ {
+ return typedCurRowKey;
+ }
+
public TypedColumn getColumn(int i)
{
return values.get(i);
@@ -379,6 +385,8 @@ public class CResultSet extends Abstract
CqlRow row = rSetIter.next();
rowNumber++;
curRowKey = row.getKey();
+ typedCurRowKey = decoder.makeKeyColumn(keyspace, columnFamily, curRowKey);
+
List<Column> cols = row.getColumns();
for (Column col : cols)
{
Modified: cassandra/branches/cassandra-0.8/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraResultSet.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraResultSet.java?rev=1130201&r1=1130200&r2=1130201&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.8/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraResultSet.java (original)
+++ cassandra/branches/cassandra-0.8/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraResultSet.java Wed Jun 1 16:06:58 2011
@@ -30,6 +30,7 @@ public interface CassandraResultSet exte
* @return the current row key
*/
public byte[] getKey();
+ public TypedColumn getTypedKey();
/** @return a BigInteger value for the given column offset*/
public BigInteger getBigInteger(int i);
Modified: cassandra/branches/cassandra-0.8/drivers/java/src/org/apache/cassandra/cql/jdbc/ColumnDecoder.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/drivers/java/src/org/apache/cassandra/cql/jdbc/ColumnDecoder.java?rev=1130201&r1=1130200&r2=1130201&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.8/drivers/java/src/org/apache/cassandra/cql/jdbc/ColumnDecoder.java (original)
+++ cassandra/branches/cassandra-0.8/drivers/java/src/org/apache/cassandra/cql/jdbc/ColumnDecoder.java Wed Jun 1 16:06:58 2011
@@ -128,4 +128,14 @@ class ColumnDecoder
getNameType(keyspace, columnFamily, column.name),
getValueType(keyspace, columnFamily, column.name));
}
+
+ /** constructs a typed column to hold the key */
+ public TypedColumn makeKeyColumn(String keyspace, String columnFamily, byte[] key)
+ {
+ CFMetaData md = metadata.get(String.format("%s.%s", keyspace, columnFamily));
+ Column column = new Column(md.getKeyName()).setValue(key).setTimestamp(-1);
+ return new TypedColumn(column,
+ getNameType(keyspace, columnFamily, md.getKeyName()),
+ getValueType(keyspace, columnFamily, md.getKeyName()));
+ }
}
Modified: cassandra/branches/cassandra-0.8/drivers/java/test/org/apache/cassandra/cql/JdbcDriverTest.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/drivers/java/test/org/apache/cassandra/cql/JdbcDriverTest.java?rev=1130201&r1=1130200&r2=1130201&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.8/drivers/java/test/org/apache/cassandra/cql/JdbcDriverTest.java (original)
+++ cassandra/branches/cassandra-0.8/drivers/java/test/org/apache/cassandra/cql/JdbcDriverTest.java Wed Jun 1 16:06:58 2011
@@ -27,7 +27,10 @@ import java.math.BigInteger;
import java.nio.ByteBuffer;
import java.sql.*;
import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import org.apache.cassandra.cql.jdbc.CassandraResultSet;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -256,27 +259,31 @@ public class JdbcDriverTest extends Embe
public void testWithStatement() throws SQLException
{
Statement stmt = con.createStatement();
-
+ List<String> keys = Arrays.asList(jsmith);
String selectQ = "SELECT 1, 2 FROM JdbcInteger WHERE KEY='" + jsmith + "'";
- checkResultSet(stmt.executeQuery(selectQ), "Int", 1, "1", "2");
+ checkResultSet(stmt.executeQuery(selectQ), "Int", 1, keys, "1", "2");
selectQ = "SELECT 3, 4 FROM JdbcInteger WHERE KEY='" + jsmith + "'";
- checkResultSet(stmt.executeQuery(selectQ), "Int", 1, "3", "4");
+ checkResultSet(stmt.executeQuery(selectQ), "Int", 1, keys, "3", "4");
selectQ = "SELECT 1, 2, 3, 4 FROM JdbcInteger WHERE KEY='" + jsmith + "'";
- checkResultSet(stmt.executeQuery(selectQ), "Int", 1, "1", "2", "3", "4");
+ checkResultSet(stmt.executeQuery(selectQ), "Int", 1, keys, "1", "2", "3", "4");
selectQ = "SELECT 1, 2 FROM JdbcLong WHERE KEY='" + jsmith + "'";
- checkResultSet(stmt.executeQuery(selectQ), "Long", 1, "1", "2");
+ checkResultSet(stmt.executeQuery(selectQ), "Long", 1, keys, "1", "2");
selectQ = "SELECT 'first', last FROM JdbcAscii WHERE KEY='" + jsmith + "'";
- checkResultSet(stmt.executeQuery(selectQ), "String", 1, "first", "last");
+ checkResultSet(stmt.executeQuery(selectQ), "String", 1, keys, "first", "last");
selectQ = String.format("SELECT '%s', '%s' FROM JdbcBytes WHERE KEY='%s'", first, last, jsmith);
- checkResultSet(stmt.executeQuery(selectQ), "Bytes", 1, first, last);
+ checkResultSet(stmt.executeQuery(selectQ), "Bytes", 1, keys, first, last);
selectQ = "SELECT 'first', last FROM JdbcUtf8 WHERE KEY='" + jsmith + "'";
- checkResultSet(stmt.executeQuery(selectQ), "String", 1, "first", "last");
+ checkResultSet(stmt.executeQuery(selectQ), "String", 1, keys, "first", "last");
+
+ String badKey = FBUtilities.bytesToHex(String.format("jsmith-%s", System.currentTimeMillis()).getBytes());
+ selectQ = "SELECT 1, 2 FROM JdbcInteger WHERE KEY IN ('" + badKey + "', '" + jsmith + "')";
+ checkResultSet(stmt.executeQuery(selectQ), "Int", 1, keys, "1", "2");
}
@Test
@@ -293,29 +300,35 @@ public class JdbcDriverTest extends Embe
@Test
public void testWithPreparedStatement() throws SQLException
{
+ List<String> keys = Arrays.asList(jsmith);
+
String selectQ = String.format("SELECT '%s', '%s' FROM Standard1 WHERE KEY='%s'", first, last, jsmith);
- checkResultSet(executePreparedStatementWithResults(con, selectQ), "Bytes", 1, first, last);
+ checkResultSet(executePreparedStatementWithResults(con, selectQ), "Bytes", 1, keys, first, last);
selectQ = "SELECT 1, 2 FROM JdbcInteger WHERE KEY='" + jsmith + "'";
- checkResultSet(executePreparedStatementWithResults(con, selectQ), "Int", 1, "1", "2");
+ checkResultSet(executePreparedStatementWithResults(con, selectQ), "Int", 1, keys, "1", "2");
selectQ = "SELECT 3, 4 FROM JdbcInteger WHERE KEY='" + jsmith + "'";
- checkResultSet(executePreparedStatementWithResults(con, selectQ), "Int", 1, "3", "4");
+ checkResultSet(executePreparedStatementWithResults(con, selectQ), "Int", 1, keys, "3", "4");
selectQ = "SELECT 1, 2, 3, 4 FROM JdbcInteger WHERE KEY='" + jsmith + "'";
- checkResultSet(executePreparedStatementWithResults(con, selectQ), "Int", 1, "1", "2", "3", "4");
+ checkResultSet(executePreparedStatementWithResults(con, selectQ), "Int", 1, keys, "1", "2", "3", "4");
selectQ = "SELECT 1, 2 FROM JdbcLong WHERE KEY='" + jsmith + "'";
- checkResultSet(executePreparedStatementWithResults(con, selectQ), "Long", 1, "1", "2");
+ checkResultSet(executePreparedStatementWithResults(con, selectQ), "Long", 1, keys, "1", "2");
selectQ = "SELECT 'first', last FROM JdbcAscii WHERE KEY='" + jsmith + "'";
- checkResultSet(executePreparedStatementWithResults(con, selectQ), "String", 1, "first", "last");
+ checkResultSet(executePreparedStatementWithResults(con, selectQ), "String", 1, keys, "first", "last");
selectQ = String.format("SELECT '%s', '%s' FROM JdbcBytes WHERE KEY='%s'", first, last, jsmith);
- checkResultSet(executePreparedStatementWithResults(con, selectQ), "Bytes", 1, first, last);
+ checkResultSet(executePreparedStatementWithResults(con, selectQ), "Bytes", 1, keys, first, last);
selectQ = "SELECT 'first', last FROM JdbcUtf8 WHERE KEY='" + jsmith + "'";
- checkResultSet(executePreparedStatementWithResults(con, selectQ), "String", 1, "first", "last");
+ checkResultSet(executePreparedStatementWithResults(con, selectQ), "String", 1, keys, "first", "last");
+
+ String badKey = FBUtilities.bytesToHex(String.format("jsmith-%s", System.currentTimeMillis()).getBytes());
+ selectQ = "SELECT 1, 2 FROM JdbcInteger WHERE KEY IN ('" + badKey + "', '" + jsmith + "')";
+ checkResultSet(executePreparedStatementWithResults(con, selectQ), "Int", 1, keys, "1", "2");
}
/* Method to test with Delete statement. */
@@ -412,11 +425,23 @@ public class JdbcDriverTest extends Embe
/** iterates over a result set checking columns */
private static void checkResultSet(ResultSet rs, String accessor, int expectedRows, String... cols) throws SQLException
{
+ checkResultSet(rs, accessor, expectedRows, null, cols);
+ }
+
+ private static void checkResultSet(ResultSet rs, String accessor, int expectedRows, List<String> keys, String... cols) throws SQLException
+ {
int actualRows = 0;
assert rs != null;
+ Iterator<String> keyIter = (keys == null) ? null : keys.iterator();
+ CassandraResultSet cassandraRs = (CassandraResultSet)rs;
while (rs.next())
{
actualRows++;
+ if (keyIter != null)
+ {
+ assert cassandraRs.getTypedKey().getValueString().equals(keyIter.next());
+ }
+
for (int c = 0; c < cols.length; c++)
{
// getObject should always work.