From d7382e1ce2814440ba22cb12c18a46e00cc0c596 Mon Sep 17 00:00:00 2001 From: Itai Shirav Date: Sun, 10 Jun 2018 14:27:51 +0300 Subject: [PATCH] fix field name parsing when field contains double underscore #69 --- src/infi/clickhouse_orm/query.py | 6 +++++- tests/test_querysets.py | 16 ++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/infi/clickhouse_orm/query.py b/src/infi/clickhouse_orm/query.py index 487a836..4e079e5 100644 --- a/src/infi/clickhouse_orm/query.py +++ b/src/infi/clickhouse_orm/query.py @@ -157,7 +157,11 @@ class FOV(object): def __init__(self, field_name, operator, value): self._field_name = field_name - self._operator = _operators[operator] + self._operator = _operators.get(operator) + if self._operator is None: + # The field name contains __ like my__field + self._field_name = field_name + '__' + operator + self._operator = _operators['eq'] self._value = value def to_sql(self, model_cls): diff --git a/tests/test_querysets.py b/tests/test_querysets.py index 8f938fc..4176341 100644 --- a/tests/test_querysets.py +++ b/tests/test_querysets.py @@ -334,6 +334,20 @@ class AggregateTestCase(TestCaseWithData): print(qs.as_sql()) self.assertEquals(qs.count(), 1) + def test_double_underscore_field(self): + class Mdl(Model): + the__number = Int32Field() + the__next__number = Int32Field() + engine = Memory() + qs = Mdl.objects_in(self.database).filter(the__number=1) + self.assertEquals(qs.conditions_as_sql(), 'the__number = 1') + qs = Mdl.objects_in(self.database).filter(the__number__gt=1) + self.assertEquals(qs.conditions_as_sql(), 'the__number > 1') + qs = Mdl.objects_in(self.database).filter(the__next__number=1) + self.assertEquals(qs.conditions_as_sql(), 'the__next__number = 1') + qs = Mdl.objects_in(self.database).filter(the__next__number__gt=1) + self.assertEquals(qs.conditions_as_sql(), 'the__next__number > 1') + Color = Enum('Color', u'red blue green yellow brown white black') @@ -351,3 +365,5 @@ class SampleModel(Model): class Numbers(Model): number = UInt64Field() + +