use ormer::Model;
use ormer::abstract_layer::DbType;
use ormer::query::builder::Select;
#[derive(Debug, Model)]
#[table = "users"]
struct User {
#[primary(auto)]
id: i32,
name: String,
age: i32,
}
#[test]
fn test_range_full() {
let select = Select::<User>::new().range(10..20);
let (sql, _) = select.to_sql_with_params(DbType::Turso);
assert!(sql.contains("OFFSET 10"));
assert!(sql.contains("LIMIT 10"));
println!("SQL with range(10..20): {}", sql);
}
#[test]
fn test_range_to() {
let select = Select::<User>::new().range(..10);
let (sql, _) = select.to_sql_with_params(DbType::Turso);
assert!(!sql.contains("OFFSET"));
assert!(sql.contains("LIMIT 10"));
println!("SQL with range(..10): {}", sql);
}
#[test]
fn test_range_from() {
let select = Select::<User>::new().range(10..);
let (sql, _) = select.to_sql_with_params(DbType::Turso);
assert!(sql.contains("OFFSET 10"));
assert!(!sql.contains("LIMIT"));
println!("SQL with range(10..): {}", sql);
}
#[test]
fn test_range_zero_to_ten() {
let select = Select::<User>::new().range(0..10);
let (sql, _) = select.to_sql_with_params(DbType::Turso);
assert!(sql.contains("OFFSET 0"));
assert!(sql.contains("LIMIT 10"));
println!("SQL with range(0..10): {}", sql);
}
#[test]
fn test_range_with_filter() {
let select = Select::<User>::new().filter(|p| p.age.ge(18)).range(..5);
let (sql, _) = select.to_sql_with_params(DbType::Turso);
assert!(sql.contains("WHERE"));
assert!(!sql.contains("OFFSET"));
assert!(sql.contains("LIMIT 5"));
println!("SQL with filter and range(..5): {}", sql);
}
#[test]
fn test_range_from_with_filter() {
let select = Select::<User>::new().filter(|p| p.age.ge(18)).range(10..);
let (sql, _) = select.to_sql_with_params(DbType::Turso);
assert!(sql.contains("WHERE"));
assert!(sql.contains("OFFSET 10"));
assert!(!sql.contains("LIMIT"));
println!("SQL with filter and range(10..): {}", sql);
}
#[test]
fn test_no_range() {
let select = Select::<User>::new();
let (sql, _) = select.to_sql_with_params(DbType::Turso);
assert!(!sql.contains("LIMIT"));
assert!(!sql.contains("OFFSET"));
println!("SQL without range: {}", sql);
}
#[test]
fn test_range_boundary_cases() {
let select1 = Select::<User>::new().range(0..10);
let (sql1, _) = select1.to_sql_with_params(DbType::Turso);
assert!(sql1.contains("OFFSET 0"));
assert!(sql1.contains("LIMIT 10"));
let select2 = Select::<User>::new().range(..5);
let (sql2, _) = select2.to_sql_with_params(DbType::Turso);
assert!(!sql2.contains("OFFSET"));
assert!(sql2.contains("LIMIT 5"));
let select3 = Select::<User>::new().range(20..);
let (sql3, _) = select3.to_sql_with_params(DbType::Turso);
assert!(sql3.contains("OFFSET 20"));
assert!(!sql3.contains("LIMIT"));
let select4 = Select::<User>::new().range(10..30);
let (sql4, _) = select4.to_sql_with_params(DbType::Turso);
assert!(sql4.contains("OFFSET 10"));
assert!(sql4.contains("LIMIT 20"));
println!("All boundary case tests passed!");
}