diff options
| -rw-r--r-- | doc/build/changelog/unreleased_14/mr_str.rst | 7 | ||||
| -rw-r--r-- | lib/sqlalchemy/engine/default.py | 1 | ||||
| -rw-r--r-- | test/sql/test_compiler.py | 11 |
3 files changed, 19 insertions, 0 deletions
diff --git a/doc/build/changelog/unreleased_14/mr_str.rst b/doc/build/changelog/unreleased_14/mr_str.rst new file mode 100644 index 000000000..f8511dc87 --- /dev/null +++ b/doc/build/changelog/unreleased_14/mr_str.rst @@ -0,0 +1,7 @@ +.. change:: + :tags: bug, sql + + Fixed the "stringify" compiler to support a basic stringification + of a "multirow" INSERT statement, i.e. one with multiple tuples + following the VALUES keyword. + diff --git a/lib/sqlalchemy/engine/default.py b/lib/sqlalchemy/engine/default.py index 5193a0273..0242d9812 100644 --- a/lib/sqlalchemy/engine/default.py +++ b/lib/sqlalchemy/engine/default.py @@ -790,6 +790,7 @@ class StrCompileDialect(DefaultDialect): supports_native_boolean = True + supports_multivalues_insert = True supports_simple_order_by_label = True colspecs = { diff --git a/test/sql/test_compiler.py b/test/sql/test_compiler.py index d7a74ee2e..6cadda0bb 100644 --- a/test/sql/test_compiler.py +++ b/test/sql/test_compiler.py @@ -4415,6 +4415,17 @@ class StringifySpecialTest(fixtures.TestBase): stmt = Column(Integer) == 5 eq_ignore_whitespace(str(stmt), '"<name unknown>" = :param_1') + def test_empty_insert(self): + stmt = table1.insert().values() + eq_ignore_whitespace(str(stmt), "INSERT INTO mytable () VALUES ()") + + def test_multirow_insert(self): + stmt = table1.insert().values([{"myid": 1}, {"myid": 2}]) + eq_ignore_whitespace( + str(stmt), + "INSERT INTO mytable (myid) VALUES (:myid_m0), (:myid_m1)", + ) + def test_cte(self): # stringify of these was supported anyway by defaultdialect. stmt = select(table1.c.myid).cte() |
