use iridium_core::{parse_sql, DbError, Engine};
fn make_abs_chain(depth: usize) -> String {
let mut sql = "1".to_string();
for _ in 0..depth {
sql = format!("ABS({})", sql);
}
sql
}
#[test]
fn test_parser_recursion_limit() {
let sql = format!("SELECT {}", make_abs_chain(64));
let result = parse_sql(&sql);
match result {
Err(DbError::Parse(msg)) => {
assert!(msg.contains("recursion limit exceeded"));
}
_ => panic!("Expected parser recursion depth error, got {:?}", result),
}
}
#[test]
fn test_executor_recursion_limit_safe() {
let engine = Engine::new();
let sql = format!("SELECT {}", make_abs_chain(2));
let stmt = parse_sql(&sql).expect("Should pass parser at depth 2");
let result = engine.execute(stmt);
assert!(result.is_ok(), "Expected OK for depth 2, got {:?}", result);
}