(self, user_address_fixture, flush_user_first)
| 1723 | @testing.requires.update_returning |
| 1724 | @testing.combinations(True, False, argnames="flush_user_first") |
| 1725 | def test_bulk_update(self, user_address_fixture, flush_user_first): |
| 1726 | User, Address = user_address_fixture( |
| 1727 | addresses_args={"backref": "user"} |
| 1728 | ) |
| 1729 | sess = fixture_session() |
| 1730 | |
| 1731 | u1 = User( |
| 1732 | name="x", |
| 1733 | addresses=[ |
| 1734 | Address(email_address="e1"), |
| 1735 | Address(email_address="e2"), |
| 1736 | Address(email_address="e3"), |
| 1737 | ], |
| 1738 | ) |
| 1739 | sess.add(u1) |
| 1740 | |
| 1741 | # ha ha! u1 is not persistent yet. autoflush won't happen |
| 1742 | # until sess.scalars() actually runs. statement has to be |
| 1743 | # created with a pending parameter, not actual parameter |
| 1744 | assert inspect(u1).pending |
| 1745 | |
| 1746 | if flush_user_first: |
| 1747 | sess.flush() |
| 1748 | |
| 1749 | with self.sql_execution_asserter() as asserter: |
| 1750 | addresses = sess.scalars( |
| 1751 | u1.addresses.update() |
| 1752 | .values(email_address=Address.email_address + "@foo.com") |
| 1753 | .returning(Address), |
| 1754 | ).all() |
| 1755 | |
| 1756 | eq_( |
| 1757 | addresses, |
| 1758 | [ |
| 1759 | Address(user=User(name="x"), email_address="e1@foo.com"), |
| 1760 | Address(user=User(name="x"), email_address="e2@foo.com"), |
| 1761 | Address(user=User(name="x"), email_address="e3@foo.com"), |
| 1762 | ], |
| 1763 | ) |
| 1764 | |
| 1765 | uid = u1.id |
| 1766 | |
| 1767 | asserter.assert_( |
| 1768 | Conditional( |
| 1769 | not flush_user_first, |
| 1770 | [ |
| 1771 | CompiledSQL( |
| 1772 | "INSERT INTO users (name) VALUES (:name)", |
| 1773 | [{"name": "x"}], |
| 1774 | ), |
| 1775 | Conditional( |
| 1776 | testing.requires.insert_executemany_returning.enabled, |
| 1777 | [ |
| 1778 | CompiledSQL( |
| 1779 | "INSERT INTO addresses " |
| 1780 | "(user_id, email_address) " |
| 1781 | "VALUES (:user_id, :email_address) " |
| 1782 | "RETURNING addresses.id", |
nothing calls this directly
no test coverage detected