Skip to content

Commit e32c3c8

Browse files
author
Roman Borschel
committed
Improve tests as suggested in code review.
1 parent 0eda729 commit e32c3c8

File tree

1 file changed

+50
-28
lines changed

1 file changed

+50
-28
lines changed

tests/sqlparser_mysql.rs

+50-28
Original file line numberDiff line numberDiff line change
@@ -1929,13 +1929,8 @@ fn parse_select_with_numeric_prefix_column_name() {
19291929
#[test]
19301930
fn parse_qualified_identifiers_with_numeric_prefix() {
19311931
// Case 1: Qualified column name that starts with digits.
1932-
mysql().verified_stmt("SELECT t.15to29 FROM my_table AS t");
1933-
match mysql()
1934-
.parse_sql_statements("SELECT t.15to29 FROM my_table AS t")
1935-
.unwrap()
1936-
.pop()
1937-
{
1938-
Some(Statement::Query(q)) => match *q.body {
1932+
match mysql().verified_stmt("SELECT t.15to29 FROM my_table AS t") {
1933+
Statement::Query(q) => match *q.body {
19391934
SetExpr::Select(s) => match s.projection.last() {
19401935
Some(SelectItem::UnnamedExpr(Expr::CompoundIdentifier(parts))) => {
19411936
assert_eq!(&[Ident::new("t"), Ident::new("15to29")], &parts[..]);
@@ -1948,13 +1943,8 @@ fn parse_qualified_identifiers_with_numeric_prefix() {
19481943
}
19491944

19501945
// Case 2: Qualified column name that starts with digits and on its own represents a number.
1951-
mysql().verified_stmt("SELECT t.15e29 FROM my_table AS t");
1952-
match mysql()
1953-
.parse_sql_statements("SELECT t.15e29 FROM my_table AS t")
1954-
.unwrap()
1955-
.pop()
1956-
{
1957-
Some(Statement::Query(q)) => match *q.body {
1946+
match mysql().verified_stmt("SELECT t.15e29 FROM my_table AS t") {
1947+
Statement::Query(q) => match *q.body {
19581948
SetExpr::Select(s) => match s.projection.last() {
19591949
Some(SelectItem::UnnamedExpr(Expr::CompoundIdentifier(parts))) => {
19601950
assert_eq!(&[Ident::new("t"), Ident::new("15e29")], &parts[..]);
@@ -1985,13 +1975,8 @@ fn parse_qualified_identifiers_with_numeric_prefix() {
19851975
}
19861976

19871977
// Case 4: Quoted simple identifier.
1988-
mysql().verified_stmt("SELECT `15e29` FROM my_table");
1989-
match mysql()
1990-
.parse_sql_statements("SELECT `15e29` FROM my_table")
1991-
.unwrap()
1992-
.pop()
1993-
{
1994-
Some(Statement::Query(q)) => match *q.body {
1978+
match mysql().verified_stmt("SELECT `15e29` FROM my_table") {
1979+
Statement::Query(q) => match *q.body {
19951980
SetExpr::Select(s) => match s.projection.last() {
19961981
Some(SelectItem::UnnamedExpr(Expr::Identifier(name))) => {
19971982
assert_eq!(&Ident::with_quote('`', "15e29"), name);
@@ -2004,13 +1989,8 @@ fn parse_qualified_identifiers_with_numeric_prefix() {
20041989
}
20051990

20061991
// Case 5: Quoted compound identifier.
2007-
mysql().verified_stmt("SELECT t.`15e29` FROM my_table");
2008-
match mysql()
2009-
.parse_sql_statements("SELECT t.`15e29` FROM my_table AS t")
2010-
.unwrap()
2011-
.pop()
2012-
{
2013-
Some(Statement::Query(q)) => match *q.body {
1992+
match mysql().verified_stmt("SELECT t.`15e29` FROM my_table AS t") {
1993+
Statement::Query(q) => match *q.body {
20141994
SetExpr::Select(s) => match s.projection.last() {
20151995
Some(SelectItem::UnnamedExpr(Expr::CompoundIdentifier(parts))) => {
20161996
assert_eq!(
@@ -2024,6 +2004,48 @@ fn parse_qualified_identifiers_with_numeric_prefix() {
20242004
},
20252005
stmt => panic!("Unexpected statement: {:?}", stmt),
20262006
}
2007+
2008+
// Case 6: Multi-level compound identifiers.
2009+
match mysql().verified_stmt("SELECT 1db.1table.1column") {
2010+
Statement::Query(q) => match *q.body {
2011+
SetExpr::Select(s) => match s.projection.last() {
2012+
Some(SelectItem::UnnamedExpr(Expr::CompoundIdentifier(parts))) => {
2013+
assert_eq!(
2014+
&[
2015+
Ident::new("1db"),
2016+
Ident::new("1table"),
2017+
Ident::new("1column")
2018+
],
2019+
&parts[..]
2020+
);
2021+
}
2022+
proj => panic!("Unexpected projection: {:?}", proj),
2023+
},
2024+
body => panic!("Unexpected statement body: {:?}", body),
2025+
},
2026+
stmt => panic!("Unexpected statement: {:?}", stmt),
2027+
}
2028+
2029+
// Case 7: Multi-level compound quoted identifiers.
2030+
match mysql().verified_stmt("SELECT `1`.`2`.`3`") {
2031+
Statement::Query(q) => match *q.body {
2032+
SetExpr::Select(s) => match s.projection.last() {
2033+
Some(SelectItem::UnnamedExpr(Expr::CompoundIdentifier(parts))) => {
2034+
assert_eq!(
2035+
&[
2036+
Ident::with_quote('`', "1"),
2037+
Ident::with_quote('`', "2"),
2038+
Ident::with_quote('`', "3")
2039+
],
2040+
&parts[..]
2041+
);
2042+
}
2043+
proj => panic!("Unexpected projection: {:?}", proj),
2044+
},
2045+
body => panic!("Unexpected statement body: {:?}", body),
2046+
},
2047+
stmt => panic!("Unexpected statement: {:?}", stmt),
2048+
}
20272049
}
20282050

20292051
// Don't run with bigdecimal as it fails like this on rust beta:

0 commit comments

Comments
 (0)