Skip to content

Commit 4020a0a

Browse files
committed
Execute prepared statements on client side by default
1 parent 8affa61 commit 4020a0a

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

trino/dbapi.py

+16-2
Original file line numberDiff line numberDiff line change
@@ -429,8 +429,8 @@ def _deallocate_prepared_statement(self, statement_name: str) -> None:
429429
def _generate_unique_statement_name(self):
430430
return 'st_' + uuid.uuid4().hex.replace('-', '')
431431

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:
434434
assert isinstance(params, (list, tuple)), (
435435
'params must be a list or tuple containing the query '
436436
'parameter values'
@@ -454,6 +454,20 @@ def execute(self, operation, params=None):
454454
self._deallocate_prepared_statement(statement_name)
455455

456456
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+
457471
self._query = trino.client.TrinoQuery(self._request, sql=operation,
458472
experimental_python_types=self._experimental_pyton_types)
459473
result = self._query.execute()

0 commit comments

Comments
 (0)