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