@@ -55,6 +55,16 @@ def test_queries_iter_with_custom_delimiter_preserves_semicolons_inside_statemen
5555 ]
5656
5757
58+ def test_split_handles_placeholder_collision_in_original_sql () -> None :
59+ command = DelimiterCommand ()
60+ command .set ('$$' )
61+
62+ assert command ._split ('select \ufffc 1; select 2$$ select 3$$' ) == [
63+ 'select \ufffc 1; select 2$$' ,
64+ 'select 3$$' ,
65+ ]
66+
67+
5868def test_queries_iter_resplits_remaining_input_after_delimiter_change () -> None :
5969 command = DelimiterCommand ()
6070 queries = command .queries_iter ('select 1; delimiter $$ select 2$$ select 3$$' )
@@ -65,3 +75,26 @@ def test_queries_iter_resplits_remaining_input_after_delimiter_change() -> None:
6575 command .set ('$$' )
6676
6777 assert list (queries ) == ['select 2' , 'select 3' ]
78+
79+
80+ def test_queries_iter_reappends_old_trailing_delimiter_before_resplitting (monkeypatch ) -> None :
81+ command = DelimiterCommand ()
82+ command ._delimiter = ';;'
83+ split_calls : list [str ] = []
84+
85+ def fake_split (sql : str ) -> list [str ]:
86+ split_calls .append (sql )
87+ if len (split_calls ) == 1 :
88+ return ['delimiter $$;;' , 'select 2$$' ]
89+ return ['ignored' , 'select 2' ]
90+
91+ monkeypatch .setattr (command , '_split' , fake_split )
92+
93+ queries = command .queries_iter ('ignored' )
94+
95+ assert next (queries ) == 'delimiter $$'
96+
97+ command .set ('$$' )
98+
99+ assert list (queries ) == ['select 2' ]
100+ assert split_calls == ['ignored' , 'delimiter $$ select 2$$;;' ]
0 commit comments