diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2022-08-02 16:18:18 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2022-08-05 10:07:15 -0400 |
| commit | 82a1d4096fbfe94e2fa626d65d5c3beb2c6afa37 (patch) | |
| tree | baca62a1a0784f192e65402f824319b0403c6847 /test/sql/test_insert.py | |
| parent | 0027b3a4bc54599ac8102a4a3d81d8007738903e (diff) | |
| download | sqlalchemy-82a1d4096fbfe94e2fa626d65d5c3beb2c6afa37.tar.gz | |
include column.default, column.onupdate in eager_defaults
Fixed bug in the behavior of the :paramref:`_orm.Mapper.eager_defaults`
parameter such that client-side SQL default or onupdate expressions in the
table definition alone will trigger a fetch operation using RETURNING or
SELECT when the ORM emits an INSERT or UPDATE for the row. Previously, only
server side defaults established as part of table DDL and/or server-side
onupdate expressions would trigger this fetch, even though client-side SQL
expressions would be included when the fetch was rendered.
Fixes: #7438
Change-Id: Iba719298ba4a26d185edec97ba77d2d54585e5a4
Diffstat (limited to 'test/sql/test_insert.py')
| -rw-r--r-- | test/sql/test_insert.py | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/test/sql/test_insert.py b/test/sql/test_insert.py index 071f595f3..61e0783e4 100644 --- a/test/sql/test_insert.py +++ b/test/sql/test_insert.py @@ -1,4 +1,7 @@ #! coding:utf-8 +from __future__ import annotations + +from typing import Tuple from sqlalchemy import bindparam from sqlalchemy import Column @@ -66,6 +69,30 @@ class _InsertTestBase: class InsertTest(_InsertTestBase, fixtures.TablesTest, AssertsCompiledSQL): __dialect__ = "default" + @testing.combinations( + ((), ("z",), ()), + (("x",), (), ()), + (("x",), ("y",), ("x", "y")), + (("x", "y"), ("y",), ("x", "y")), + ) + def test_return_defaults_generative( + self, + initial_keys: Tuple[str, ...], + second_keys: Tuple[str, ...], + expected_keys: Tuple[str, ...], + ): + t = table("foo", column("x"), column("y"), column("z")) + + initial_cols = tuple(t.c[initial_keys]) + second_cols = tuple(t.c[second_keys]) + expected = set(t.c[expected_keys]) + + stmt = t.insert().return_defaults(*initial_cols) + eq_(stmt._return_defaults_columns, initial_cols) + stmt = stmt.return_defaults(*second_cols) + assert isinstance(stmt._return_defaults_columns, tuple) + eq_(set(stmt._return_defaults_columns), expected) + def test_binds_that_match_columns(self): """test bind params named after column names replace the normal SET/VALUES generation.""" |
