Skip to content

Commit d327841

Browse files
committed
fix value parsing in extrinsic shovel
1 parent 88d1901 commit d327841

File tree

1 file changed

+10
-3
lines changed
  • scraper_service/shovel_extrinsics

1 file changed

+10
-3
lines changed

scraper_service/shovel_extrinsics/utils.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,20 @@ def format_value(value, column_type=None):
1111
if value is None:
1212
return "NULL"
1313
elif isinstance(value, str):
14-
# SQL requires strings to be wrapped in single quotes
15-
return f"'{value}'"
14+
# Use proper escaping for ClickHouse
15+
# Escape backslashes first, then single quotes, then other special chars
16+
escaped_value = value.replace('\\', '\\\\').replace("'", "\\'").replace('\n', '\\n').replace('\t', '\\t').replace('\r', '\\r')
17+
return f"'{escaped_value}'"
1618
elif isinstance(value, list):
1719
if isinstance(column_type, str) and "Array" in column_type:
1820
return value
1921
else:
20-
return f"'{json.dumps(value)}'"
22+
# json.dumps() already handles escaping within the JSON itself
23+
# We only need to escape single quotes for SQL string literal
24+
json_str = json.dumps(value)
25+
if "'" in json_str:
26+
json_str = json_str.replace("'", "\\'")
27+
return f"'{json_str}'"
2128
else:
2229
return value
2330

0 commit comments

Comments
 (0)