use sql_cli::sql::recursive_parser::{Parser, SelectItem};
#[test]
fn test_parse_star_comma_expression() {
let query = "SELECT *, quantity * price as total FROM test_table";
let mut parser = Parser::new(query);
match parser.parse() {
Ok(stmt) => {
println!("Select items: {:?}", stmt.select_items);
println!("Columns (legacy): {:?}", stmt.columns);
assert_eq!(stmt.select_items.len(), 2, "Expected 2 select items");
assert!(matches!(stmt.select_items[0], SelectItem::Star { .. }));
match &stmt.select_items[1] {
SelectItem::Expression { alias, .. } => {
assert_eq!(alias, "total");
}
_ => panic!("Expected Expression, got {:?}", stmt.select_items[1]),
}
}
Err(e) => {
panic!("Parser failed: {e}");
}
}
}
#[test]
fn test_parse_expression_comma_star() {
let query = "SELECT quantity * price as total, * FROM test_table";
let mut parser = Parser::new(query);
match parser.parse() {
Ok(stmt) => {
println!("Select items: {:?}", stmt.select_items);
assert_eq!(stmt.select_items.len(), 2, "Expected 2 select items");
match &stmt.select_items[0] {
SelectItem::Expression { alias, .. } => {
assert_eq!(alias, "total");
}
_ => panic!("Expected Expression, got {:?}", stmt.select_items[0]),
}
assert!(matches!(stmt.select_items[1], SelectItem::Star { .. }));
}
Err(e) => {
panic!("Parser failed: {e}");
}
}
}