Переглянути джерело

fix: Database._transform_query

* Handle dict substitutions in transformations too
* Allow list / tuple values
* Check for values inconsistencies before flattening step
version-14
Gavin D'souza 2 роки тому
джерело
коміт
39d30ffeaa
1 змінених файлів з 14 додано та 12 видалено
  1. +14
    -12
      frappe/database/mariadb/database.py

+ 14
- 12
frappe/database/mariadb/database.py Переглянути файл

@@ -236,6 +236,18 @@ class MariaDBConnectionUtil:
ref: https://jira.mariadb.org/projects/CONPY/issues/CONPY-205
"""
pos_values = []
named_tokens = _PARAM_COMP.findall(query)

for token in named_tokens:
key = token[2:-2]
val = values[key]
if isinstance(val, (tuple, list)):
val = escape_sequence(val)
pos_values.append(val)
query = query.replace(token, "%s", 1)

if pos_values:
values = pos_values

# Handle sequences in values - PyMySQL & Psycopg allowed them but MariaDB client doesn't
# This leads to a DataError. MariaDB connector expects a flat tuple. Build queries with
@@ -246,7 +258,7 @@ class MariaDBConnectionUtil:

for i, val in enumerate(values):
pos = next(find_iter)
if isinstance(val, list):
if isinstance(val, (list, tuple)):
query = (
query[: pos.start()]
+ escape_sequence(val, charset=self._conn.character_set)
@@ -254,17 +266,7 @@ class MariaDBConnectionUtil:
)
del values[i]

named_tokens = _PARAM_COMP.findall(query)

if not named_tokens or len(set(named_tokens)) == len(values):
return query, values

for token in named_tokens:
key = token[2:-2]
pos_values.append(values[key])
query = query.replace(token, "%s", 1)

return query, pos_values
return query, values


class MariaDBDatabase(MariaDBConnectionUtil, MariaDBExceptionUtil, Database):


Завантаження…
Відмінити
Зберегти