From bb464c1f3703fc8b31be7859ca32e83e755a60dd Mon Sep 17 00:00:00 2001 From: Jonathan Ellis Date: Wed, 19 Aug 2009 16:27:20 +0000 Subject: [PATCH] use the subcomparator when toStringing slice commands on subcolumns. this exposes a couple bugs: fix getString in non-string types to accept byte[0], and fix a test to send a long to a LongType subcolumn. patch by jbellis and Evan Weaver for CASSANDRA-377 git-svn-id: https://svn.apache.org/repos/asf/incubator/cassandra/trunk@805868 13f79535-47bb-0310-9956-ffa450edef68 --- src/java/org/apache/cassandra/db/ReadCommand.java | 4 +++- src/java/org/apache/cassandra/db/marshal/LexicalUUIDType.java | 4 ++++ src/java/org/apache/cassandra/db/marshal/LongType.java | 4 ++++ src/java/org/apache/cassandra/db/marshal/TimeUUIDType.java | 4 ++++ test/system/test_server.py | 2 +- 5 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/java/org/apache/cassandra/db/ReadCommand.java b/src/java/org/apache/cassandra/db/ReadCommand.java index eed9b9f208..adb9452807 100644 --- a/src/java/org/apache/cassandra/db/ReadCommand.java +++ b/src/java/org/apache/cassandra/db/ReadCommand.java @@ -88,7 +88,9 @@ public abstract class ReadCommand protected AbstractType getComparator() { - return DatabaseDescriptor.getComparator(table, getColumnFamilyName()); + return queryPath.superColumnName == null + ? DatabaseDescriptor.getComparator(table, getColumnFamilyName()) + : DatabaseDescriptor.getSubComparator(table, getColumnFamilyName()); } } diff --git a/src/java/org/apache/cassandra/db/marshal/LexicalUUIDType.java b/src/java/org/apache/cassandra/db/marshal/LexicalUUIDType.java index a9a8e6e0cb..292629214f 100644 --- a/src/java/org/apache/cassandra/db/marshal/LexicalUUIDType.java +++ b/src/java/org/apache/cassandra/db/marshal/LexicalUUIDType.java @@ -48,6 +48,10 @@ public class LexicalUUIDType extends AbstractType public String getString(byte[] bytes) { + if (bytes.length == 0) + { + return ""; + } if (bytes.length != 16) { throw new MarshalException("UUIDs must be exactly 16 bytes"); diff --git a/src/java/org/apache/cassandra/db/marshal/LongType.java b/src/java/org/apache/cassandra/db/marshal/LongType.java index f29064586e..234fa671b1 100644 --- a/src/java/org/apache/cassandra/db/marshal/LongType.java +++ b/src/java/org/apache/cassandra/db/marshal/LongType.java @@ -44,6 +44,10 @@ public class LongType extends AbstractType public String getString(byte[] bytes) { + if (bytes.length == 0) + { + return ""; + } if (bytes.length != 8) { throw new MarshalException("A long is exactly 8 bytes"); diff --git a/src/java/org/apache/cassandra/db/marshal/TimeUUIDType.java b/src/java/org/apache/cassandra/db/marshal/TimeUUIDType.java index 79fd1e38d6..cfbf5cd6f0 100644 --- a/src/java/org/apache/cassandra/db/marshal/TimeUUIDType.java +++ b/src/java/org/apache/cassandra/db/marshal/TimeUUIDType.java @@ -43,6 +43,10 @@ public class TimeUUIDType extends AbstractType public String getString(byte[] bytes) { + if (bytes.length == 0) + { + return ""; + } if (bytes.length != 16) { throw new MarshalException("UUIDs must be exactly 16 bytes"); diff --git a/test/system/test_server.py b/test/system/test_server.py index e6a7d3b74b..54af1b8160 100644 --- a/test/system/test_server.py +++ b/test/system/test_server.py @@ -149,7 +149,7 @@ class TestMutations(CassandraTester): assert _big_slice('Keyspace1', 'key1', ColumnParent('Super1')) == [] def test_missing_super(self): - _expect_missing(lambda: client.get('Keyspace1', 'key1', ColumnPath('Super1', 'sc1', 'c1'), ConsistencyLevel.ONE)) + _expect_missing(lambda: client.get('Keyspace1', 'key1', ColumnPath('Super1', 'sc1', _i64(1)), ConsistencyLevel.ONE)) def test_count(self): _insert_simple()