Skip to content

Commit 2d8bc8f

Browse files
committed
Reorganize the physical plan code in proto
1 parent a1a6368 commit 2d8bc8f

File tree

2 files changed

+44
-64
lines changed

2 files changed

+44
-64
lines changed

datafusion/proto/src/physical_plan/from_proto.rs

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ use crate::common::proto_error;
5050
use crate::convert_required;
5151
use crate::logical_plan;
5252
use crate::protobuf::physical_expr_node::ExprType;
53-
use crate::protobuf::JoinSide;
53+
use datafusion::physical_plan::joins::utils::JoinSide;
5454
use datafusion::physical_plan::sorts::sort::SortOptions;
5555
use parking_lot::RwLock;
5656

@@ -450,36 +450,31 @@ impl From<&protobuf::ColumnStats> for ColumnStatistics {
450450
}
451451
}
452452

453-
impl TryInto<Statistics> for &protobuf::Statistics {
453+
impl From<protobuf::JoinSide> for JoinSide {
454+
fn from(t: protobuf::JoinSide) -> Self {
455+
match t {
456+
protobuf::JoinSide::LeftSide => JoinSide::Left,
457+
protobuf::JoinSide::RightSide => JoinSide::Right,
458+
}
459+
}
460+
}
461+
462+
impl TryFrom<&protobuf::Statistics> for Statistics {
454463
type Error = DataFusionError;
455464

456-
fn try_into(self) -> Result<Statistics, Self::Error> {
457-
let column_statistics = self
458-
.column_stats
459-
.iter()
460-
.map(|s| s.into())
461-
.collect::<Vec<_>>();
465+
fn try_from(s: &protobuf::Statistics) -> Result<Self, Self::Error> {
466+
let column_statistics =
467+
s.column_stats.iter().map(|s| s.into()).collect::<Vec<_>>();
462468
Ok(Statistics {
463-
num_rows: Some(self.num_rows as usize),
464-
total_byte_size: Some(self.total_byte_size as usize),
469+
num_rows: Some(s.num_rows as usize),
470+
total_byte_size: Some(s.total_byte_size as usize),
465471
// No column statistic (None) is encoded with empty array
466472
column_statistics: if column_statistics.is_empty() {
467473
None
468474
} else {
469475
Some(column_statistics)
470476
},
471-
is_exact: self.is_exact,
477+
is_exact: s.is_exact,
472478
})
473479
}
474480
}
475-
476-
impl From<JoinSide> for datafusion::physical_plan::joins::utils::JoinSide {
477-
fn from(t: JoinSide) -> Self {
478-
match t {
479-
JoinSide::LeftSide => datafusion::physical_plan::joins::utils::JoinSide::Left,
480-
JoinSide::RightSide => {
481-
datafusion::physical_plan::joins::utils::JoinSide::Right
482-
}
483-
}
484-
}
485-
}

datafusion/proto/src/physical_plan/to_proto.rs

Lines changed: 27 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -44,96 +44,85 @@ use crate::protobuf::{ConfigOption, PhysicalSortExprNode};
4444
use datafusion::logical_expr::BuiltinScalarFunction;
4545
use datafusion::physical_expr::expressions::DateTimeIntervalExpr;
4646
use datafusion::physical_expr::ScalarFunctionExpr;
47+
use datafusion::physical_plan::joins::utils::JoinSide;
4748
use datafusion_common::DataFusionError;
4849

49-
impl TryInto<protobuf::PhysicalExprNode> for Arc<dyn AggregateExpr> {
50+
impl TryFrom<Arc<dyn AggregateExpr>> for protobuf::PhysicalExprNode {
5051
type Error = DataFusionError;
5152

52-
fn try_into(self) -> Result<protobuf::PhysicalExprNode, Self::Error> {
53+
fn try_from(a: Arc<dyn AggregateExpr>) -> Result<Self, Self::Error> {
5354
use datafusion::physical_plan::expressions;
5455
use protobuf::AggregateFunction;
5556

5657
let mut distinct = false;
57-
let aggr_function = if self.as_any().downcast_ref::<Avg>().is_some() {
58+
let aggr_function = if a.as_any().downcast_ref::<Avg>().is_some() {
5859
Ok(AggregateFunction::Avg.into())
59-
} else if self.as_any().downcast_ref::<Sum>().is_some() {
60+
} else if a.as_any().downcast_ref::<Sum>().is_some() {
6061
Ok(AggregateFunction::Sum.into())
61-
} else if self.as_any().downcast_ref::<Count>().is_some() {
62+
} else if a.as_any().downcast_ref::<Count>().is_some() {
6263
Ok(AggregateFunction::Count.into())
63-
} else if self.as_any().downcast_ref::<DistinctCount>().is_some() {
64+
} else if a.as_any().downcast_ref::<DistinctCount>().is_some() {
6465
distinct = true;
6566
Ok(AggregateFunction::Count.into())
66-
} else if self.as_any().downcast_ref::<Min>().is_some() {
67+
} else if a.as_any().downcast_ref::<Min>().is_some() {
6768
Ok(AggregateFunction::Min.into())
68-
} else if self.as_any().downcast_ref::<Max>().is_some() {
69+
} else if a.as_any().downcast_ref::<Max>().is_some() {
6970
Ok(AggregateFunction::Max.into())
70-
} else if self
71+
} else if a
7172
.as_any()
7273
.downcast_ref::<expressions::ApproxDistinct>()
7374
.is_some()
7475
{
7576
Ok(AggregateFunction::ApproxDistinct.into())
76-
} else if self
77-
.as_any()
78-
.downcast_ref::<expressions::ArrayAgg>()
79-
.is_some()
80-
{
77+
} else if a.as_any().downcast_ref::<expressions::ArrayAgg>().is_some() {
8178
Ok(AggregateFunction::ArrayAgg.into())
82-
} else if self
83-
.as_any()
84-
.downcast_ref::<expressions::Variance>()
85-
.is_some()
86-
{
79+
} else if a.as_any().downcast_ref::<expressions::Variance>().is_some() {
8780
Ok(AggregateFunction::Variance.into())
88-
} else if self
81+
} else if a
8982
.as_any()
9083
.downcast_ref::<expressions::VariancePop>()
9184
.is_some()
9285
{
9386
Ok(AggregateFunction::VariancePop.into())
94-
} else if self
87+
} else if a
9588
.as_any()
9689
.downcast_ref::<expressions::Covariance>()
9790
.is_some()
9891
{
9992
Ok(AggregateFunction::Covariance.into())
100-
} else if self
93+
} else if a
10194
.as_any()
10295
.downcast_ref::<expressions::CovariancePop>()
10396
.is_some()
10497
{
10598
Ok(AggregateFunction::CovariancePop.into())
106-
} else if self
107-
.as_any()
108-
.downcast_ref::<expressions::Stddev>()
109-
.is_some()
110-
{
99+
} else if a.as_any().downcast_ref::<expressions::Stddev>().is_some() {
111100
Ok(AggregateFunction::Stddev.into())
112-
} else if self
101+
} else if a
113102
.as_any()
114103
.downcast_ref::<expressions::StddevPop>()
115104
.is_some()
116105
{
117106
Ok(AggregateFunction::StddevPop.into())
118-
} else if self
107+
} else if a
119108
.as_any()
120109
.downcast_ref::<expressions::Correlation>()
121110
.is_some()
122111
{
123112
Ok(AggregateFunction::Correlation.into())
124-
} else if self
113+
} else if a
125114
.as_any()
126115
.downcast_ref::<expressions::ApproxPercentileCont>()
127116
.is_some()
128117
{
129118
Ok(AggregateFunction::ApproxPercentileCont.into())
130-
} else if self
119+
} else if a
131120
.as_any()
132121
.downcast_ref::<expressions::ApproxPercentileContWithWeight>()
133122
.is_some()
134123
{
135124
Ok(AggregateFunction::ApproxPercentileContWithWeight.into())
136-
} else if self
125+
} else if a
137126
.as_any()
138127
.downcast_ref::<expressions::ApproxMedian>()
139128
.is_some()
@@ -142,10 +131,10 @@ impl TryInto<protobuf::PhysicalExprNode> for Arc<dyn AggregateExpr> {
142131
} else {
143132
Err(DataFusionError::NotImplemented(format!(
144133
"Aggregate function not supported: {:?}",
145-
self
134+
a
146135
)))
147136
}?;
148-
let expressions: Vec<protobuf::PhysicalExprNode> = self
137+
let expressions: Vec<protobuf::PhysicalExprNode> = a
149138
.expressions()
150139
.iter()
151140
.map(|e| e.clone().try_into())
@@ -494,15 +483,11 @@ impl TryFrom<&FileScanConfig> for protobuf::FileScanExecConf {
494483
}
495484
}
496485

497-
impl From<datafusion::physical_plan::joins::utils::JoinSide> for protobuf::JoinSide {
498-
fn from(t: datafusion::physical_plan::joins::utils::JoinSide) -> Self {
486+
impl From<JoinSide> for protobuf::JoinSide {
487+
fn from(t: JoinSide) -> Self {
499488
match t {
500-
datafusion::physical_plan::joins::utils::JoinSide::Left => {
501-
protobuf::JoinSide::LeftSide
502-
}
503-
datafusion::physical_plan::joins::utils::JoinSide::Right => {
504-
protobuf::JoinSide::RightSide
505-
}
489+
JoinSide::Left => protobuf::JoinSide::LeftSide,
490+
JoinSide::Right => protobuf::JoinSide::RightSide,
506491
}
507492
}
508493
}

0 commit comments

Comments
 (0)