Skip to content

Commit 9d14c05

Browse files
committed
Adjust the structure of the test code
1 parent 6b47ca1 commit 9d14c05

File tree

1 file changed

+99
-73
lines changed

1 file changed

+99
-73
lines changed

tests/sqlparser_common.rs

Lines changed: 99 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -11522,10 +11522,13 @@ fn parse_notify_channel() {
1152211522
#[test]
1152311523
fn parse_load_data() {
1152411524
let dialects = all_dialects_where(|d| d.supports_load_data());
11525+
let only_supports_load_extension_dialects =
11526+
all_dialects_where(|d| !d.supports_load_data() && d.supports_load_extension());
11527+
let not_supports_load_dialects =
11528+
all_dialects_where(|d| !d.supports_load_data() && !d.supports_load_extension());
1152511529

11526-
match dialects
11527-
.verified_stmt("LOAD DATA INPATH '/local/path/to/data.txt' INTO TABLE test.my_table")
11528-
{
11530+
let sql = "LOAD DATA INPATH '/local/path/to/data.txt' INTO TABLE test.my_table";
11531+
match dialects.verified_stmt(sql) {
1152911532
Statement::LoadData {
1153011533
local,
1153111534
inpath,
@@ -11548,9 +11551,8 @@ fn parse_load_data() {
1154811551
};
1154911552

1155011553
// with OVERWRITE keyword
11551-
match dialects
11552-
.verified_stmt("LOAD DATA INPATH '/local/path/to/data.txt' OVERWRITE INTO TABLE my_table")
11553-
{
11554+
let sql = "LOAD DATA INPATH '/local/path/to/data.txt' OVERWRITE INTO TABLE my_table";
11555+
match dialects.verified_stmt(sql) {
1155411556
Statement::LoadData {
1155511557
local,
1155611558
inpath,
@@ -11569,10 +11571,19 @@ fn parse_load_data() {
1156911571
_ => unreachable!(),
1157011572
};
1157111573

11574+
assert_eq!(
11575+
only_supports_load_extension_dialects
11576+
.parse_sql_statements(sql)
11577+
.unwrap_err(),
11578+
ParserError::ParserError("Expected: end of statement, found: INPATH".to_string())
11579+
);
11580+
assert_eq!( not_supports_load_dialects.parse_sql_statements(sql).unwrap_err(),
11581+
ParserError::ParserError("Expected: dialect supports `LOAD DATA` or `LOAD extension` to parse `LOAD` statements, found: INPATH".to_string())
11582+
);
11583+
1157211584
// with LOCAL keyword
11573-
match dialects
11574-
.verified_stmt("LOAD DATA LOCAL INPATH '/local/path/to/data.txt' INTO TABLE test.my_table")
11575-
{
11585+
let sql = "LOAD DATA LOCAL INPATH '/local/path/to/data.txt' INTO TABLE test.my_table";
11586+
match dialects.verified_stmt(sql) {
1157611587
Statement::LoadData {
1157711588
local,
1157811589
inpath,
@@ -11594,93 +11605,108 @@ fn parse_load_data() {
1159411605
_ => unreachable!(),
1159511606
};
1159611607

11608+
assert_eq!(
11609+
only_supports_load_extension_dialects
11610+
.parse_sql_statements(sql)
11611+
.unwrap_err(),
11612+
ParserError::ParserError("Expected: end of statement, found: LOCAL".to_string())
11613+
);
11614+
assert_eq!(
11615+
not_supports_load_dialects.parse_sql_statements(sql).unwrap_err(),
11616+
ParserError::ParserError("Expected: dialect supports `LOAD DATA` or `LOAD extension` to parse `LOAD` statements, found: LOCAL".to_string())
11617+
);
11618+
1159711619
// with PARTITION clause
11598-
match dialects.verified_stmt("LOAD DATA LOCAL INPATH '/local/path/to/data.txt' INTO TABLE my_table PARTITION (year = 2024, month = 11)") {
11599-
Statement::LoadData {local, inpath, overwrite, table_name, partitioned, table_format} => {
11620+
let sql = "LOAD DATA LOCAL INPATH '/local/path/to/data.txt' INTO TABLE my_table PARTITION (year = 2024, month = 11)";
11621+
match dialects.verified_stmt(sql) {
11622+
Statement::LoadData {
11623+
local,
11624+
inpath,
11625+
overwrite,
11626+
table_name,
11627+
partitioned,
11628+
table_format,
11629+
} => {
1160011630
assert_eq!(true, local);
1160111631
assert_eq!("/local/path/to/data.txt", inpath);
1160211632
assert_eq!(false, overwrite);
1160311633
assert_eq!(ObjectName(vec![Ident::new("my_table")]), table_name);
11604-
assert_eq!(Some(vec![
11605-
Expr::BinaryOp{
11606-
left: Box::new(Expr::Identifier(Ident::new("year"))),
11607-
op: BinaryOperator::Eq,
11608-
right: Box::new(Expr::Value(Value::Number("2024".parse().unwrap(), false))),
11609-
},
11610-
Expr::BinaryOp{
11611-
left: Box::new(Expr::Identifier(Ident::new("month"))),
11612-
op: BinaryOperator::Eq,
11613-
right: Box::new(Expr::Value(Value::Number("11".parse().unwrap(), false))),
11614-
}]), partitioned);
11634+
assert_eq!(
11635+
Some(vec![
11636+
Expr::BinaryOp {
11637+
left: Box::new(Expr::Identifier(Ident::new("year"))),
11638+
op: BinaryOperator::Eq,
11639+
right: Box::new(Expr::Value(Value::Number("2024".parse().unwrap(), false))),
11640+
},
11641+
Expr::BinaryOp {
11642+
left: Box::new(Expr::Identifier(Ident::new("month"))),
11643+
op: BinaryOperator::Eq,
11644+
right: Box::new(Expr::Value(Value::Number("11".parse().unwrap(), false))),
11645+
}
11646+
]),
11647+
partitioned
11648+
);
1161511649
assert_eq!(None, table_format);
1161611650
}
1161711651
_ => unreachable!(),
1161811652
};
1161911653

1162011654
// with PARTITION clause
11621-
match dialects.verified_stmt("LOAD DATA LOCAL INPATH '/local/path/to/data.txt' OVERWRITE INTO TABLE good.my_table PARTITION (year = 2024, month = 11) INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'") {
11622-
Statement::LoadData {local, inpath, overwrite, table_name, partitioned, table_format} => {
11623-
assert_eq!(true, local);
11624-
assert_eq!("/local/path/to/data.txt", inpath);
11625-
assert_eq!(true, overwrite);
11626-
assert_eq!(ObjectName(vec![Ident::new("good"), Ident::new("my_table")]), table_name);
11627-
assert_eq!(Some(vec![
11628-
Expr::BinaryOp{
11655+
let sql = "LOAD DATA LOCAL INPATH '/local/path/to/data.txt' OVERWRITE INTO TABLE good.my_table PARTITION (year = 2024, month = 11) INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'";
11656+
match dialects.verified_stmt(sql) {
11657+
Statement::LoadData {
11658+
local,
11659+
inpath,
11660+
overwrite,
11661+
table_name,
11662+
partitioned,
11663+
table_format,
11664+
} => {
11665+
assert_eq!(true, local);
11666+
assert_eq!("/local/path/to/data.txt", inpath);
11667+
assert_eq!(true, overwrite);
11668+
assert_eq!(
11669+
ObjectName(vec![Ident::new("good"), Ident::new("my_table")]),
11670+
table_name
11671+
);
11672+
assert_eq!(
11673+
Some(vec![
11674+
Expr::BinaryOp {
1162911675
left: Box::new(Expr::Identifier(Ident::new("year"))),
1163011676
op: BinaryOperator::Eq,
11631-
right: Box::new(Expr::Value(Value::Number("2024".parse().unwrap(), false))),
11677+
right: Box::new(Expr::Value(Value::Number("2024".parse().unwrap(), false))),
1163211678
},
11633-
Expr::BinaryOp{
11679+
Expr::BinaryOp {
1163411680
left: Box::new(Expr::Identifier(Ident::new("month"))),
1163511681
op: BinaryOperator::Eq,
11636-
right: Box::new(Expr::Value(Value::Number("11".parse().unwrap(), false))),
11637-
}]), partitioned);
11638-
assert_eq!(Some(HiveLoadDataFormat {serde: Expr::Value(Value::SingleQuotedString("org.apache.hadoop.hive.serde2.OpenCSVSerde".to_string())), input_format: Expr::Value(Value::SingleQuotedString("org.apache.hadoop.mapred.TextInputFormat".to_string()))}), table_format);
11639-
}
11640-
_ => unreachable!(),
11641-
};
11682+
right: Box::new(Expr::Value(Value::Number("11".parse().unwrap(), false))),
11683+
}
11684+
]),
11685+
partitioned
11686+
);
11687+
assert_eq!(
11688+
Some(HiveLoadDataFormat {
11689+
serde: Expr::Value(Value::SingleQuotedString(
11690+
"org.apache.hadoop.hive.serde2.OpenCSVSerde".to_string()
11691+
)),
11692+
input_format: Expr::Value(Value::SingleQuotedString(
11693+
"org.apache.hadoop.mapred.TextInputFormat".to_string()
11694+
))
11695+
}),
11696+
table_format
11697+
);
11698+
}
11699+
_ => unreachable!(),
11700+
};
1164211701

1164311702
// negative test case
11703+
let sql = "LOAD DATA2 LOCAL INPATH '/local/path/to/data.txt' INTO TABLE test.my_table";
1164411704
assert_eq!(
1164511705
dialects
11646-
.parse_sql_statements(
11647-
"LOAD DATA2 LOCAL INPATH '/local/path/to/data.txt' INTO TABLE test.my_table"
11648-
)
11706+
.parse_sql_statements(sql)
1164911707
.unwrap_err(),
1165011708
ParserError::ParserError("Expected: dialect supports `LOAD DATA` or `LOAD extension` to parse `LOAD` statements, found: DATA2".to_string())
1165111709
);
11652-
11653-
let dialects = all_dialects_where(|d| !d.supports_load_data() && d.supports_load_extension());
11654-
11655-
assert_eq!(
11656-
dialects
11657-
.parse_sql_statements(
11658-
"LOAD DATA LOCAL INPATH '/local/path/to/data.txt' INTO TABLE test.my_table"
11659-
)
11660-
.unwrap_err(),
11661-
ParserError::ParserError("Expected: end of statement, found: LOCAL".to_string())
11662-
);
11663-
11664-
assert_eq!(
11665-
dialects
11666-
.parse_sql_statements(
11667-
"LOAD DATA INPATH '/local/path/to/data.txt' INTO TABLE test.my_table"
11668-
)
11669-
.unwrap_err(),
11670-
ParserError::ParserError("Expected: end of statement, found: INPATH".to_string())
11671-
);
11672-
11673-
let dialects = all_dialects_where(|d| !d.supports_load_data() && !d.supports_load_extension());
11674-
11675-
assert_eq!(
11676-
dialects.parse_sql_statements("LOAD DATA LOCAL INPATH '/local/path/to/data.txt' INTO TABLE test.my_table").unwrap_err(),
11677-
ParserError::ParserError("Expected: dialect supports `LOAD DATA` or `LOAD extension` to parse `LOAD` statements, found: LOCAL".to_string())
11678-
);
11679-
11680-
assert_eq!(
11681-
dialects.parse_sql_statements("LOAD DATA INPATH '/local/path/to/data.txt' INTO TABLE test.my_table").unwrap_err(),
11682-
ParserError::ParserError("Expected: dialect supports `LOAD DATA` or `LOAD extension` to parse `LOAD` statements, found: INPATH".to_string())
11683-
);
1168411710
}
1168511711

1168611712
#[test]

0 commit comments

Comments
 (0)