diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-04-07 17:51:34 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-04-07 17:52:23 -0400 |
| commit | 26f1efcb055b70fe86a643338b65c849f9e2fa4e (patch) | |
| tree | f0299de87e7363be1da59e145cd6cbe19105639f | |
| parent | 4d21920638af4729b6ff09b1ac8c3a20878bd922 (diff) | |
| download | sqlalchemy-26f1efcb055b70fe86a643338b65c849f9e2fa4e.tar.gz | |
support multivalues insert on strsqlcompiler
Fixed the "stringify" compiler to support a basic stringification
of a "multirow" INSERT statement, i.e. one with multiple tuples
following the VALUES keyword.
Change-Id: I1fe38d204d9965275d3a72157d5a72a53bec4b11
| -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() |
