Skip to content

Commit d8d94f9

Browse files
committed
Fix binary data representation in SQL formatters
1 parent 0b8fdec commit d8d94f9

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

mycli/packages/tabular_output/sql_format.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,13 @@
99
preprocessors = ()
1010

1111

12+
def escape_for_sql_statement(value):
13+
if isinstance(value, bytes):
14+
return f"X'{value.hex()}'"
15+
else:
16+
return formatter.mycli.sqlexecute.conn.escape(value)
17+
18+
1219
def adapter(data, headers, table_format=None, **kwargs):
1320
tables = extract_tables(formatter.query)
1421
if len(tables) > 0:
@@ -19,13 +26,12 @@ def adapter(data, headers, table_format=None, **kwargs):
1926
table_name = table[1]
2027
else:
2128
table_name = "`DUAL`"
22-
escape = formatter.mycli.sqlexecute.conn.escape
2329
if table_format == 'sql-insert':
2430
h = "`, `".join(headers)
2531
yield "INSERT INTO {} (`{}`) VALUES".format(table_name, h)
2632
prefix = " "
2733
for d in data:
28-
values = ", ".join(escape(v) for i, v in enumerate(d))
34+
values = ", ".join(escape_for_sql_statement(v) for i, v in enumerate(d))
2935
yield "{}({})".format(prefix, values)
3036
if prefix == " ":
3137
prefix = ", "
@@ -39,11 +45,11 @@ def adapter(data, headers, table_format=None, **kwargs):
3945
yield "UPDATE {} SET".format(table_name)
4046
prefix = " "
4147
for i, v in enumerate(d[keys:], keys):
42-
yield "{}`{}` = {}".format(prefix, headers[i], escape(v))
48+
yield "{}`{}` = {}".format(prefix, headers[i], escape_for_sql_statement(v))
4349
if prefix == " ":
4450
prefix = ", "
4551
f = "`{}` = {}"
46-
where = (f.format(headers[i], escape(d[i])) for i in range(keys))
52+
where = (f.format(headers[i], escape_for_sql_statement(d[i])) for i in range(keys))
4753
yield "WHERE {};".format(" AND ".join(where))
4854

4955

0 commit comments

Comments
 (0)