Skip to content

Conversation

@Sevenannn
Copy link

@Sevenannn Sevenannn commented Nov 13, 2024

Rationale for this change

Datafusion enforces an eager cast of value to binary value in the logical plan where a comparison with binary value is presented. For example, in the following plan

Filter: value = CAST(Utf8("binary_value") AS Binary
However, when using unparser to convert the plan back to sql, where the sql will be sent to various query engine (e.g. DuckDB). the cast is not needed for the value, in the example above the value "binary_value", since the raw value can be directly used in SQL engines without casting to an engine specific dictionary type. Therefore, the plan can simply be rewritten into

where value = 'binary_value'

What changes are included in this PR?

  • Add function cast_to_sql, which directly pass inner_expr instead of cast inner_expr when casting to binary / dictionary in the Expr::Cast, and keep the original casting logic in all other cases.
  • Add a test for the change

Are these changes tested?

Yes

@Sevenannn Sevenannn marked this pull request as ready for review November 13, 2024 00:11
Co-authored-by: Jack Eadie <jack.eadie0@gmail.com>
@Sevenannn Sevenannn merged commit 4206912 into spiceai-43 Nov 13, 2024
@Sevenannn Sevenannn deleted the qianqian/fix-binary branch November 13, 2024 01:49
Sevenannn added a commit that referenced this pull request Nov 14, 2024
* Skip casting to binary when inner expr is value

* Update datafusion/sql/src/unparser/expr.rs

Co-authored-by: Jack Eadie <jack.eadie0@gmail.com>

---------

Co-authored-by: Jack Eadie <jack.eadie0@gmail.com>
Sevenannn added a commit that referenced this pull request Nov 21, 2024
* Skip casting to binary when inner expr is value (#60)

* Skip casting to binary when inner expr is value

* Update datafusion/sql/src/unparser/expr.rs

Co-authored-by: Jack Eadie <jack.eadie0@gmail.com>

---------

Co-authored-by: Jack Eadie <jack.eadie0@gmail.com>

* Fix binary view cast (#63)

* fix

* Fix clippy error

---------

Co-authored-by: Jack Eadie <jack.eadie0@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants