mod pool;
mod user;
#[tokio::main]
async fn main() {}
mod test_orm {
#![allow(unused)]
use crate::pool::get_pool;
use co_orm::{args, page_args, query, query_as, Crud, Where};
use sqlx::{
types::{chrono::NaiveDateTime, BigDecimal},
Execute,
};
use crate::user::User;
#[tokio::test]
pub async fn test_where_basic() {
let pool = get_pool().await.unwrap();
let users =
User::query_where(&pool, Where::new().eq("name", "jack").and().eq("age", 18)).await;
println!("基本比较查询: {:?}", users);
let users = User::query_where(
&pool,
Where::new().like("name", "%jack%").and().like("password", "%123456%"),
)
.await;
println!("模糊查询: {:?}", users);
let users =
User::query_where(&pool, Where::new().between("age", 18, 65).and().eq("status", 1))
.await;
println!("范围查询: {:?}", users);
let users = User::query_where(&pool, Where::new().r#in("age", vec![18, 20])).await;
println!("集合查询: {:?}", users);
let users =
User::query_where(&pool, Where::new().is_not_null("name").and().is_null("age")).await;
println!("NULL 值查询: {:?}", users);
}
#[tokio::test]
pub async fn test_where_complex() {
let pool = get_pool().await.unwrap();
let users = User::query_where(
&pool,
Where::new()
.gt("age", 18)
.and()
.eq("status", 1)
.or()
.like("password", "%123456%"),
)
.await;
println!("复杂逻辑组合: {:?}", users);
let users = User::query_where(
&pool,
Where::new()
.eq("status", 1)
.and_group(|w| w.gt("age", 18).and().lt("age", 65))
.or_group(|w| w.eq("name", "admin").or().eq("name", "root")),
)
.await;
println!("分组条件查询: {:?}", users);
let users = User::query_where(
&pool,
Where::new()
.eq("status", 1)
.and()
.between("age", 18, 65)
.and()
.like("password", "%123456%")
.and()
.ne("name", "jerry"),
)
.await;
println!("多字段组合查询: {:?}", users);
}
#[tokio::test]
pub async fn test_where_pagination() {
let pool = get_pool().await.unwrap();
let (count, users) = User::query_page_where(
&pool,
Where::new().eq("status", 1), 1, 10, )
.await
.unwrap();
println!("分页查询 - 总数: {}, 用户: {:?}", count, users);
let (count, users) = User::query_page_where(
&pool,
Where::new().eq("status", 1).and().ge("age", 18).and().like("name", "%jack%"),
2,
5,
)
.await
.unwrap();
println!("复杂分页查询 - 总数: {}, 用户: {:?}", count, users);
}
#[tokio::test]
pub async fn test_where_crud() {
let pool = get_pool().await.unwrap();
let mut user = User {
id: 0,
name: "test_user".to_string(),
password: "new_password".to_string(),
age: Some(25),
skip: None,
update_at: None,
status: None,
};
let result =
User::delete_where(&pool, Where::new().eq("status", 1).and().lt("age", 18)).await;
println!("条件删除结果: {:?}", result);
let user =
User::get_where(&pool, Where::new().eq("name", "jack").and().eq("status", 1)).await;
println!("条件查询单条记录: {:?}", user);
}
#[tokio::test]
pub async fn test_where_advanced() {
let pool = get_pool().await.unwrap();
let mut where_builder = Where::new();
where_builder = where_builder.eq("status", 1);
if true {
where_builder = where_builder.and().ge("age", 18);
}
if true {
where_builder = where_builder.and().like("password", "%123456%");
}
let users = User::query_where(&pool, where_builder).await;
println!("动态构建查询: {:?}", users);
let users = User::query_where(
&pool,
Where::new()
.eq("status", 1)
.and()
.raw("LENGTH(name) > 3") .and()
.between("age", 18, 65),
)
.await;
println!("自定义 SQL 片段查询: {:?}", users);
let users = User::query_where(
&pool,
Where::new()
.eq("status", 1)
.and_group(|w| {
w.gt("age", 18).and().lt("age", 65).and_group(|w2| {
w2.like("password", "%123456%").or().like("password", "%123456%")
})
})
.or_group(|w| w.eq("name", "admin").and().ge("age", 21)),
)
.await;
println!("复杂嵌套分组查询: {:?}", users);
}
#[tokio::test]
pub async fn test_where_performance() {
let pool = get_pool().await.unwrap();
let users = User::query_where(
&pool,
Where::new()
.eq("status", 1)
.and()
.ge("age", 18)
.and()
.like("password", "%123456%"),
)
.await;
println!("Where 构建器查询: {:?}", users);
let users = User::query_by(&pool, "where status=? and age>=?", args!(1, 18)).await;
println!("字符串拼接查询: {:?}", users);
}
}