@@ -2716,6 +2716,34 @@ def test_delete_rows_success(conn, test_frame1, request):
2716
2716
assert pandasSQL .has_table ("temp_frame" )
2717
2717
2718
2718
2719
+ @pytest .mark .parametrize ("conn" , adbc_connectable )
2720
+ def test_delete_rows_is_atomic (conn , request ):
2721
+ import adbc_driver_manager
2722
+
2723
+ if "sqlite" in conn :
2724
+ pytest .skip ("sqlite has no inspection system" ) # TODO: Change error message
2725
+
2726
+ table_name = "temp_frame"
2727
+ original_df = DataFrame ({"a" : [1 , 2 , 3 ]})
2728
+ replacing_df = DataFrame ({"a" : ["a" , "b" , "c" , "d" ]})
2729
+
2730
+ conn = request .getfixturevalue (conn )
2731
+ pandasSQL = pandasSQL_builder (conn )
2732
+
2733
+ with pandasSQL .run_transaction ():
2734
+ pandasSQL .to_sql (original_df , table_name , if_exists = "fail" , index = False )
2735
+
2736
+ with pytest .raises (adbc_driver_manager .ProgrammingError ):
2737
+ with pandasSQL .run_transaction ():
2738
+ pandasSQL .to_sql (
2739
+ replacing_df , table_name , if_exists = "delete_rows" , index = False
2740
+ )
2741
+
2742
+ with pandasSQL .run_transaction ():
2743
+ unchanged_df = pandasSQL .read_query (f"SELECT * FROM { table_name } " )
2744
+ tm .assert_frame_equal (unchanged_df , original_df )
2745
+
2746
+
2719
2747
@pytest .mark .parametrize ("conn" , all_connectable )
2720
2748
def test_roundtrip (conn , request , test_frame1 ):
2721
2749
if conn == "sqlite_str" :
0 commit comments