Skip to content
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

Support "IS TRUE/FALSE" syntax #3159

Closed
sarahyurick opened this issue Aug 15, 2022 · 3 comments · Fixed by #3235
Closed

Support "IS TRUE/FALSE" syntax #3159

sarahyurick opened this issue Aug 15, 2022 · 3 comments · Fixed by #3235
Labels
enhancement New feature or request good first issue Good for newcomers

Comments

@sarahyurick
Copy link
Contributor

Is your feature request related to a problem or challenge? Please describe what you are trying to do.
A similar issue regarding "IS NOT TRUE/FALSE" syntax has already been opened (#2265), but it doesn't look like there is support for the "IS TRUE/FALSE" syntax either.

Describe the solution you'd like
Enum datafusion::logical_plan::Expr should include functionality for IsTrue and IsFalse.

Describe alternatives you've considered
None.

Additional context
None.

@alamb
Copy link
Contributor

alamb commented Aug 15, 2022

Looks like there is sqlparser support: https://docs.rs/sqlparser/latest/sqlparser/ast/enum.Expr.html#variant.IsTrue

Added in 0.18.0: https://github.com/sqlparser-rs/sqlparser-rs/blob/main/CHANGELOG.md#0180-2022-06-06

So this should be a fairly straightforward exercise -- note that IS and = are very subtlety differnt

Since we already have similar semantics for IS with the IS NOT DISTINCT FROM longer form syntax, I think this could potentially simply have the the SQL planner plan

IS <expr>

as

is not distinct from <expr> as 'IS <expr.

Here is what postgres does

psql (14.4)
Type "help" for help.

alamb=# select null = null;
 ?column? 
----------
 
(1 row)

alamb=# select null IS null;
 ?column? 
----------
 t
(1 row)

alamb=# select null IS DISTINCT FROM null;
 ?column? 
----------
 f
(1 row)

alamb=# select null IS NOT DISTINCT FROM null;
 ?column? 
----------
 t
(1 row)

@alamb alamb added the good first issue Good for newcomers label Aug 15, 2022
@sarahyurick
Copy link
Contributor Author

Thanks for the response! I'll start working on this.

@alamb
Copy link
Contributor

alamb commented Aug 15, 2022

@sarahyurick here is an example of doing something similar for array:

https://github.com/apache/arrow-datafusion/pull/3122/files#diff-c01a34949db6258aa1593f011ecf90f62cbde406acd5cdbf8b9b60b970ace1cfR2372-R2374

        let fun = BuiltinScalarFunction::MakeArray;
        // follow postgres convention and name result "array"
        Ok(Expr::ScalarFunction { fun, args }.alias("array"))

So in other words you can probably do something like (untested):

Ok(binary_expr(left, Operator::IsNotDistinctFrom, right).alias("..."))

https://github.com/apache/arrow-datafusion/blob/ee55d89cbf20f4a6d17fe399c72d60dca6d67912/datafusion/expr/src/operator.rs#L59

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request good first issue Good for newcomers
Projects
None yet
2 participants