milenkovicm commented on PR #10354:
URL: https://github.com/apache/datafusion/pull/10354#issuecomment-2092903670
jsut thinking aloud, maybe if we change:
```rust
pub enum ExprSimplifyResult {
/// The function call was simplified to an entirely new Expr
Simplified(Expr),
/// the function call could not be simplified, and the arguments
/// are return unmodified.
Original(Vec<Expr>),
}
```
to:
```rust
pub enum ExprSimplifyResult<T> {
/// The function call was simplified to an entirely new Expr
Simplified(Expr),
/// the function call could not be simplified, and the arguments
/// are return unmodified.
Original(T),
}
```
simplify method would change from:
```rust
pub fn simplify(
&self,
args: Vec<Expr>,
distinct: &bool,
filter: &Option<Box<Expr>>,
order_by: &Option<Vec<Expr>>,
null_treatment: &Option<NullTreatment>,
info: &dyn SimplifyInfo,
) -> Result<ExprSimplifyResult> {
```
to:
```rust
pub fn simplify(
&self,
args: Vec<Expr>,
distinct: bool,
filter: Option<Box<Expr>>,
order_by: Option<Vec<Expr>>,
null_treatment: Option<NullTreatment>,
info: &dyn SimplifyInfo,
) -> Result<ExprSimplifyResult<(Vec<Expr>, bool, Option<Box<Expr>>
...)>> {
}
```
so in both cases, when we create replacement function or we re-assemble
original function we would not need to clone parameters.
Not too many changes in the code, few`-> Result<ExprSimplifyResult>` to `->
Result<ExprSimplifyResult<Vec<Expr>>>` changes
Downside is that we would have to re-create expression if no simplification
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]