(self, user_address_fixture, flush_user_first)
| 1659 | @testing.requires.insert_executemany_returning |
| 1660 | @testing.combinations(True, False, argnames="flush_user_first") |
| 1661 | def test_bulk_insert(self, user_address_fixture, flush_user_first): |
| 1662 | User, Address = user_address_fixture( |
| 1663 | addresses_args={"backref": "user"} |
| 1664 | ) |
| 1665 | sess = fixture_session() |
| 1666 | |
| 1667 | u1 = User(name="x") |
| 1668 | sess.add(u1) |
| 1669 | |
| 1670 | # ha ha! u1 is not persistent yet. autoflush won't happen |
| 1671 | # until sess.scalars() actually runs. statement has to be |
| 1672 | # created with a pending parameter, not actual parameter |
| 1673 | assert inspect(u1).pending |
| 1674 | |
| 1675 | if flush_user_first: |
| 1676 | sess.flush() |
| 1677 | |
| 1678 | with self.sql_execution_asserter() as asserter: |
| 1679 | addresses = sess.scalars( |
| 1680 | u1.addresses.insert().returning(Address), |
| 1681 | [ |
| 1682 | {"email_address": "e1"}, |
| 1683 | {"email_address": "e2"}, |
| 1684 | {"email_address": "e3"}, |
| 1685 | ], |
| 1686 | ).all() |
| 1687 | |
| 1688 | eq_( |
| 1689 | addresses, |
| 1690 | [ |
| 1691 | Address(user=User(name="x"), email_address="e1"), |
| 1692 | Address(user=User(name="x"), email_address="e2"), |
| 1693 | Address(user=User(name="x"), email_address="e3"), |
| 1694 | ], |
| 1695 | ) |
| 1696 | |
| 1697 | uid = u1.id |
| 1698 | |
| 1699 | asserter.assert_( |
| 1700 | Conditional( |
| 1701 | not flush_user_first, |
| 1702 | [ |
| 1703 | CompiledSQL( |
| 1704 | "INSERT INTO users (name) VALUES (:name)", |
| 1705 | [{"name": "x"}], |
| 1706 | ) |
| 1707 | ], |
| 1708 | [], |
| 1709 | ), |
| 1710 | CompiledSQL( |
| 1711 | "INSERT INTO addresses (user_id, email_address) " |
| 1712 | "VALUES (:param_1, :email_address) " |
| 1713 | "RETURNING addresses.id, addresses.user_id, " |
| 1714 | "addresses.email_address", |
| 1715 | [ |
| 1716 | {"param_1": uid, "email_address": "e1"}, |
| 1717 | {"param_1": uid, "email_address": "e2"}, |
| 1718 | {"param_1": uid, "email_address": "e3"}, |
nothing calls this directly
no test coverage detected