File tree Expand file tree Collapse file tree 2 files changed +32
-4
lines changed
Expand file tree Collapse file tree 2 files changed +32
-4
lines changed Original file line number Diff line number Diff line change @@ -200,6 +200,24 @@ def traverse_logical_plan(plan):
200200 assert not variant .negated ()
201201
202202
203+ def test_case_builder_error_preserves_builder_state ():
204+ case_builder = functions .when (lit (True ), lit (1 ))
205+
206+ with pytest .raises (Exception ) as exc_info :
207+ case_builder .otherwise (lit ("bad" ))
208+
209+ err_msg = str (exc_info .value )
210+ assert "multiple data types" in err_msg
211+ assert "CaseBuilder has already been consumed" not in err_msg
212+
213+ with pytest .raises (Exception ) as exc_info :
214+ case_builder .end ()
215+
216+ err_msg = str (exc_info .value )
217+ assert "multiple data types" in err_msg
218+ assert "CaseBuilder has already been consumed" not in err_msg
219+
220+
203221def test_expr_getitem () -> None :
204222 ctx = SessionContext ()
205223 data = {
Original file line number Diff line number Diff line change @@ -83,13 +83,23 @@ impl PyCaseBuilder {
8383
8484 fn otherwise ( & self , else_expr : PyExpr ) -> PyDataFusionResult < PyExpr > {
8585 let mut builder = self . take_case_builder ( ) ?;
86- let expr = builder. otherwise ( else_expr. expr ) ?;
87- Ok ( expr. clone ( ) . into ( ) )
86+ match builder. otherwise ( else_expr. expr ) {
87+ Ok ( expr) => Ok ( expr. clone ( ) . into ( ) ) ,
88+ Err ( err) => {
89+ self . store_case_builder ( builder) ?;
90+ Err ( err. into ( ) )
91+ }
92+ }
8893 }
8994
9095 fn end ( & self ) -> PyDataFusionResult < PyExpr > {
9196 let builder = self . take_case_builder ( ) ?;
92- let expr = builder. end ( ) ?;
93- Ok ( expr. clone ( ) . into ( ) )
97+ match builder. end ( ) {
98+ Ok ( expr) => Ok ( expr. clone ( ) . into ( ) ) ,
99+ Err ( err) => {
100+ self . store_case_builder ( builder) ?;
101+ Err ( err. into ( ) )
102+ }
103+ }
94104 }
95105}
You can’t perform that action at this time.
0 commit comments