Skip to content

Commit 4d0e1d3

Browse files
lustefaniakserprex
authored andcommitted
common: Make sure + - * / % binary operators work the same in all dialects (apache#1025)
1 parent b256730 commit 4d0e1d3

File tree

3 files changed

+59
-7
lines changed

3 files changed

+59
-7
lines changed

src/dialect/bigquery.rs

+1-5
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,6 @@ impl Dialect for BigQueryDialect {
2727
}
2828

2929
fn is_identifier_part(&self, ch: char) -> bool {
30-
ch.is_ascii_lowercase()
31-
|| ch.is_ascii_uppercase()
32-
|| ch.is_ascii_digit()
33-
|| ch == '_'
34-
|| ch == '-'
30+
ch.is_ascii_lowercase() || ch.is_ascii_uppercase() || ch.is_ascii_digit() || ch == '_'
3531
}
3632
}

tests/sqlparser_bigquery.rs

-2
Original file line numberDiff line numberDiff line change
@@ -615,8 +615,6 @@ fn parse_table_identifiers() {
615615
assert!(bigquery().parse_sql_statements(&sql).is_err());
616616
}
617617

618-
test_table_ident("da-sh-es", None, vec![Ident::new("da-sh-es")]);
619-
620618
test_table_ident("`spa ce`", None, vec![Ident::with_quote('`', "spa ce")]);
621619

622620
test_table_ident(

tests/sqlparser_common.rs

+58
Original file line numberDiff line numberDiff line change
@@ -7744,3 +7744,61 @@ fn parse_create_type() {
77447744
fn parse_create_table_collate() {
77457745
pg_and_generic().verified_stmt("CREATE TABLE tbl (foo INT, bar TEXT COLLATE \"de_DE\")");
77467746
}
7747+
7748+
#[test]
7749+
fn parse_binary_operators_without_whitespace() {
7750+
// x + y
7751+
all_dialects().one_statement_parses_to(
7752+
"SELECT field+1000 FROM tbl1",
7753+
"SELECT field + 1000 FROM tbl1",
7754+
);
7755+
7756+
all_dialects().one_statement_parses_to(
7757+
"SELECT tbl1.field+tbl2.field FROM tbl1 JOIN tbl2 ON tbl1.id = tbl2.entity_id",
7758+
"SELECT tbl1.field + tbl2.field FROM tbl1 JOIN tbl2 ON tbl1.id = tbl2.entity_id",
7759+
);
7760+
7761+
// x - y
7762+
all_dialects().one_statement_parses_to(
7763+
"SELECT field-1000 FROM tbl1",
7764+
"SELECT field - 1000 FROM tbl1",
7765+
);
7766+
7767+
all_dialects().one_statement_parses_to(
7768+
"SELECT tbl1.field-tbl2.field FROM tbl1 JOIN tbl2 ON tbl1.id = tbl2.entity_id",
7769+
"SELECT tbl1.field - tbl2.field FROM tbl1 JOIN tbl2 ON tbl1.id = tbl2.entity_id",
7770+
);
7771+
7772+
// x * y
7773+
all_dialects().one_statement_parses_to(
7774+
"SELECT field*1000 FROM tbl1",
7775+
"SELECT field * 1000 FROM tbl1",
7776+
);
7777+
7778+
all_dialects().one_statement_parses_to(
7779+
"SELECT tbl1.field*tbl2.field FROM tbl1 JOIN tbl2 ON tbl1.id = tbl2.entity_id",
7780+
"SELECT tbl1.field * tbl2.field FROM tbl1 JOIN tbl2 ON tbl1.id = tbl2.entity_id",
7781+
);
7782+
7783+
// x / y
7784+
all_dialects().one_statement_parses_to(
7785+
"SELECT field/1000 FROM tbl1",
7786+
"SELECT field / 1000 FROM tbl1",
7787+
);
7788+
7789+
all_dialects().one_statement_parses_to(
7790+
"SELECT tbl1.field/tbl2.field FROM tbl1 JOIN tbl2 ON tbl1.id = tbl2.entity_id",
7791+
"SELECT tbl1.field / tbl2.field FROM tbl1 JOIN tbl2 ON tbl1.id = tbl2.entity_id",
7792+
);
7793+
7794+
// x % y
7795+
all_dialects().one_statement_parses_to(
7796+
"SELECT field%1000 FROM tbl1",
7797+
"SELECT field % 1000 FROM tbl1",
7798+
);
7799+
7800+
all_dialects().one_statement_parses_to(
7801+
"SELECT tbl1.field%tbl2.field FROM tbl1 JOIN tbl2 ON tbl1.id = tbl2.entity_id",
7802+
"SELECT tbl1.field % tbl2.field FROM tbl1 JOIN tbl2 ON tbl1.id = tbl2.entity_id",
7803+
);
7804+
}

0 commit comments

Comments
 (0)