-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Minor: fix: Include FetchRel when producing LogicalPlan from Sort #13862
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -368,14 +368,45 @@ pub fn to_substrait_rel( | |
.iter() | ||
.map(|e| substrait_sort_field(state, e, sort.input.schema(), extensions)) | ||
.collect::<Result<Vec<_>>>()?; | ||
Ok(Box::new(Rel { | ||
|
||
let sort_rel = Box::new(Rel { | ||
rel_type: Some(RelType::Sort(Box::new(SortRel { | ||
common: None, | ||
input: Some(input), | ||
sorts: sort_fields, | ||
advanced_extension: None, | ||
}))), | ||
})) | ||
}); | ||
|
||
match sort.fetch { | ||
Some(_) => { | ||
let empty_schema = Arc::new(DFSchema::empty()); | ||
let count_mode = sort | ||
.fetch | ||
.map(|amount| { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. given you have the
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. also I think rather than using to_substrait_rex, you could create the substrait expr directly, that might be nicer here There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ty for the suggestions! Heading to dinner now and I can address these tomorrow morning eastern time. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Incorporated both suggestions. Thank you @Blizzara |
||
to_substrait_rex( | ||
state, | ||
&Expr::Literal(ScalarValue::Int64(Some(amount as i64))), | ||
&empty_schema, | ||
0, | ||
extensions, | ||
) | ||
}) | ||
.transpose()? | ||
.map(Box::new) | ||
.map(fetch_rel::CountMode::CountExpr); | ||
Ok(Box::new(Rel { | ||
rel_type: Some(RelType::Fetch(Box::new(FetchRel { | ||
common: None, | ||
input: Some(sort_rel), | ||
offset_mode: None, | ||
count_mode, | ||
advanced_extension: None, | ||
}))), | ||
})) | ||
} | ||
None => Ok(sort_rel), | ||
} | ||
} | ||
LogicalPlan::Aggregate(agg) => { | ||
let input = to_substrait_rel(agg.input.as_ref(), state, extensions)?; | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
Another pattern I have seen to avoid missing fields like this is
That way the compiler will tell you when you have not handled some field and you have to explicitly list it out
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Making sure I follow:
You mean on line 364 destructuring the plan like
I didn't see that pattern followed in that file for the other LogicalPlan inners. I think its a good idea though
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done