77from django .db .backends .utils import CursorWrapper
88from django .db .models import Q
99from flag_engine .context .types import EvaluationContext
10- from flagsmith_sql_flag_engine import TranslateContext , translate_segment
10+ from flagsmith_sql_flag_engine import (
11+ Binder ,
12+ PyformatParamStyle ,
13+ TranslateContext ,
14+ translate_segment ,
15+ )
1116from flagsmith_sql_flag_engine .dialects import ClickHouseDialect
1217from task_processor .models import Task
1318
@@ -122,13 +127,15 @@ def compute_segment_counts_for_project(
122127 return []
123128
124129 dialect = ClickHouseDialect ()
130+ binder = Binder (PyformatParamStyle ())
125131 select_clauses : list [str ] = []
126132 for seg in segments :
127133 translate_ctx = TranslateContext (
128134 evaluation_context = EvaluationContext (
129135 environment = {"key" : "_count" , "name" : project .name }
130136 ),
131137 dialect = dialect ,
138+ binder = binder ,
132139 )
133140 predicate = translate_segment (
134141 map_segment_to_segment_context (map_segment_to_engine (seg )),
@@ -155,7 +162,7 @@ def compute_segment_counts_for_project(
155162 return []
156163
157164 sql = "\n UNION ALL\n " .join (select_clauses )
158- cursor .execute (sql , {"env_keys" : tuple (env_id_by_key )})
165+ cursor .execute (sql , {"env_keys" : tuple (env_id_by_key ), ** binder . params })
159166 rows : list [tuple [Any , ...]] = cursor .fetchall ()
160167 membership_counts : list [SegmentMembershipCount ] = []
161168 for row in rows :
@@ -186,11 +193,13 @@ def get_segment_members_page(
186193 Provide identifier as `cursor` to get a page after that identifier.
187194 Provide `q` to filter to identifiers containing it (case-insensitive).
188195 """
196+ binder = Binder (PyformatParamStyle ())
189197 translate_ctx = TranslateContext (
190198 evaluation_context = EvaluationContext (
191199 environment = {"key" : "_members" , "name" : segment .project .name }
192200 ),
193201 dialect = ClickHouseDialect (),
202+ binder = binder ,
194203 )
195204 predicate = translate_segment (
196205 map_segment_to_segment_context (map_segment_to_engine (segment )),
@@ -208,7 +217,11 @@ def get_segment_members_page(
208217 "i.environment_id = %(env_key)s" ,
209218 "i.is_deleted = false" ,
210219 ]
211- params : dict [str , Any ] = {"env_key" : environment .api_key , "limit" : limit }
220+ params : dict [str , Any ] = {
221+ "env_key" : environment .api_key ,
222+ "limit" : limit ,
223+ ** binder .params ,
224+ }
212225 if cursor :
213226 conditions .append ("i.identifier > %(cursor)s" )
214227 params ["cursor" ] = cursor
0 commit comments