Skip to content

Commit 64faca2

Browse files
committed
Refactor PyCaseBuilder methods to eliminate redundant take/store logic
1 parent b213bd4 commit 64faca2

File tree

1 file changed

+17
-36
lines changed

1 file changed

+17
-36
lines changed

src/expr/conditional_expr.rs

Lines changed: 17 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -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]
6957
impl 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

Comments
 (0)