Skip to content
Snippets Groups Projects
Commit 256a78c9 authored by Дмитрий Кольцов's avatar Дмитрий Кольцов
Browse files

fix(pest grammar): add cyrillic characters as valid for string values

Closes #183
parent c0ca3420
No related branches found
No related tags found
1 merge request!1414sbroad import
......@@ -349,6 +349,24 @@ fn front_sql15() {
);
}
// check cyrillic strings support
#[test]
fn front_sql16() {
let input = r#"SELECT "identification_number", "product_code" FROM "hash_testing"
WHERE "product_code" = 'кириллица'"#;
let expected = PatternWithParams::new(
format!(
"{} {} {}",
r#"SELECT "hash_testing"."identification_number" as "identification_number","#,
r#""hash_testing"."product_code" as "product_code""#,
r#"FROM "hash_testing" WHERE ("hash_testing"."product_code") = (?)"#,
),
vec![Value::from("кириллица")],
);
assert_eq!(sql_to_sql(input, &[], &no_transform), expected);
}
#[test]
fn front_params1() {
let pattern = r#"SELECT "id", "FIRST_NAME" FROM "test_space"
......@@ -382,3 +400,21 @@ fn front_params2() {
assert_eq!(sql_to_sql(pattern, &params, &no_transform), expected);
}
// check cyrillic params support
#[test]
fn front_params3() {
let pattern = r#"SELECT "id" FROM "test_space"
WHERE "sys_op" = ? AND "FIRST_NAME" = ?"#;
let params = vec![Value::Null, Value::from("кириллица")];
let expected = PatternWithParams::new(
format!(
"{} {}",
r#"SELECT "test_space"."id" as "id" FROM "test_space""#,
r#"WHERE ("test_space"."sys_op") = (?) and ("test_space"."FIRST_NAME") = (?)"#,
),
params.clone(),
);
assert_eq!(sql_to_sql(pattern, &params, &no_transform), expected);
}
......@@ -59,7 +59,7 @@ Expr = _{ Or | And | Cmp | Primary | Parentheses }
OrLeft = _{ AndRight }
OrRight = _{ Or | OrLeft }
String = @{ !(WHITESPACE* ~ Keyword ~ WHITESPACE) ~ ('A' .. 'Z' | 'a'..'z' | "-" | "_" | ASCII_DIGIT)+ }
String = @{ !(WHITESPACE* ~ Keyword ~ WHITESPACE) ~ ('А' .. 'Я' | 'а' .. 'я' | 'A' .. 'Z' | 'a'..'z' | "-" | "_" | ASCII_DIGIT)+ }
Keyword = { ^"union" | ^"where" }
Value = _{ Parameter | Row | True | False | Null | Decimal | Double | Unsigned | Integer | SingleQuotedString }
......
......@@ -440,6 +440,64 @@ g.test_insert_3 = function()
})
end
-- check cyrillic consts support
g.test_insert_4 = function()
local api = cluster:server("api-1").net_box
local r, err = api:call("query", { [[INSERT INTO "space_simple_shard_key"
("sysOp", "id", "name") VALUES (?, ?, 'кириллица'), (?, ?, 'КИРИЛЛИЦА')]], { 5, 4, 6, 5 } })
t.assert_equals(err, nil)
t.assert_equals(r, {row_count = 2})
r, err = api:call("query", { [[SELECT *, "bucket_id" FROM "space_simple_shard_key"]], {} })
t.assert_equals(err, nil)
t.assert_equals(r, {
metadata = {
{name = "id", type = "integer"},
{name = "name", type = "string"},
{name = "sysOp", type = "integer"},
{name = "bucket_id", type = "unsigned"},
},
rows = {
{1, "ok", 1, 3940},
{5, "КИРИЛЛИЦА", 6, 6661},
{10, box.NULL, 0, 11520},
{4, "кириллица", 5, 27225},
},
})
end
-- check cyrillic params support
g.test_insert_5 = function()
local api = cluster:server("api-1").net_box
local r, err = api:call("query", { [[INSERT INTO "space_simple_shard_key"
("sysOp", "id", "name") VALUES (?, ?, ?), (?, ?, ?)]], { 5, 4, "кириллица", 6, 5, "КИРИЛЛИЦА" } })
t.assert_equals(err, nil)
t.assert_equals(r, {row_count = 2})
r, err = api:call("query", { [[SELECT *, "bucket_id" FROM "space_simple_shard_key"]], {} })
t.assert_equals(err, nil)
t.assert_equals(r, {
metadata = {
{name = "id", type = "integer"},
{name = "name", type = "string"},
{name = "sysOp", type = "integer"},
{name = "bucket_id", type = "unsigned"},
},
rows = {
{1, "ok", 1, 3940},
{5, "КИРИЛЛИЦА", 6, 6661},
{10, box.NULL, 0, 11520},
{4, "кириллица", 5, 27225},
},
})
end
g.test_invalid_explain = function()
local api = cluster:server("api-1").net_box
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment