Skip to content

Commit 0dcda5e

Browse files
author
Ilya Gurov
authored
fix: support INSERT from SELECT clause with args (#306)
* fix: support INSERT from SELECT clause with args * the fix itself * update docstrings
1 parent 83adb1e commit 0dcda5e

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

google/cloud/spanner_dbapi/parse_utils.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -224,11 +224,11 @@ def parse_insert(insert_sql, params):
224224
}
225225
226226
Case b)
227-
SQL: 'INSERT INTO T (s, c) SELECT st, zc FROM cus ORDER BY fn, ln',
227+
SQL: 'INSERT INTO T (s, c) SELECT st, zc FROM cus WHERE col IN (%s, %s)',
228228
it produces:
229229
{
230230
'sql_params_list': [
231-
('INSERT INTO T (s, c) SELECT st, zc FROM cus ORDER BY fn, ln', None),
231+
('INSERT INTO T (s, c) SELECT st, zc FROM cus ORDER BY fn, ln', ('a', 'b')),
232232
]
233233
}
234234
@@ -276,7 +276,7 @@ def parse_insert(insert_sql, params):
276276
if not after_values_sql:
277277
# Case b)
278278
insert_sql = sanitize_literals_for_upload(insert_sql)
279-
return {"sql_params_list": [(insert_sql, None)]}
279+
return {"sql_params_list": [(insert_sql, params)]}
280280

281281
if not params:
282282
# Case a) perhaps?

tests/unit/spanner_dbapi/test_parse_utils.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -425,3 +425,19 @@ def test_escape_name(self):
425425
with self.subTest(name=name):
426426
got = escape_name(name)
427427
self.assertEqual(got, want)
428+
429+
def test_insert_from_select(self):
430+
"""Check that INSERT from SELECT clause can be executed with arguments."""
431+
from google.cloud.spanner_dbapi.parse_utils import parse_insert
432+
433+
SQL = """
434+
INSERT INTO tab_name (id, data)
435+
SELECT tab_name.id + %s AS anon_1, tab_name.data
436+
FROM tab_name
437+
WHERE tab_name.data IN (%s, %s)
438+
"""
439+
ARGS = [5, "data2", "data3"]
440+
441+
self.assertEqual(
442+
parse_insert(SQL, ARGS), {"sql_params_list": [(SQL, ARGS)]},
443+
)

0 commit comments

Comments
 (0)