freshtonic opened a new issue, #1841:
URL: https://github.com/apache/datafusion-sqlparser-rs/issues/1841

   In PR #963 a check was introduced which limits which operators can be used 
with `ANY` and `ALL` expressions.
   
   Postgres can parse more (possibly _all_ binary operators, investigation 
pending) in this location. Postgres only seems to care that the operator yields 
a boolean - which is a semantic error, not a syntax (parse) error.
   
   Example (semantic error, not a parse error):
   
   ```
   select 123 % ANY(array[246]);
   ERROR:  op ANY/ALL (array) requires operator to yield boolean
   LINE 1: select 123 % ANY(array[246]);
                                  ^
   ```
   
   The following code in `src/parser/mod.rs:2893-2908` is where the allowlist 
of operators is enforced:
   
   ```rust
   if !matches!(
       op,
       BinaryOperator::Gt
           | BinaryOperator::Lt
           | BinaryOperator::GtEq
           | BinaryOperator::LtEq
           | BinaryOperator::Eq
           | BinaryOperator::NotEq
   ) {
       return parser_err!(
           format!(
           "Expected one of [=, >, <, =>, =<, !=] as comparison operator, 
found: {op}"
       ),
           tok.span.start
       );
   };
   ```
   
   I propose that instead of hard-coding the allowed operators we instead check 
if the dialect is Postgres, and if so allow arbitrary `BinaryOperator`s to be 
used. Existing behaviour will be preserved for all other dialects.
   
   This is a blocker for a new customer at my day job - I will do the work 
myself - so really I'm looking for feedback on the suggested approach.


-- 
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]

Reply via email to