From 42678f06b9f085fbf692f26fc1106d517d698551 Mon Sep 17 00:00:00 2001 From: sswest Date: Thu, 26 May 2022 18:43:49 +0800 Subject: [PATCH] Support GLOBAL IN --- src/clickhouse_orm/query.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/clickhouse_orm/query.py b/src/clickhouse_orm/query.py index 1fd5248..41b180a 100644 --- a/src/clickhouse_orm/query.py +++ b/src/clickhouse_orm/query.py @@ -66,6 +66,20 @@ class InOperator(Operator): return '%s IN (%s)' % (field_name, value) +class GlobalInOperator(Operator): + """An operator that implements Group IN.""" + + def to_sql(self, model_cls, field_name, value): + field = getattr(model_cls, field_name) + if isinstance(value, QuerySet): + value = value.as_sql() + elif isinstance(value, str): + pass + else: + value = comma_join([self._value_to_sql(field, v) for v in value]) + return '%s GLOBAL IN (%s)' % (field_name, value) + + class LikeOperator(Operator): """ A LIKE operator that matches the field to a given pattern. Can be @@ -152,7 +166,9 @@ register_operator('lt', SimpleOperator('<')) register_operator('lte', SimpleOperator('<=')) register_operator('between', BetweenOperator()) register_operator('in', InOperator()) +register_operator('gin', GlobalInOperator()) register_operator('not_in', NotOperator(InOperator())) +register_operator('not_gin', NotOperator(GlobalInOperator())) register_operator('contains', LikeOperator('%{}%')) register_operator('startswith', LikeOperator('{}%')) register_operator('endswith', LikeOperator('%{}'))