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/05/03 19:46:10 UTC

svn commit: r1099156 - in /cassandra/branches/cassandra-0.8: CHANGES.txt drivers/py/cql/decoders.py test/system/test_cql.py

Author: jbellis
Date: Tue May  3 17:46:10 2011
New Revision: 1099156

URL: http://svn.apache.org/viewvc?rev=1099156&view=rev
Log:
fix returning null column values in the python cql driver
patch by Pavel Yaskevich; reviewed by jbellis for CASSANDRA-2593

Modified:
    cassandra/branches/cassandra-0.8/CHANGES.txt
    cassandra/branches/cassandra-0.8/drivers/py/cql/decoders.py
    cassandra/branches/cassandra-0.8/test/system/test_cql.py

Modified: cassandra/branches/cassandra-0.8/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/CHANGES.txt?rev=1099156&r1=1099155&r2=1099156&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.8/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.8/CHANGES.txt Tue May  3 17:46:10 2011
@@ -1,6 +1,7 @@
 0.8.0-?
  * faster flushes and compaction from fixing excessively pessimistic 
    rebuffering in BRAF (CASSANDRA-2581)
+ * fix returning null column values in the python cql driver (CASSANDRA-2593)
  
 
 0.8.0-beta2

Modified: cassandra/branches/cassandra-0.8/drivers/py/cql/decoders.py
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/drivers/py/cql/decoders.py?rev=1099156&r1=1099155&r2=1099156&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.8/drivers/py/cql/decoders.py (original)
+++ cassandra/branches/cassandra-0.8/drivers/py/cql/decoders.py Tue May  3 17:46:10 2011
@@ -59,6 +59,9 @@ class SchemaDecoder(object):
         unmarshal = unmarshallers.get(comparator, unmarshal_noop)
         values = [key]
         for column in row.columns:
+            if column.value == None:
+                continue
+
             description.append((unmarshal(column.name), comparator, None, None, None, None, True))
             validator = self.__validator_for(keyspace, column_family, column.name)
             values.append(unmarshallers.get(validator, unmarshal_noop)(column.value))

Modified: cassandra/branches/cassandra-0.8/test/system/test_cql.py
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/test/system/test_cql.py?rev=1099156&r1=1099155&r2=1099156&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.8/test/system/test_cql.py (original)
+++ cassandra/branches/cassandra-0.8/test/system/test_cql.py Tue May  3 17:46:10 2011
@@ -44,6 +44,10 @@ def load_sample(dbconn):
             WITH comparator = ascii AND default_validation = ascii;
     """)
     dbconn.execute("""
+        CREATE COLUMNFAMILY StandardString2 (KEY text PRIMARY KEY)
+            WITH comparator = ascii AND default_validation = ascii;
+    """)
+    dbconn.execute("""
         CREATE COLUMNFAMILY StandardUtf82 (KEY text PRIMARY KEY)
             WITH comparator = text AND default_validation = ascii;
     """)
@@ -220,6 +224,35 @@ class TestCql(ThriftTester):
         assert r[0] == "aa"
         assert r[1] == "1"
 
+    def test_select_range_with_single_column_results(self):
+        "range should not fail when keys were not set"
+        cursor = init()
+        cursor.execute("""
+          BEGIN BATCH
+            UPDATE StandardString2 SET name='1',password='pass1' WHERE KEY = 'user1'
+            UPDATE StandardString2 SET name='2',password='pass2' WHERE KEY = 'user2'
+            UPDATE StandardString2 SET password='pass3' WHERE KEY = 'user3'
+          APPLY BATCH
+        """)
+
+        cursor.execute("""
+          SELECT name FROM StandardString2
+        """)
+
+        assert cursor.rowcount == 3, "expected 3 results, got %d" % cursor.rowcount
+
+        # two of three results should contain one column "name", third should be empty
+        for i in range(1, 3):
+            r = cursor.fetchone()
+            assert len(r) == 2
+            assert r[0] == "user%d" % i
+            assert r[1] == "%s" % i
+
+        r = cursor.fetchone()
+        assert len(r) == 2
+        assert r[0] == "user3"
+        assert r[1] == None
+
     def test_select_columns_slice_reversed(self):
         "range of columns (slice) by row reversed"
         cursor= init()