From cad39537efecb9847ddab2dda9bbe2add6fd0be6 Mon Sep 17 00:00:00 2001 From: Kai Lautaportti Date: Fri, 22 Mar 2013 09:52:18 +0200 Subject: [PATCH] Ignore empty batches instead of sending invalid CQL to Cassandra. --- cqlengine/query.py | 12 ++++++++---- cqlengine/tests/test_batch_query.py | 6 ++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/cqlengine/query.py b/cqlengine/query.py index 0e2fd4e3..30799867 100644 --- a/cqlengine/query.py +++ b/cqlengine/query.py @@ -169,6 +169,10 @@ class BatchQuery(object): self.queries.append((query, params)) def execute(self): + if len(self.queries) == 0: + # Empty batch is a no-op + return + opener = 'BEGIN ' + (self.batch_type + ' ' if self.batch_type else '') + ' BATCH' if self.timestamp: epoch = datetime(1970, 1, 1) @@ -257,7 +261,7 @@ class QuerySet(object): def __len__(self): return self.count() - + def __del__(self): if self._con: self._con.close() @@ -347,7 +351,7 @@ class QuerySet(object): value_dict = dict(zip(names, values)) self._result_idx += 1 self._result_cache[self._result_idx] = self._construct_instance(value_dict) - + #return the connection to the connection pool if we have all objects if self._result_cache and self._result_cache[-1] is not None: self._con.close() @@ -389,7 +393,7 @@ class QuerySet(object): else: self._fill_result_cache_to_idx(s) return self._result_cache[s] - + def _construct_instance(self, values): #translate column names to model names @@ -476,7 +480,7 @@ class QuerySet(object): '{} objects found'.format(len(self._result_cache))) else: return self[0] - + def order_by(self, colname): """ orders the result set. diff --git a/cqlengine/tests/test_batch_query.py b/cqlengine/tests/test_batch_query.py index 6ba60877..7ee98b70 100644 --- a/cqlengine/tests/test_batch_query.py +++ b/cqlengine/tests/test_batch_query.py @@ -103,3 +103,9 @@ class BatchQueryTests(BaseCassEngTestCase): for m in TestMultiKeyModel.all(): m.delete() + def test_empty_batch(self): + b = BatchQuery() + b.execute() + + with BatchQuery() as b: + pass