(self, user_address_fixture, flush_user_first)
| 1816 | @testing.requires.delete_returning |
| 1817 | @testing.combinations(True, False, argnames="flush_user_first") |
| 1818 | def test_bulk_delete(self, user_address_fixture, flush_user_first): |
| 1819 | User, Address = user_address_fixture( |
| 1820 | addresses_args={"backref": "user"} |
| 1821 | ) |
| 1822 | sess = fixture_session() |
| 1823 | |
| 1824 | u1 = User( |
| 1825 | name="x", |
| 1826 | addresses=[ |
| 1827 | Address(email_address="e1"), |
| 1828 | Address(email_address="e2"), |
| 1829 | Address(email_address="e3"), |
| 1830 | ], |
| 1831 | ) |
| 1832 | sess.add(u1) |
| 1833 | |
| 1834 | # ha ha! u1 is not persistent yet. autoflush won't happen |
| 1835 | # until sess.scalars() actually runs. statement has to be |
| 1836 | # created with a pending parameter, not actual parameter |
| 1837 | assert inspect(u1).pending |
| 1838 | |
| 1839 | if flush_user_first: |
| 1840 | sess.flush() |
| 1841 | |
| 1842 | with self.sql_execution_asserter() as asserter: |
| 1843 | addresses = sess.scalars( |
| 1844 | u1.addresses.delete() |
| 1845 | .where(Address.email_address == "e2") |
| 1846 | .returning(Address), |
| 1847 | ).all() |
| 1848 | |
| 1849 | eq_( |
| 1850 | addresses, |
| 1851 | [ |
| 1852 | Address(email_address="e2"), |
| 1853 | ], |
| 1854 | ) |
| 1855 | |
| 1856 | uid = u1.id |
| 1857 | |
| 1858 | asserter.assert_( |
| 1859 | Conditional( |
| 1860 | not flush_user_first, |
| 1861 | [ |
| 1862 | CompiledSQL( |
| 1863 | "INSERT INTO users (name) VALUES (:name)", |
| 1864 | [{"name": "x"}], |
| 1865 | ), |
| 1866 | Conditional( |
| 1867 | testing.requires.insert_executemany_returning.enabled, |
| 1868 | [ |
| 1869 | CompiledSQL( |
| 1870 | "INSERT INTO addresses " |
| 1871 | "(user_id, email_address) " |
| 1872 | "VALUES (:user_id, :email_address) " |
| 1873 | "RETURNING addresses.id", |
| 1874 | [ |
| 1875 | {"user_id": uid, "email_address": "e1"}, |
nothing calls this directly
no test coverage detected