use sz_rust_core::sql_string;
#[test]
fn test_sql_string_valid_select() {
let sql = sql_string!("SELECT * FROM users WHERE id = 1");
assert_eq!(sql, "SELECT * FROM users WHERE id = 1");
}
#[test]
fn test_sql_string_valid_select_with_params() {
let sql = sql_string!("SELECT id, name FROM users WHERE id = ? AND status = ?");
assert!(sql.contains("SELECT"));
assert!(sql.contains("FROM"));
assert_eq!(sql.matches('?').count(), 2);
}
#[test]
fn test_sql_string_with_param_count_match() {
let sql = sql_string!("SELECT * FROM users WHERE id = ?"; params: 1);
assert_eq!(sql.matches('?').count(), 1);
}
#[test]
fn test_sql_string_valid_insert() {
let sql = sql_string!("INSERT INTO users (id, name) VALUES (1, 'Alice')");
assert!(sql.starts_with("INSERT"));
assert!(sql.contains("INTO"));
assert!(sql.contains("VALUES"));
}
#[test]
fn test_sql_string_valid_update() {
let sql = sql_string!("UPDATE users SET name = 'Bob' WHERE id = 1");
assert!(sql.starts_with("UPDATE"));
assert!(sql.contains("SET"));
}
#[test]
fn test_sql_string_valid_delete() {
let sql = sql_string!("DELETE FROM users WHERE id = 1");
assert!(sql.starts_with("DELETE"));
assert!(sql.contains("FROM"));
}
#[test]
fn test_sql_string_complex_select_with_subquery() {
let sql = sql_string!(
"SELECT id, name FROM users WHERE id IN (SELECT user_id FROM orders WHERE total > 100)"
);
assert!(sql.contains("IN"));
assert!(sql.contains("SELECT"));
}
#[test]
fn test_sql_string_balanced_parens() {
let sql = sql_string!("SELECT * FROM users WHERE (id = 1 OR id = 2) AND status = 1");
assert_eq!(sql.matches('(').count(), sql.matches(')').count());
}
#[test]
fn test_sql_string_returns_static_str() {
let sql: &'static str = sql_string!("SELECT 1 FROM dual");
assert_eq!(sql, "SELECT 1 FROM dual");
}
#[test]
fn test_query_macro_valid_select() {
use sz_rust_core::query;
let sql = query!("SELECT * FROM users WHERE id = 1");
assert_eq!(sql, "SELECT * FROM users WHERE id = 1");
}