Skip to content

Commit 6c98228

Browse files
authored
feat: Allow to use >> and << binary operators in Generic dialect (#553)
1 parent 076b587 commit 6c98228

File tree

3 files changed

+11
-10
lines changed

3 files changed

+11
-10
lines changed

src/parser.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1145,10 +1145,10 @@ impl<'a> Parser<'a> {
11451145
Token::Caret => Some(BinaryOperator::BitwiseXor),
11461146
Token::Ampersand => Some(BinaryOperator::BitwiseAnd),
11471147
Token::Div => Some(BinaryOperator::Divide),
1148-
Token::ShiftLeft if dialect_of!(self is PostgreSqlDialect) => {
1148+
Token::ShiftLeft if dialect_of!(self is PostgreSqlDialect | GenericDialect) => {
11491149
Some(BinaryOperator::PGBitwiseShiftLeft)
11501150
}
1151-
Token::ShiftRight if dialect_of!(self is PostgreSqlDialect) => {
1151+
Token::ShiftRight if dialect_of!(self is PostgreSqlDialect | GenericDialect) => {
11521152
Some(BinaryOperator::PGBitwiseShiftRight)
11531153
}
11541154
Token::Sharp if dialect_of!(self is PostgreSqlDialect) => {

tests/sqlparser_common.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ mod test_utils;
2424
use matches::assert_matches;
2525
use sqlparser::ast::*;
2626
use sqlparser::dialect::{
27-
AnsiDialect, BigQueryDialect, GenericDialect, HiveDialect, MsSqlDialect, PostgreSqlDialect,
28-
SQLiteDialect, SnowflakeDialect,
27+
AnsiDialect, BigQueryDialect, ClickHouseDialect, GenericDialect, HiveDialect, MsSqlDialect,
28+
PostgreSqlDialect, SQLiteDialect, SnowflakeDialect,
2929
};
3030
use sqlparser::keywords::ALL_KEYWORDS;
3131
use sqlparser::parser::{Parser, ParserError};
@@ -555,7 +555,7 @@ fn test_eof_after_as() {
555555

556556
#[test]
557557
fn test_no_infix_error() {
558-
let res = Parser::parse_sql(&GenericDialect {}, "ASSERT-URA<<");
558+
let res = Parser::parse_sql(&ClickHouseDialect {}, "ASSERT-URA<<");
559559
assert_eq!(
560560
ParserError::ParserError("No infix parser for token ShiftLeft".to_string()),
561561
res.unwrap_err()

tests/sqlparser_postgres.rs

+6-5
Original file line numberDiff line numberDiff line change
@@ -1077,13 +1077,14 @@ fn parse_prepare() {
10771077
#[test]
10781078
fn parse_pg_bitwise_binary_ops() {
10791079
let bitwise_ops = &[
1080-
("#", BinaryOperator::PGBitwiseXor),
1081-
(">>", BinaryOperator::PGBitwiseShiftRight),
1082-
("<<", BinaryOperator::PGBitwiseShiftLeft),
1080+
// Sharp char cannot be used with Generic Dialect, it conflicts with identifiers
1081+
("#", BinaryOperator::PGBitwiseXor, pg()),
1082+
(">>", BinaryOperator::PGBitwiseShiftRight, pg_and_generic()),
1083+
("<<", BinaryOperator::PGBitwiseShiftLeft, pg_and_generic()),
10831084
];
10841085

1085-
for (str_op, op) in bitwise_ops {
1086-
let select = pg().verified_only_select(&format!("SELECT a {} b", &str_op));
1086+
for (str_op, op, dialects) in bitwise_ops {
1087+
let select = dialects.verified_only_select(&format!("SELECT a {} b", &str_op));
10871088
assert_eq!(
10881089
SelectItem::UnnamedExpr(Expr::BinaryOp {
10891090
left: Box::new(Expr::Identifier(Ident::new("a"))),

0 commit comments

Comments
 (0)