mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-08-24 16:04:04 +00:00
Improve INSERT tests
De-duplicate and check for specific error in `parse_insert_invalid`.
This commit is contained in:
parent
d58bbb8f9f
commit
fe635350f0
1 changed files with 41 additions and 101 deletions
|
@ -21,77 +21,44 @@ fn test_prev_index() {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn parse_simple_insert() {
|
fn parse_insert_values() {
|
||||||
let sql = String::from("INSERT INTO customer VALUES(1, 2, 3)");
|
let sql = "INSERT INTO customer VALUES(1, 2, 3)";
|
||||||
match verified_stmt(&sql) {
|
check_one(sql, "customer", vec![]);
|
||||||
SQLStatement::SQLInsert {
|
|
||||||
table_name,
|
|
||||||
columns,
|
|
||||||
values,
|
|
||||||
..
|
|
||||||
} => {
|
|
||||||
assert_eq!(table_name.to_string(), "customer");
|
|
||||||
assert!(columns.is_empty());
|
|
||||||
assert_eq!(
|
|
||||||
vec![vec![
|
|
||||||
ASTNode::SQLValue(Value::Long(1)),
|
|
||||||
ASTNode::SQLValue(Value::Long(2)),
|
|
||||||
ASTNode::SQLValue(Value::Long(3))
|
|
||||||
]],
|
|
||||||
values
|
|
||||||
);
|
|
||||||
}
|
|
||||||
_ => unreachable!(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
let sql = "INSERT INTO public.customer VALUES(1, 2, 3)";
|
||||||
fn parse_common_insert() {
|
check_one(sql, "public.customer", vec![]);
|
||||||
let sql = String::from("INSERT INTO public.customer VALUES(1, 2, 3)");
|
|
||||||
match verified_stmt(&sql) {
|
|
||||||
SQLStatement::SQLInsert {
|
|
||||||
table_name,
|
|
||||||
columns,
|
|
||||||
values,
|
|
||||||
..
|
|
||||||
} => {
|
|
||||||
assert_eq!(table_name.to_string(), "public.customer");
|
|
||||||
assert!(columns.is_empty());
|
|
||||||
assert_eq!(
|
|
||||||
vec![vec![
|
|
||||||
ASTNode::SQLValue(Value::Long(1)),
|
|
||||||
ASTNode::SQLValue(Value::Long(2)),
|
|
||||||
ASTNode::SQLValue(Value::Long(3))
|
|
||||||
]],
|
|
||||||
values
|
|
||||||
);
|
|
||||||
}
|
|
||||||
_ => unreachable!(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
let sql = "INSERT INTO db.public.customer VALUES(1, 2, 3)";
|
||||||
fn parse_complex_insert() {
|
check_one(sql, "db.public.customer", vec![]);
|
||||||
let sql = String::from("INSERT INTO db.public.customer VALUES(1, 2, 3)");
|
|
||||||
match verified_stmt(&sql) {
|
let sql = "INSERT INTO public.customer (id, name, active) VALUES(1, 2, 3)";
|
||||||
SQLStatement::SQLInsert {
|
check_one(
|
||||||
table_name,
|
sql,
|
||||||
columns,
|
"public.customer",
|
||||||
values,
|
vec!["id".to_string(), "name".to_string(), "active".to_string()],
|
||||||
..
|
);
|
||||||
} => {
|
|
||||||
assert_eq!(table_name.to_string(), "db.public.customer");
|
fn check_one(sql: &str, expected_table_name: &str, expected_columns: Vec<String>) {
|
||||||
assert!(columns.is_empty());
|
match verified_stmt(sql) {
|
||||||
assert_eq!(
|
SQLStatement::SQLInsert {
|
||||||
vec![vec![
|
table_name,
|
||||||
ASTNode::SQLValue(Value::Long(1)),
|
columns,
|
||||||
ASTNode::SQLValue(Value::Long(2)),
|
values,
|
||||||
ASTNode::SQLValue(Value::Long(3))
|
..
|
||||||
]],
|
} => {
|
||||||
values
|
assert_eq!(table_name.to_string(), expected_table_name);
|
||||||
);
|
assert_eq!(columns, expected_columns);
|
||||||
|
assert_eq!(
|
||||||
|
vec![vec![
|
||||||
|
ASTNode::SQLValue(Value::Long(1)),
|
||||||
|
ASTNode::SQLValue(Value::Long(2)),
|
||||||
|
ASTNode::SQLValue(Value::Long(3))
|
||||||
|
]],
|
||||||
|
values
|
||||||
|
);
|
||||||
|
}
|
||||||
|
_ => unreachable!(),
|
||||||
}
|
}
|
||||||
_ => unreachable!(),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,41 +76,14 @@ fn parse_no_table_name() {
|
||||||
assert!(ast.is_err());
|
assert!(ast.is_err());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn parse_insert_with_columns() {
|
|
||||||
let sql = String::from("INSERT INTO public.customer (id, name, active) VALUES(1, 2, 3)");
|
|
||||||
match verified_stmt(&sql) {
|
|
||||||
SQLStatement::SQLInsert {
|
|
||||||
table_name,
|
|
||||||
columns,
|
|
||||||
values,
|
|
||||||
..
|
|
||||||
} => {
|
|
||||||
assert_eq!(table_name.to_string(), "public.customer");
|
|
||||||
assert_eq!(
|
|
||||||
columns,
|
|
||||||
vec!["id".to_string(), "name".to_string(), "active".to_string()]
|
|
||||||
);
|
|
||||||
assert_eq!(
|
|
||||||
vec![vec![
|
|
||||||
ASTNode::SQLValue(Value::Long(1)),
|
|
||||||
ASTNode::SQLValue(Value::Long(2)),
|
|
||||||
ASTNode::SQLValue(Value::Long(3))
|
|
||||||
]],
|
|
||||||
values
|
|
||||||
);
|
|
||||||
}
|
|
||||||
_ => unreachable!(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn parse_insert_invalid() {
|
fn parse_insert_invalid() {
|
||||||
let sql = String::from("INSERT public.customer (id, name, active) VALUES (1, 2, 3)");
|
let sql = "INSERT public.customer (id, name, active) VALUES (1, 2, 3)";
|
||||||
match Parser::parse_sql(&PostgreSqlDialect {}, sql) {
|
let res = parse_sql_statements(sql);
|
||||||
Err(_) => {}
|
assert_eq!(
|
||||||
_ => unreachable!(),
|
ParserError::ParserError("Expected INTO, found: public".to_string()),
|
||||||
}
|
res.unwrap_err()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue