-
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: reduce cloning in infer_placeholder_types
#5638
Conversation
@@ -78,7 +78,7 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> { | |||
let mut expr = self.sql_expr_to_logical_expr(sql, schema, planner_context)?; | |||
expr = self.rewrite_partial_qualifier(expr, schema); | |||
self.validate_schema_satisfies_exprs(schema, &[expr.clone()])?; | |||
let expr = infer_placeholder_types(expr, schema.clone())?; |
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.
This cloned the schema as well as cloning all BinaryExprs
// Default to assuming the arguments are the same type | ||
if let Expr::BinaryExpr(BinaryExpr { left, op: _, right }) = &mut expr { | ||
rewrite_placeholder(left.as_mut(), right.as_ref(), schema)?; | ||
rewrite_placeholder(right.as_mut(), left.as_ref(), schema)?; |
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.
Much more concise!
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.
Nice! :)
@@ -417,6 +414,11 @@ impl DataFusionError { | |||
// return last checkpoint (which may be the original error) | |||
last_datafusion_error | |||
} | |||
|
|||
/// wraps self in Self::Context with a description | |||
pub fn context(self, description: impl Into<String>) -> Self { |
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.
Yay, thank you! I'm happy to see this being used and improved.
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.
Yeah, it is really nice -- thanks for adding it!
// Default to assuming the arguments are the same type | ||
if let Expr::BinaryExpr(BinaryExpr { left, op: _, right }) = &mut expr { | ||
rewrite_placeholder(left.as_mut(), right.as_ref(), schema)?; | ||
rewrite_placeholder(right.as_mut(), left.as_ref(), schema)?; |
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.
Nice! :)
infer_placeholder_types
infer_placeholder_types
Which issue does this PR close?
related to faster planning: #5637
related to like inference: #5617
Rationale for this change
This function has a bunch of unecessary
clone()
which likely means running parameter type inference would be bad to do for all queriesWhat changes are included in this PR?
Avoids a bunch of expr copies when inferring placeholder types
Are these changes tested?
Existing tests cover this functionality
Are there any user-facing changes?
No