Skip to content

Commit e5d4901

Browse files
author
Ilya Gurov
authored
fix(db_api): revert Mutations API usage (#285)
* fix: revert #233 * update docstrings
1 parent 1a7c9d2 commit e5d4901

File tree

2 files changed

+46
-28
lines changed

2 files changed

+46
-28
lines changed

google/cloud/spanner_dbapi/parse_utils.py

+15-11
Original file line numberDiff line numberDiff line change
@@ -237,10 +237,10 @@ def parse_insert(insert_sql, params):
237237
Params: ['a', 'b', 'c', 'd']
238238
it produces:
239239
{
240-
'homogenous': True,
241-
'table': 'T',
242-
'columns': ['f1', 'f2'],
243-
'values': [('a', 'b',), ('c', 'd',)],
240+
'sql_params_list': [
241+
('INSERT INTO T (f1, f2) VALUES (%s, %s)', ('a', 'b')),
242+
('INSERT INTO T (f1, f2) VALUES (%s, %s)', ('c', 'd'))
243+
],
244244
}
245245
246246
Case d)
@@ -249,7 +249,7 @@ def parse_insert(insert_sql, params):
249249
it produces:
250250
{
251251
'sql_params_list': [
252-
('INSERT INTO T (f1, f2) VALUES (%s, LOWER(%s))', ('a', 'b',))
252+
('INSERT INTO T (f1, f2) VALUES (%s, LOWER(%s))', ('a', 'b',)),
253253
('INSERT INTO T (f1, f2) VALUES (UPPER(%s), %s)', ('c', 'd',))
254254
],
255255
}
@@ -306,15 +306,19 @@ def parse_insert(insert_sql, params):
306306
# Case c)
307307

308308
columns = [mi.strip(" `") for mi in match.group("columns").split(",")]
309+
sql_params_list = []
310+
insert_sql_preamble = "INSERT INTO %s (%s) VALUES %s" % (
311+
match.group("table_name"),
312+
match.group("columns"),
313+
values.argv[0],
314+
)
309315
values_pyformat = [str(arg) for arg in values.argv]
310316
rows_list = rows_for_insert_or_update(columns, params, values_pyformat)
317+
insert_sql_preamble = sanitize_literals_for_upload(insert_sql_preamble)
318+
for row in rows_list:
319+
sql_params_list.append((insert_sql_preamble, row))
311320

312-
return {
313-
"homogenous": True,
314-
"table": match.group("table_name"),
315-
"columns": columns,
316-
"values": rows_list,
317-
}
321+
return {"sql_params_list": sql_params_list}
318322

319323
# Case d)
320324
# insert_sql is of the form:

tests/unit/spanner_dbapi/test_parse_utils.py

+31-17
Original file line numberDiff line numberDiff line change
@@ -72,20 +72,32 @@ def test_parse_insert(self):
7272
"INSERT INTO django_migrations (app, name, applied) VALUES (%s, %s, %s)",
7373
[1, 2, 3, 4, 5, 6],
7474
{
75-
"homogenous": True,
76-
"table": "django_migrations",
77-
"columns": ["app", "name", "applied"],
78-
"values": [(1, 2, 3), (4, 5, 6)],
75+
"sql_params_list": [
76+
(
77+
"INSERT INTO django_migrations (app, name, applied) VALUES (%s, %s, %s)",
78+
(1, 2, 3),
79+
),
80+
(
81+
"INSERT INTO django_migrations (app, name, applied) VALUES (%s, %s, %s)",
82+
(4, 5, 6),
83+
),
84+
]
7985
},
8086
),
8187
(
8288
"INSERT INTO django_migrations(app, name, applied) VALUES (%s, %s, %s)",
8389
[1, 2, 3, 4, 5, 6],
8490
{
85-
"homogenous": True,
86-
"table": "django_migrations",
87-
"columns": ["app", "name", "applied"],
88-
"values": [(1, 2, 3), (4, 5, 6)],
91+
"sql_params_list": [
92+
(
93+
"INSERT INTO django_migrations (app, name, applied) VALUES (%s, %s, %s)",
94+
(1, 2, 3),
95+
),
96+
(
97+
"INSERT INTO django_migrations (app, name, applied) VALUES (%s, %s, %s)",
98+
(4, 5, 6),
99+
),
100+
]
89101
},
90102
),
91103
(
@@ -106,23 +118,25 @@ def test_parse_insert(self):
106118
),
107119
(
108120
"INSERT INTO ap (n, ct, cn) "
109-
"VALUES (%s, %s, %s), (%s, %s, %s), (%s, %s, %s),(%s,%s, %s)",
121+
"VALUES (%s, %s, %s), (%s, %s, %s), (%s, %s, %s),(%s, %s, %s)",
110122
(1, 2, 3, 4, 5, 6, 7, 8, 9),
111123
{
112-
"homogenous": True,
113-
"table": "ap",
114-
"columns": ["n", "ct", "cn"],
115-
"values": [(1, 2, 3), (4, 5, 6), (7, 8, 9)],
124+
"sql_params_list": [
125+
("INSERT INTO ap (n, ct, cn) VALUES (%s, %s, %s)", (1, 2, 3)),
126+
("INSERT INTO ap (n, ct, cn) VALUES (%s, %s, %s)", (4, 5, 6)),
127+
("INSERT INTO ap (n, ct, cn) VALUES (%s, %s, %s)", (7, 8, 9)),
128+
]
116129
},
117130
),
118131
(
119132
"INSERT INTO `no` (`yes`) VALUES (%s)",
120133
(1, 4, 5),
121134
{
122-
"homogenous": True,
123-
"table": "`no`",
124-
"columns": ["yes"],
125-
"values": [(1,), (4,), (5,)],
135+
"sql_params_list": [
136+
("INSERT INTO `no` (`yes`) VALUES (%s)", (1,)),
137+
("INSERT INTO `no` (`yes`) VALUES (%s)", (4,)),
138+
("INSERT INTO `no` (`yes`) VALUES (%s)", (5,)),
139+
]
126140
},
127141
),
128142
(

0 commit comments

Comments
 (0)