(self, user_address_fixture, flush_user_first)
| 1772 | @testing.requires.update_returning |
| 1773 | @testing.combinations(True, False, argnames="flush_user_first") |
| 1774 | def test_bulk_update(self, user_address_fixture, flush_user_first): |
| 1775 | User, Address = user_address_fixture( |
| 1776 | addresses_args={"backref": "user"} |
| 1777 | ) |
| 1778 | sess = fixture_session() |
| 1779 | |
| 1780 | u1 = User( |
| 1781 | name="x", |
| 1782 | addresses=[ |
| 1783 | Address(email_address="e1"), |
| 1784 | Address(email_address="e2"), |
| 1785 | Address(email_address="e3"), |
| 1786 | ], |
| 1787 | ) |
| 1788 | sess.add(u1) |
| 1789 | |
| 1790 | # ha ha! u1 is not persistent yet. autoflush won't happen |
| 1791 | # until sess.scalars() actually runs. statement has to be |
| 1792 | # created with a pending parameter, not actual parameter |
| 1793 | assert inspect(u1).pending |
| 1794 | |
| 1795 | if flush_user_first: |
| 1796 | sess.flush() |
| 1797 | |
| 1798 | with self.sql_execution_asserter() as asserter: |
| 1799 | addresses = sess.scalars( |
| 1800 | u1.addresses.update() |
| 1801 | .values(email_address=Address.email_address + "@foo.com") |
| 1802 | .returning(Address), |
| 1803 | ).all() |
| 1804 | |
| 1805 | eq_( |
| 1806 | addresses, |
| 1807 | [ |
| 1808 | Address(user=User(name="x"), email_address="e1@foo.com"), |
| 1809 | Address(user=User(name="x"), email_address="e2@foo.com"), |
| 1810 | Address(user=User(name="x"), email_address="e3@foo.com"), |
| 1811 | ], |
| 1812 | ) |
| 1813 | |
| 1814 | uid = u1.id |
| 1815 | |
| 1816 | asserter.assert_( |
| 1817 | Conditional( |
| 1818 | not flush_user_first, |
| 1819 | [ |
| 1820 | CompiledSQL( |
| 1821 | "INSERT INTO users (name) VALUES (:name)", |
| 1822 | [{"name": "x"}], |
| 1823 | ), |
| 1824 | Conditional( |
| 1825 | testing.requires.insert_executemany_returning.enabled, |
| 1826 | [ |
| 1827 | CompiledSQL( |
| 1828 | "INSERT INTO addresses " |
| 1829 | "(user_id, email_address) " |
| 1830 | "VALUES (:user_id, :email_address) " |
| 1831 | "RETURNING addresses.id", |
nothing calls this directly
no test coverage detected