use sql_cli::recursive_parser::{detect_cursor_context, CursorContext};
fn main() {
let test_cases = vec![
(
"SELECT * FROM table WHERE Country.",
"SELECT * FROM table WHERE Country.".len(),
),
(
"SELECT * FROM table WHERE Country.Con",
"SELECT * FROM table WHERE Country.Con".len(),
),
(
"SELECT * FROM table WHERE (Country.",
"SELECT * FROM table WHERE (Country.".len(),
),
(
"SELECT * FROM table WHERE (Country.Con",
"SELECT * FROM table WHERE (Country.Con".len(),
),
(
"SELECT * FROM table WHERE ((Country.",
"SELECT * FROM table WHERE ((Country.".len(),
),
(
"SELECT * FROM table WHERE (Country.Con",
"SELECT * FROM table WHERE (Country.Con".len(),
),
(
"SELECT * FROM table WHERE Age > 10 AND (Country.",
"SELECT * FROM table WHERE Age > 10 AND (Country.".len(),
),
];
for (query, cursor_pos) in test_cases {
let (context, partial) = detect_cursor_context(query, cursor_pos);
println!("Query: {}", query);
println!(" Cursor at: {}", cursor_pos);
println!(" Context: {:?}", context);
println!(" Partial: {:?}", partial);
match &context {
CursorContext::AfterColumn(col) => {
println!(" ✓ Detected column: {}", col);
assert_eq!(
col, "Country",
"Should extract 'Country' without parentheses"
);
}
_ => {
if query.contains('.') && !query.contains("()") {
println!(" ✗ Failed to detect method call context!");
panic!("Should detect AfterColumn context for: {}", query);
}
}
}
println!();
}
println!("✅ All tests passed!");
}