use rat_quickdb::adapter::OrderClause;
use rat_quickdb::join_macro::{JoinDefinition, JoinType};
use rat_quickdb::types::query::SortDirection;
use rat_quickdb::types::*;
use rat_quickdb::*;
define_join_table! {
virtual_table UserProfileInfo {
base_table: "users",
joins: [
JoinDefinition {
table: "profiles".to_string(),
on_condition: "users.id = profiles.user_id".to_string(),
join_type: JoinType::Left
}
],
fields: {
user_id: "users.id as user_id",
user_name: "users.name as user_name",
user_email: "users.email as user_email",
user_age: "users.age as user_age",
profile_name: "profiles.name as profile_name",
profile_bio: "profiles.bio as profile_bio",
profile_avatar: "profiles.avatar_url as profile_avatar"
}
}
}
define_join_table! {
virtual_table ArticleStats {
base_table: "articles",
joins: [
JoinDefinition {
table: "users".to_string(),
on_condition: "articles.author_id = users.id".to_string(),
join_type: JoinType::Inner
},
JoinDefinition {
table: "categories".to_string(),
on_condition: "articles.category_id = categories.id".to_string(),
join_type: JoinType::Inner
}
],
fields: {
article_id: "articles.id as article_id",
article_title: "articles.title as article_title",
author_name: "users.name as author_name",
author_email: "users.email as author_email",
category_name: "categories.name as category_name",
article_views: "articles.views as article_views",
article_created: "articles.created_at as article_created"
}
}
}
fn main() {
println!("🚀 虚拟表格宏测试");
println!("================");
test_user_profile_info();
test_article_stats();
println!("✅ 所有测试完成!");
}
fn test_user_profile_info() {
println!("\n📋 测试 UserProfileInfo 虚拟表格");
println!("===============================");
let profile = UserProfileInfo {
user_id: DataValue::Int(1),
user_name: DataValue::String("张三".to_string()),
user_email: DataValue::String("zhangsan@example.com".to_string()),
user_age: DataValue::Int(28),
profile_name: DataValue::String("张三的配置".to_string()),
profile_bio: DataValue::String("软件工程师".to_string()),
profile_avatar: DataValue::String("https://example.com/avatar.jpg".to_string()),
};
println!("虚拟表格实例: {:?}", profile);
let conditions = vec![QueryCondition {
field: "user_age".to_string(),
operator: QueryOperator::Gt,
value: DataValue::Int(25),
}];
let options = QueryOptions {
pagination: Some(crate::types::query::PaginationConfig { skip: 0, limit: 10 }),
sort: vec![crate::types::query::SortConfig {
field: "user_created_at".to_string(),
direction: SortDirection::Desc,
}],
..Default::default()
};
let (sql, params) = profile.to_sql(&conditions, &options);
println!("生成的SQL: {}", sql);
println!("参数: {:?}", params);
}
fn test_article_stats() {
println!("\n📚 测试 ArticleStats 虚拟表格");
println!("=========================");
let stats = ArticleStats {
article_id: DataValue::Int(1),
article_title: DataValue::String("如何使用Rust开发数据库应用".to_string()),
author_name: DataValue::String("李四".to_string()),
author_email: DataValue::String("lisi@example.com".to_string()),
category_name: DataValue::String("技术分享".to_string()),
article_views: DataValue::Int(1500),
article_created: DataValue::String("2023-12-01T10:00:00Z".to_string()),
};
println!("虚拟表格实例: {:?}", stats);
let conditions = vec![
QueryCondition {
field: "category_name".to_string(),
operator: QueryOperator::Eq,
value: DataValue::String("技术分享".to_string()),
},
QueryCondition {
field: "article_views".to_string(),
operator: QueryOperator::Gt,
value: DataValue::Int(100),
},
];
let options = QueryOptions {
pagination: Some(crate::types::query::PaginationConfig { skip: 0, limit: 5 }),
sort: vec![crate::types::query::SortConfig {
field: "article_views".to_string(),
direction: SortDirection::Desc,
}],
..Default::default()
};
let (sql, params) = stats.to_sql(&conditions, &options);
println!("生成的SQL: {}", sql);
println!("参数: {:?}", params);
}