From 959f21837b0e7e49040948babb1dfd5561254c85 Mon Sep 17 00:00:00 2001 From: drudim Date: Mon, 15 Dec 2014 22:40:44 +0200 Subject: [PATCH] Add support for several conditions in WHERE clause --- cqlsl/statements/base.py | 2 +- tests/units/test_statements.py | 22 +++++++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/cqlsl/statements/base.py b/cqlsl/statements/base.py index 87838ba..d6f2dda 100644 --- a/cqlsl/statements/base.py +++ b/cqlsl/statements/base.py @@ -34,7 +34,7 @@ def _get_where_clause(self): else: conditions.append('{} = %s'.format(field_name)) - return ', '.join(conditions) + return ' AND '.join(conditions) def _get_where_context(self): context = [] diff --git a/tests/units/test_statements.py b/tests/units/test_statements.py index 2b4a85c..5cf1346 100644 --- a/tests/units/test_statements.py +++ b/tests/units/test_statements.py @@ -34,6 +34,12 @@ def test_select_with_where(self): self.assertEqual('SELECT * FROM test_table WHERE test_id = %s', stmt.query) self.assertEqual((1,), stmt.context) + def test_select_with_complex_where(self): + stmt = select('test_table').where(part_a=1, part_b=2, part_c=3) + + self.assertEqual('SELECT * FROM test_table WHERE part_a = %s AND part_b = %s AND part_c = %s', stmt.query) + self.assertEqual((1, 2, 3), stmt.context) + def test_select_with_limit(self): stmt = select('test_table').limit(10) @@ -52,11 +58,11 @@ def test_delete_fields(self): self.assertEqual('DELETE some_number, some_string FROM test_table WHERE some_id = %s', stmt.query) self.assertEqual((1,), stmt.context) - def test_delete_with_where(self): - stmt = delete('test_table').fields('some_number').where(some_id=1) + def test_delete_with_complex_where(self): + stmt = delete('test_table').fields('some_number').where(part_a__in=['a'], part_b=1) - self.assertEqual('DELETE some_number FROM test_table WHERE some_id = %s', stmt.query) - self.assertEqual((1,), stmt.context) + self.assertEqual('DELETE some_number FROM test_table WHERE part_a IN %s AND part_b = %s', stmt.query) + self.assertEqual((ValueSequence(['a']), 1), stmt.context) def test_delete_map_item(self): stmt = delete('test_table').fields(some_map__keys=('some_field',)).where(some_id=1) @@ -76,12 +82,18 @@ def test_delete_list_item(self): self.assertEqual('DELETE some_list[%s], some_list[%s] FROM test_table WHERE some_id = %s', stmt.query) self.assertEqual((3, 4, 1), stmt.context) - def test_update_with_where(self): + def test_update(self): stmt = update('test_table').set(title='New title').where(id__in=['a', 'b', 'c']) self.assertEqual('UPDATE test_table SET title = %s WHERE id IN %s', stmt.query) self.assertEqual(('New title', ValueSequence(['a', 'b', 'c'])), stmt.context) + def test_update_with_complex_where(self): + stmt = update('test_table').set(title='New title').where(part_a=1, part_b__in=['a', 'b']) + + self.assertEqual('UPDATE test_table SET title = %s WHERE part_a = %s AND part_b IN %s', stmt.query) + self.assertEqual(('New title', 1, ValueSequence(['a', 'b'])), stmt.context) + def test_update_set_add(self): stmt = update('test_table').set(some_set__add={'a'}).where(some_id=1)