@@ -703,14 +703,18 @@ async def test_database_url_interface(database_url):
703
703
704
704
@pytest .mark .parametrize ("database_url" , DATABASE_URLS )
705
705
@async_adapter
706
- async def test_iterate_outside_transaction (database_url ):
706
+ async def test_iterate_outside_transaction_with_values (database_url ):
707
707
"""
708
708
Ensure `iterate()` works even without a transaction on all drivers.
709
-
710
709
The asyncpg driver relies on server-side cursors without hold
711
710
for iteration, which requires a transaction to be created.
712
711
This is mentionned in both their documentation and their test suite.
713
712
"""
713
+
714
+ database_url = DatabaseURL (database_url )
715
+ if database_url .dialect == "mysql" :
716
+ pytest .skip ("MySQL does not support `FROM (VALUES ...)` (F641)" )
717
+
714
718
async with Database (database_url ) as database :
715
719
query = "SELECT * FROM (VALUES (1), (2), (3), (4), (5)) as t"
716
720
iterate_results = []
@@ -720,3 +724,32 @@ async def test_iterate_outside_transaction(database_url):
720
724
721
725
assert len (iterate_results ) == 5
722
726
assert iterate_results == [(1 ,), (2 ,), (3 ,), (4 ,), (5 ,)]
727
+
728
+
729
+ @pytest .mark .parametrize ("database_url" , DATABASE_URLS )
730
+ @async_adapter
731
+ async def test_iterate_outside_transaction_with_temp_table (database_url ):
732
+ """
733
+ Same as test_iterate_outside_transaction_with_values but uses a
734
+ temporary table instead of a list of values.
735
+ """
736
+
737
+ database_url = DatabaseURL (database_url )
738
+ if database_url .dialect == "sqlite" :
739
+ pytest .skip ("SQLite interface does not work with temporary tables." )
740
+
741
+ async with Database (database_url ) as database :
742
+ query = "CREATE TEMPORARY TABLE no_transac(num INTEGER)"
743
+ await database .execute (query )
744
+
745
+ query = "INSERT INTO no_transac(num) VALUES (1), (2), (3), (4), (5)"
746
+ await database .execute (query )
747
+
748
+ query = "SELECT * FROM no_transac"
749
+ iterate_results = []
750
+
751
+ async for result in database .iterate (query = query ):
752
+ iterate_results .append (result )
753
+
754
+ assert len (iterate_results ) == 5
755
+ assert iterate_results == [(1 ,), (2 ,), (3 ,), (4 ,), (5 ,)]
0 commit comments