use ignis_db::introspection::DatabaseIntrospector;
use ignis_db::migrate::SchemaMigrationManager;
use std::collections::HashMap;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("๐งช Testing Schema Diff with New Object Types");
let pool = sqlx::PgPool::connect("postgresql://postgres:postgres@localhost:5433/postgres").await?;
let introspector = DatabaseIntrospector::new(pool.clone());
println!("๐ Introspecting current database state...");
let current_tables = introspector.introspect_tables().await?;
let current_views = introspector.introspect_views().await?;
let current_composite_types = introspector.introspect_composite_types().await?;
let current_indexes = introspector.introspect_indexes().await?;
let current_functions = introspector.introspect_functions().await?;
let current_procedures = introspector.introspect_procedures().await?;
let current_triggers = introspector.introspect_triggers().await?;
println!("๐ Current state:");
println!(" โข Tables: {}", current_tables.len());
println!(" โข Views: {}", current_views.len());
println!(" โข Composite Types: {}", current_composite_types.len());
println!(" โข Indexes: {}", current_indexes.len());
println!(" โข Functions: {}", current_functions.len());
println!(" โข Procedures: {}", current_procedures.len());
println!(" โข Triggers: {}", current_triggers.len());
println!("\n๐ Testing schema diff with identical states...");
let manager = SchemaMigrationManager::new(pool)
.set_old_tables(current_tables.clone().into_iter().map(|t| (t.name.clone(), t)).collect())
.set_new_tables(current_tables.clone().into_iter().map(|t| (t.name.clone(), t)).collect())
.set_old_views(current_views.clone().into_iter().map(|v| (v.name.clone(), v)).collect())
.set_new_views(current_views.clone().into_iter().map(|v| (v.name.clone(), v)).collect())
.set_old_composite_types(current_composite_types.clone().into_iter().map(|ct| (ct.name.clone(), ct)).collect())
.set_new_composite_types(current_composite_types.clone().into_iter().map(|ct| (ct.name.clone(), ct)).collect())
.set_old_indexes(current_indexes.clone().into_iter().map(|i| (i.name.clone(), i)).collect())
.set_new_indexes(current_indexes.clone().into_iter().map(|i| (i.name.clone(), i)).collect())
.set_old_functions(current_functions.clone().into_iter().map(|f| (f.name.clone(), f)).collect())
.set_new_functions(current_functions.clone().into_iter().map(|f| (f.name.clone(), f)).collect())
.set_old_procedures(current_procedures.clone().into_iter().map(|p| (p.name.clone(), p)).collect())
.set_new_procedures(current_procedures.clone().into_iter().map(|p| (p.name.clone(), p)).collect())
.set_old_triggers(current_triggers.clone().into_iter().map(|t| (t.name.clone(), t)).collect())
.set_new_triggers(current_triggers.clone().into_iter().map(|t| (t.name.clone(), t)).collect());
match manager.generate_migration("test_no_changes") {
Ok(_) => println!("โ Expected error for no changes, but got success"),
Err(e) => {
if e.to_string().contains("No schema changes detected") {
println!("โ
Correctly detected no schema changes");
} else {
println!("โ Unexpected error: {}", e);
}
}
}
println!("\n๐ Schema diff test completed!");
Ok(())
}