diff --git a/sbroad-core/src/frontend/sql/ir/tests.rs b/sbroad-core/src/frontend/sql/ir/tests.rs index ca9f87804dba56b79fa14c9bf8c20d25d5e20060..3009a16575eba68c99145f86aa73786cb53a2439 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 16a433ab8b77025958934d9d9df71513666792d2..ffc3f3e4d91714e08ea34b6fa58f5b82e1274569 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" }