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/07/18 17:48:02 UTC

svn commit: r1147937 - in /cassandra/drivers/py: cql/decoders.py test/test_query_preparation.py

Author: jbellis
Date: Mon Jul 18 15:48:00 2011
New Revision: 1147937

URL: http://svn.apache.org/viewvc?rev=1147937&view=rev
Log:
improve decode efficiency and fix tests
patch by thobbs; reviewed by jbellis for CASSANDRA-2913

Modified:
    cassandra/drivers/py/cql/decoders.py
    cassandra/drivers/py/test/test_query_preparation.py

Modified: cassandra/drivers/py/cql/decoders.py
URL: http://svn.apache.org/viewvc/cassandra/drivers/py/cql/decoders.py?rev=1147937&r1=1147936&r2=1147937&view=diff
==============================================================================
--- cassandra/drivers/py/cql/decoders.py (original)
+++ cassandra/drivers/py/cql/decoders.py Mon Jul 18 15:48:00 2011
@@ -32,21 +32,7 @@ class SchemaDecoder(object):
 
     def __comparator_for(self, keyspace, column_family):
         cfam = self.__get_column_family_def(keyspace, column_family)
-        if "comparator" in cfam:
-            return cfam["comparator"]
-        return None
-
-    def __validator_for(self, keyspace, column_family, name):
-        cfam = self.__get_column_family_def(keyspace, column_family)
-        if name in cfam["columns"]:
-            return cfam["columns"][name]
-        return cfam["default_validation_class"]
-
-    def __keytype_for(self, keyspace, column_family):
-        cfam = self.__get_column_family_def(keyspace, column_family)
-        if "key_validation_class" in cfam:
-            return cfam["key_validation_class"]
-        return None
+        return cfam.get("comparator", None)
 
     def decode_description(self, keyspace, column_family, row):
         description = []
@@ -60,16 +46,23 @@ class SchemaDecoder(object):
         return description
 
     def decode_row(self, keyspace, column_family, row):
-        comparator = self.__comparator_for(keyspace, column_family)
-        unmarshal = unmarshallers.get(comparator, unmarshal_noop)
+        cfdef = self.__get_column_family_def(keyspace, column_family)
+        key_alias = cfdef['key_alias']
+        validators = cfdef['columns']
+        default_validator = cfdef['default_validation_class']
+        key_validator = cfdef.get("key_validation_class", None)
+
         values = []
         for column in row.columns:
+            name = column.name
             if column.value is None:
                 values.append(None)
                 continue
-            if column.name == self.__get_column_family_def(keyspace, column_family)['key_alias']:
-                validator = self.__keytype_for(keyspace, column_family)
+
+            if name == key_alias:
+                validator = key_validator
             else:
-                validator = self.__validator_for(keyspace, column_family, column.name)
+                validator = validators.get(name, default_validator)
             values.append(unmarshallers.get(validator, unmarshal_noop)(column.value))
+
         return values

Modified: cassandra/drivers/py/test/test_query_preparation.py
URL: http://svn.apache.org/viewvc/cassandra/drivers/py/test/test_query_preparation.py?rev=1147937&r1=1147936&r2=1147937&view=diff
==============================================================================
--- cassandra/drivers/py/test/test_query_preparation.py (original)
+++ cassandra/drivers/py/test/test_query_preparation.py Mon Jul 18 15:48:00 2011
@@ -54,12 +54,12 @@ class TestPrepare(unittest.TestCase):
     def test_prepares(self):
         "test prepared queries against known standards"
         for (i, test) in enumerate(TESTS):
-            a = prepare(test, **ARGUMENTS[i])
+            a = prepare(test, ARGUMENTS[i])
             b = STANDARDS[i]
             assert a == b, "\n%s !=\n%s" % (a, b)
 
     def test_bad(self):
         "ensure bad calls raise exceptions"
-        self.assertRaises(KeyError, prepare, ":a :b", a=1)
-        self.assertRaises(cql.ProgrammingError, prepare, ":a :b", a=1, b=2, c=3)
-        self.assertRaises(cql.ProgrammingError, prepare, "none", a=1)
+        self.assertRaises(KeyError, prepare, ":a :b", {'a': 1})
+        self.assertRaises(cql.ProgrammingError, prepare, ":a :b", {'a': 1, 'b': 2, 'c': 3})
+        self.assertRaises(cql.ProgrammingError, prepare, "none", {'a': 1})