From e8b433ab1c34908bae12d69dff467639c6e8f808 Mon Sep 17 00:00:00 2001 From: Arseniy Volynets <vol0ncar@yandex.ru> Date: Mon, 3 Jun 2024 13:57:12 +0000 Subject: [PATCH] fix: require space after in operator --- sbroad-core/src/frontend/sql.rs | 2 +- sbroad-core/src/frontend/sql/ir/tests.rs | 10 ++++++++++ sbroad-core/src/frontend/sql/query.pest | 3 ++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/sbroad-core/src/frontend/sql.rs b/sbroad-core/src/frontend/sql.rs index bf07e211e3..9e9ef44fb3 100644 --- a/sbroad-core/src/frontend/sql.rs +++ b/sbroad-core/src/frontend/sql.rs @@ -2681,7 +2681,7 @@ where Rule::GtEq => ParseExpressionInfixOperator::InfixBool(Bool::GtEq), Rule::In => { let mut op_inner = op.into_inner(); - is_not = op_inner.next().is_some(); + is_not = op_inner.next().is_some_and(|i| matches!(i.as_rule(), Rule::NotFlag)); ParseExpressionInfixOperator::InfixBool(Bool::In) } Rule::Subtract => ParseExpressionInfixOperator::InfixArithmetic(Arithmetic::Subtract), diff --git a/sbroad-core/src/frontend/sql/ir/tests.rs b/sbroad-core/src/frontend/sql/ir/tests.rs index e74f6d26eb..da851c65d2 100644 --- a/sbroad-core/src/frontend/sql/ir/tests.rs +++ b/sbroad-core/src/frontend/sql/ir/tests.rs @@ -548,6 +548,16 @@ fn front_sql_between_invalid() { } } +#[test] +fn front_sql_parse_inner_join() { + let input = r#"SELECT * FROM "hash_testing" + left join "hash_testing" on true inner join "hash_testing" on true"#; + + // Check there are no panics + let _ = sql_to_optimized_ir(input, vec![]); + assert_eq!(true, true) +} + #[test] fn front_sql_check_arbitrary_utf_in_single_quote_strings() { let input = r#"SELECT "identification_number" FROM "hash_testing" diff --git a/sbroad-core/src/frontend/sql/query.pest b/sbroad-core/src/frontend/sql/query.pest index e85a4de839..b51f70ab97 100644 --- a/sbroad-core/src/frontend/sql/query.pest +++ b/sbroad-core/src/frontend/sql/query.pest @@ -303,7 +303,8 @@ Expr = { ExprAtomValue ~ (ExprInfixOp ~ ExprAtomValue)* } Lt = { "<" } LtEq = { "<=" } NotEq = { "<>" | "!=" } - In = { NotFlag? ~ ^"in" } + In = { NotFlag? ~ InAtom } + InAtom = @{ ^"in" ~ SP } ExprAtomValue = _{ UnaryNot* ~ AtomicExpr ~ CastPostfix* ~ IsNullPostfix? } UnaryNot = @{ NotFlag } CastPostfix = { "::" ~ ColumnDefType } -- GitLab