@@ -45,18 +45,6 @@ impl PyCaseBuilder {
4545 self . case_builder . lock ( )
4646 }
4747
48- fn take_case_builder ( & self ) -> PyDataFusionResult < CaseBuilder > {
49- let mut guard = self . lock_case_builder ( ) ;
50- guard. take ( ) . ok_or_else ( || {
51- PyDataFusionError :: Common ( "CaseBuilder has already been consumed" . to_string ( ) )
52- } )
53- }
54-
55- fn store_case_builder ( & self , builder : CaseBuilder ) {
56- let mut guard = self . lock_case_builder ( ) ;
57- * guard = Some ( builder) ;
58- }
59-
6048 pub fn into_case_builder ( self ) -> PyDataFusionResult < CaseBuilder > {
6149 let mut guard = self . case_builder . lock ( ) ;
6250 guard. take ( ) . ok_or_else ( || {
@@ -68,37 +56,30 @@ impl PyCaseBuilder {
6856#[ pymethods]
6957impl PyCaseBuilder {
7058 fn when ( & self , when : PyExpr , then : PyExpr ) -> PyDataFusionResult < PyCaseBuilder > {
71- let mut builder = self . take_case_builder ( ) ?;
59+ let mut guard = self . lock_case_builder ( ) ;
60+ let builder = guard. as_mut ( ) . ok_or_else ( || {
61+ PyDataFusionError :: Common ( "CaseBuilder has already been consumed" . to_string ( ) )
62+ } ) ?;
7263 let next_builder = builder. when ( when. expr , then. expr ) ;
73- self . store_case_builder ( builder) ;
7464 Ok ( next_builder. into ( ) )
7565 }
7666
7767 fn otherwise ( & self , else_expr : PyExpr ) -> PyDataFusionResult < PyExpr > {
78- let mut builder = self . take_case_builder ( ) ?;
79- match builder. otherwise ( else_expr. expr ) {
80- Ok ( expr) => {
81- self . store_case_builder ( builder) ;
82- Ok ( expr. clone ( ) . into ( ) )
83- }
84- Err ( err) => {
85- self . store_case_builder ( builder) ;
86- Err ( err. into ( ) )
87- }
88- }
68+ let mut guard = self . lock_case_builder ( ) ;
69+ let builder = guard. as_mut ( ) . ok_or_else ( || {
70+ PyDataFusionError :: Common ( "CaseBuilder has already been consumed" . to_string ( ) )
71+ } ) ?;
72+ builder
73+ . otherwise ( else_expr. expr )
74+ . map ( |expr| expr. into ( ) )
75+ . map_err ( Into :: into)
8976 }
9077
9178 fn end ( & self ) -> PyDataFusionResult < PyExpr > {
92- let builder = self . take_case_builder ( ) ?;
93- match builder. end ( ) {
94- Ok ( expr) => {
95- self . store_case_builder ( builder) ;
96- Ok ( expr. clone ( ) . into ( ) )
97- }
98- Err ( err) => {
99- self . store_case_builder ( builder) ;
100- Err ( err. into ( ) )
101- }
102- }
79+ let mut guard = self . lock_case_builder ( ) ;
80+ let builder = guard. as_mut ( ) . ok_or_else ( || {
81+ PyDataFusionError :: Common ( "CaseBuilder has already been consumed" . to_string ( ) )
82+ } ) ?;
83+ builder. end ( ) . map ( |expr| expr. into ( ) ) . map_err ( Into :: into)
10384 }
10485}
0 commit comments