@@ -429,8 +429,8 @@ def _deallocate_prepared_statement(self, statement_name: str) -> None:
429
429
def _generate_unique_statement_name (self ):
430
430
return 'st_' + uuid .uuid4 ().hex .replace ('-' , '' )
431
431
432
- def execute (self , operation , params = None ):
433
- if params :
432
+ def execute (self , operation , params = None , prepared_statements_client_side = True ):
433
+ if params and not prepared_statements_client_side :
434
434
assert isinstance (params , (list , tuple )), (
435
435
'params must be a list or tuple containing the query '
436
436
'parameter values'
@@ -454,6 +454,20 @@ def execute(self, operation, params=None):
454
454
self ._deallocate_prepared_statement (statement_name )
455
455
456
456
else :
457
+ if params :
458
+ assert isinstance (params , (list , tuple )), (
459
+ 'params must be a list or tuple containing the query '
460
+ 'parameter values'
461
+ )
462
+
463
+ # substitue parameters in query in reversed order
464
+ question_mark_positions = [index for index , character in enumerate (operation ) if character == '?' ]
465
+ question_mark_positions .reverse ()
466
+ for index , value in enumerate (reversed (params )):
467
+ operation = "" .join ([operation [:question_mark_positions [index ]],
468
+ "'" , value , "'" ,
469
+ operation [question_mark_positions [index ] + 1 :]])
470
+
457
471
self ._query = trino .client .TrinoQuery (self ._request , sql = operation ,
458
472
experimental_python_types = self ._experimental_pyton_types )
459
473
result = self ._query .execute ()
0 commit comments