Skip to content

Commit 3cbaf3a

Browse files
committed
refactor: use optional null_treatment
1 parent 7d91dd9 commit 3cbaf3a

File tree

5 files changed

+68
-52
lines changed

5 files changed

+68
-52
lines changed

datafusion/proto/proto/datafusion.proto

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -518,7 +518,7 @@ message AggregateUDFExprNode {
518518
LogicalExprNode filter = 3;
519519
repeated SortExprNode order_by = 4;
520520
optional bytes fun_definition = 6;
521-
NullTreatment null_treatment = 7;
521+
optional NullTreatment null_treatment = 7;
522522
}
523523

524524
message ScalarUDFExprNode {
@@ -539,7 +539,7 @@ message WindowExprNode {
539539
// repeated LogicalExprNode filter = 7;
540540
WindowFrame window_frame = 8;
541541
optional bytes fun_definition = 10;
542-
NullTreatment null_treatment = 11;
542+
optional NullTreatment null_treatment = 11;
543543
bool distinct = 12;
544544
LogicalExprNode filter = 13;
545545
}
@@ -627,7 +627,7 @@ message WindowFrameBound {
627627
}
628628

629629
enum NullTreatment {
630-
UNSPECIFIED = 0;
630+
NULL_TREATMENT_UNSPECIFIED = 0;
631631
RESPECT_NULLS = 1;
632632
IGNORE_NULLS = 2;
633633
}

datafusion/proto/src/generated/pbjson.rs

Lines changed: 15 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

datafusion/proto/src/generated/prost.rs

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

datafusion/proto/src/logical_plan/from_proto.rs

Lines changed: 33 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -243,12 +243,16 @@ impl From<protobuf::dml_node::Type> for WriteOp {
243243
}
244244
}
245245

246-
impl From<protobuf::NullTreatment> for Option<NullTreatment> {
247-
fn from(t: protobuf::NullTreatment) -> Self {
248-
match t {
249-
protobuf::NullTreatment::Unspecified => None,
250-
protobuf::NullTreatment::RespectNulls => Some(NullTreatment::RespectNulls),
251-
protobuf::NullTreatment::IgnoreNulls => Some(NullTreatment::IgnoreNulls),
246+
impl TryFrom<protobuf::NullTreatment> for NullTreatment {
247+
type Error = Error;
248+
249+
fn try_from(null_treatment: protobuf::NullTreatment) -> Result<Self, Self::Error> {
250+
match null_treatment {
251+
protobuf::NullTreatment::Unspecified => {
252+
Err(Error::unknown("NullTreatment", null_treatment as i32))
253+
}
254+
protobuf::NullTreatment::RespectNulls => Ok(NullTreatment::RespectNulls),
255+
protobuf::NullTreatment::IgnoreNulls => Ok(NullTreatment::IgnoreNulls),
252256
}
253257
}
254258
}
@@ -310,15 +314,20 @@ pub fn parse_expr(
310314
.ok_or_else(|| {
311315
exec_datafusion_err!("missing window frame during deserialization")
312316
})?;
313-
let null_treatment: Option<NullTreatment> =
314-
protobuf::NullTreatment::try_from(expr.null_treatment)
317+
318+
let null_treatment = match expr.null_treatment {
319+
Some(null_treatment) => {
320+
let null_treatment = protobuf::NullTreatment::try_from(null_treatment)
315321
.map_err(|_| {
316322
proto_error(format!(
317-
"Received a WindowExprNode message with unknown NullTreatment {}",
318-
expr.null_treatment
319-
))
320-
})?
321-
.into();
323+
"Received a WindowExprNode message with unknown NullTreatment {}",
324+
null_treatment
325+
))
326+
})?;
327+
Some(null_treatment.try_into()?)
328+
}
329+
None => None,
330+
};
322331

323332
let agg_fn = match window_function {
324333
window_expr_node::WindowFunction::Udaf(udaf_name) => {
@@ -587,15 +596,19 @@ pub fn parse_expr(
587596
.udaf(&pb.fun_name)
588597
.or_else(|_| codec.try_decode_udaf(&pb.fun_name, &[]))?,
589598
};
590-
let null_treatment: Option<NullTreatment> =
591-
protobuf::NullTreatment::try_from(pb.null_treatment)
599+
let null_treatment = match pb.null_treatment {
600+
Some(null_treatment) => {
601+
let null_treatment = protobuf::NullTreatment::try_from(null_treatment)
592602
.map_err(|_| {
593603
proto_error(format!(
594-
"Received a AggregateUdfExprNode message with unknown NullTreatment {}",
595-
pb.null_treatment
596-
))
597-
})?
598-
.into();
604+
"Received an AggregateUdfExprNode message with unknown NullTreatment {}",
605+
null_treatment
606+
))
607+
})?;
608+
Some(null_treatment.try_into()?)
609+
}
610+
None => None,
611+
};
599612

600613
Ok(Expr::AggregateFunction(expr::AggregateFunction::new_udf(
601614
agg_fn,

datafusion/proto/src/logical_plan/to_proto.rs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -340,20 +340,22 @@ pub fn serialize_expr(
340340

341341
let window_frame: Option<protobuf::WindowFrame> =
342342
Some(window_frame.try_into()?);
343-
let null_treatment: protobuf::NullTreatment = null_treatment.into();
344343

345344
let window_expr = protobuf::WindowExprNode {
346345
exprs: serialize_exprs(args, codec)?,
347346
window_function: Some(window_function),
348347
partition_by,
349348
order_by,
350349
window_frame,
351-
null_treatment: null_treatment.into(),
352350
distinct: *distinct,
353351
filter: match filter {
354352
Some(e) => Some(Box::new(serialize_expr(e.as_ref(), codec)?)),
355353
None => None,
356354
},
355+
null_treatment: match null_treatment {
356+
Some(nt) => Some(protobuf::NullTreatment::from(nt).into()),
357+
None => None,
358+
},
357359
fun_definition,
358360
};
359361
protobuf::LogicalExprNode {
@@ -385,8 +387,10 @@ pub fn serialize_expr(
385387
},
386388
order_by: serialize_sorts(order_by, codec)?,
387389
fun_definition: (!buf.is_empty()).then_some(buf),
388-
null_treatment: protobuf::NullTreatment::from(null_treatment)
389-
.into(),
390+
null_treatment: match null_treatment {
391+
Some(nt) => Some(protobuf::NullTreatment::from(nt).into()),
392+
None => None,
393+
},
390394
},
391395
))),
392396
}
@@ -731,14 +735,13 @@ impl From<&WriteOp> for protobuf::dml_node::Type {
731735
}
732736
}
733737

734-
impl From<&Option<NullTreatment>> for protobuf::NullTreatment {
735-
fn from(t: &Option<NullTreatment>) -> Self {
738+
impl From<&NullTreatment> for protobuf::NullTreatment {
739+
fn from(t: &NullTreatment) -> Self {
736740
match t {
737-
Some(null_treatment) => match null_treatment {
741+
null_treatment => match null_treatment {
738742
NullTreatment::RespectNulls => protobuf::NullTreatment::RespectNulls,
739743
NullTreatment::IgnoreNulls => protobuf::NullTreatment::IgnoreNulls,
740744
},
741-
None => protobuf::NullTreatment::Unspecified,
742745
}
743746
}
744747
}

0 commit comments

Comments
 (0)