#![cfg(any(feature = "turso", feature = "postgresql", feature = "mysql"))]
use ormer::Model;
mod _test_common;
define_test_user_simple!(TestUser, "schema_validation_users_1");
#[derive(Debug, Model)]
#[table = "schema_validation_users_different_1"]
struct TestUserDifferent {
#[primary]
id: i32,
name: String,
address: String,
email: Option<String>,
}
#[derive(Debug, Model)]
#[table = "schema_validation_users_missing_1"]
struct TestUserMissingColumn {
#[primary]
id: i32,
name: String,
}
async fn test_schema_validation_impl(
config: &_test_common::DbConfig,
) -> Result<(), Box<dyn std::error::Error>> {
println!("=== 测试表结构验证功能 ===\n");
let db = _test_common::create_db_connection(config).await?;
println!("测试 1: 首次创建表");
match db.create_table::<TestUser>().execute().await {
Ok(_) => println!("✓ 表创建成功\n"),
Err(e) => println!("✗ 表创建失败: {e}\n"),
}
println!("测试 2: 再次创建相同结构的表");
match db.create_table::<TestUser>().execute().await {
Ok(_) => println!("✓ 表结构验证通过(表已存在但结构匹配)\n"),
Err(e) => println!("✗ 表结构验证失败: {e}\n"),
}
println!("测试 3: 尝试用不同的表结构创建");
match db.create_table::<TestUserDifferent>().execute().await {
Ok(_) => {
println!("✗ 应该失败但却成功了\n");
db.drop_table::<TestUserDifferent>().execute().await?;
}
Err(e) => println!("✓ 正确检测到表结构不匹配: {e}\n"),
}
println!("测试 4: 尝试用缺少列的表结构创建");
match db.create_table::<TestUserMissingColumn>().execute().await {
Ok(_) => {
println!("✗ 应该失败但却成功了\n");
db.drop_table::<TestUserMissingColumn>().execute().await?;
}
Err(e) => println!("✓ 正确检测到表结构不匹配: {e}\n"),
}
println!("=== 测试完成 ===");
db.drop_table::<TestUser>().execute().await?;
Ok(())
}
test_on_all_dbs_result!(test_schema_validation_impl);