From ef1d6be0273192811225badab19515d8854822e7 Mon Sep 17 00:00:00 2001
From: Denis Smirnov <sd@picodata.io>
Date: Mon, 28 Nov 2022 16:17:21 +0700
Subject: [PATCH] feat(pest grammar): support double angle quotation marks

---
 sbroad-core/src/frontend/sql/ir/tests.rs | 18 ++++++++++++++++++
 sbroad-core/src/frontend/sql/query.pest  |  2 +-
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/sbroad-core/src/frontend/sql/ir/tests.rs b/sbroad-core/src/frontend/sql/ir/tests.rs
index ca9f87804d..3009a16575 100644
--- a/sbroad-core/src/frontend/sql/ir/tests.rs
+++ b/sbroad-core/src/frontend/sql/ir/tests.rs
@@ -341,5 +341,23 @@ fn front_sql19() {
     assert_eq!(expected_explain, plan.as_explain().unwrap());
 }
 
+// Check double angle quotation marks in the strings
+#[test]
+fn front_sql20() {
+    let input = r#"SELECT "identification_number" FROM "hash_testing"
+        WHERE "product_code" = '«123»'"#;
+
+    let plan = sql_to_optimized_ir(input, vec![]);
+
+    let expected_explain = String::from(
+        r#"projection ("hash_testing"."identification_number" -> "identification_number")
+    selection ROW("hash_testing"."product_code") = ROW('«123»')
+        scan "hash_testing"
+"#,
+    );
+
+    assert_eq!(expected_explain, plan.as_explain().unwrap());
+}
+
 #[cfg(test)]
 mod params;
diff --git a/sbroad-core/src/frontend/sql/query.pest b/sbroad-core/src/frontend/sql/query.pest
index 16a433ab8b..ffc3f3e4d9 100644
--- a/sbroad-core/src/frontend/sql/query.pest
+++ b/sbroad-core/src/frontend/sql/query.pest
@@ -113,7 +113,7 @@ Punctuation = _{
     | INITIAL_PUNCTUATION
     | "." | "?" | "!" | ":" | ";" | ","
 }
-Other = _{ "\\" | "/" | "@" | "%" | "&" | "*" | "#" | "§" | WHITESPACE }
+Other = _{ "\\" | "/" | "@" | "%" | "&" | "*" | "#" | "§" | "»" | WHITESPACE }
 
 Value = _{ Parameter | Row | True | False | Null | Decimal | Double | Unsigned | Integer | Concat | ConcatLeft }
     True = @{ ^"true" }
-- 
GitLab