]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Correct for update.ordered_values() and use in new test
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 11 Aug 2020 21:46:11 +0000 (17:46 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 11 Aug 2020 21:46:11 +0000 (17:46 -0400)
The test for the parameter fix in c0685e5f41 was not working
deterministically on Python 2, so use ordered_values(), however
a second issue in ordered_values() was assuming each element was a
column, so also test for array-assignment expressions with
ordered_values.

Change-Id: I944c72a52700ffb4ab5ae1a83ae21f1efc84b505

lib/sqlalchemy/sql/crud.py
test/sql/test_update.py

index 7d0616da71f28733ccef4ec4ba1e35cb208343e4..b049b2f3372a68ea16ea960c858ff990a4977417 100644 (file)
@@ -337,9 +337,11 @@ def _scan_cols(
             _column_as_key(key) for key in compile_state._parameter_ordering
         ]
         ordered_keys = set(parameter_ordering)
-        cols = [stmt.table.c[key] for key in parameter_ordering] + [
-            c for c in stmt.table.c if c.key not in ordered_keys
-        ]
+        cols = [
+            stmt.table.c[key]
+            for key in parameter_ordering
+            if isinstance(key, util.string_types) and key in stmt.table.c
+        ] + [c for c in stmt.table.c if c.key not in ordered_keys]
     else:
         cols = stmt.table.columns
 
index 5db5fed11cf242ac115629266293f968044ab7c4..1eed378326bd418d8fe21b0b86c77ea74fb3a233 100644 (file)
@@ -873,7 +873,9 @@ class UpdateTest(_UpdateFromTestBase, fixtures.TablesTest, AssertsCompiledSQL):
             column("data2", ARRAY(Integer)),
         )
 
-        stmt = t.update().values({t.c.data1[5]: 7, t.c.data2[10]: 18})
+        stmt = t.update().ordered_values(
+            (t.c.data1[5], 7), (t.c.data2[10], 18)
+        )
         dialect = default.StrCompileDialect()
         dialect.paramstyle = "qmark"
         dialect.positional = True