Skip to content

Commit c6b0b8b

Browse files
Kanishk SachanCopilot
andcommitted
Migrate UnKnownColumn proto hooks
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 4a41173 commit c6b0b8b

3 files changed

Lines changed: 36 additions & 12 deletions

File tree

datafusion/physical-expr/src/expressions/unknown_column.rs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ use arrow::{
2727
record_batch::RecordBatch,
2828
};
2929
use datafusion_common::{Result, internal_err};
30+
31+
#[cfg(feature = "proto")]
32+
use datafusion_proto_models::protobuf;
3033
use datafusion_expr::ColumnarValue;
3134

3235
#[derive(Debug, Clone, Eq)]
@@ -84,6 +87,36 @@ impl PhysicalExpr for UnKnownColumn {
8487
fn fmt_sql(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
8588
std::fmt::Display::fmt(self, f)
8689
}
90+
91+
#[cfg(feature = "proto")]
92+
fn try_to_proto(
93+
&self,
94+
_ctx: &datafusion_physical_expr_common::physical_expr::proto_encode::PhysicalExprEncodeCtx<'_>,
95+
) -> Result<Option<protobuf::PhysicalExprNode>> {
96+
Ok(Some(protobuf::PhysicalExprNode {
97+
expr_id: None,
98+
expr_type: Some(protobuf::physical_expr_node::ExprType::UnknownColumn(
99+
protobuf::UnknownColumn {
100+
name: self.name.clone(),
101+
},
102+
)),
103+
}))
104+
}
105+
}
106+
107+
#[cfg(feature = "proto")]
108+
impl UnKnownColumn {
109+
/// Reconstruct an [`UnKnownColumn`] from its protobuf representation.
110+
pub fn try_from_proto(
111+
node: &protobuf::PhysicalExprNode,
112+
_ctx: &datafusion_physical_expr_common::physical_expr::proto_decode::PhysicalExprDecodeCtx<'_>,
113+
) -> Result<Arc<dyn PhysicalExpr>> {
114+
let protobuf::UnknownColumn { name } = match &node.expr_type {
115+
Some(protobuf::physical_expr_node::ExprType::UnknownColumn(c)) => c,
116+
_ => return internal_err!("PhysicalExprNode is not an UnKnownColumn"),
117+
};
118+
Ok(Arc::new(UnKnownColumn::new(name)))
119+
}
87120
}
88121

89122
impl Hash for UnKnownColumn {

datafusion/proto/src/physical_plan/from_proto.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ pub fn parse_physical_expr_with_converter(
278278
// their own `ExprType` variant — see #21835. This match only routes
279279
// to the right constructor.
280280
ExprType::Column(_) => Column::try_from_proto(proto, &decode_ctx)?,
281-
ExprType::UnknownColumn(c) => Arc::new(UnKnownColumn::new(&c.name)),
281+
ExprType::UnknownColumn(_) => UnKnownColumn::try_from_proto(proto, &decode_ctx)?,
282282
ExprType::Literal(scalar) => Arc::new(Literal::new(scalar.try_into()?)),
283283
ExprType::BinaryExpr(_) => BinaryExpr::try_from_proto(proto, &decode_ctx)?,
284284
ExprType::AggregateExpr(_) => {

datafusion/proto/src/physical_plan/to_proto.rs

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ use datafusion_physical_expr::window::{SlidingAggregateWindowExpr, StandardWindo
3737
use datafusion_physical_expr_common::sort_expr::PhysicalSortExpr;
3838
use datafusion_physical_plan::expressions::{
3939
CaseExpr, CastExpr, DynamicFilterPhysicalExpr, InListExpr, IsNotNullExpr, IsNullExpr,
40-
LikeExpr, Literal, NegativeExpr, NotExpr, TryCastExpr, UnKnownColumn,
40+
LikeExpr, Literal, NegativeExpr, NotExpr, TryCastExpr,
4141
};
4242
use datafusion_physical_plan::joins::{HashExpr, HashTableLookupExpr};
4343
use datafusion_physical_plan::udaf::AggregateFunctionExpr;
@@ -327,16 +327,7 @@ pub fn serialize_physical_expr_with_converter(
327327
});
328328
}
329329

330-
if let Some(expr) = expr.downcast_ref::<UnKnownColumn>() {
331-
Ok(protobuf::PhysicalExprNode {
332-
expr_id,
333-
expr_type: Some(protobuf::physical_expr_node::ExprType::UnknownColumn(
334-
protobuf::UnknownColumn {
335-
name: expr.name().to_string(),
336-
},
337-
)),
338-
})
339-
} else if let Some(expr) = expr.downcast_ref::<CaseExpr>() {
330+
if let Some(expr) = expr.downcast_ref::<CaseExpr>() {
340331
Ok(protobuf::PhysicalExprNode {
341332
expr_id,
342333
expr_type: Some(

0 commit comments

Comments
 (0)