use super::config::{DatabaseConfig, SecurityConfig};
use super::server::SqlServer;
use super::executor::{QUERY_EXECUTOR};
pub async fn initialize_sql_server() -> Result<(), Box<dyn std::error::Error>> {
let db_config = DatabaseConfig::default();
let security_config = SecurityConfig::default();
println!("[SQL Server] Initializing with config: {:?}", db_config);
let mut server = SqlServer::new(db_config, security_config).await?;
let server_metrics = server.get_metrics().await;
println!("[SQL Server] Metrics system initialized: {:?}", server_metrics);
server.start().await?;
QUERY_EXECUTOR.register_server(server).await;
start_background_tasks().await;
println!("[SQL Server] Initialized successfully and ready for queries");
Ok(())
}
async fn start_background_tasks() {
tokio::spawn(async move {
let mut interval = tokio::time::interval(tokio::time::Duration::from_secs(60));
loop {
interval.tick().await;
perform_maintenance_tasks().await;
}
});
}
async fn perform_maintenance_tasks() {
println!("[Maintenance] Performing periodic maintenance tasks");
}
pub async fn shutdown_sql_server() -> Result<(), Box<dyn std::error::Error>> {
println!("[SQL Server] Shutting down...");
QUERY_EXECUTOR.unregister_server().await;
println!("[SQL Server] Shutdown completed");
Ok(())
}
pub async fn restart_sql_server() -> Result<(), Box<dyn std::error::Error>> {
println!("[SQL Server] Restarting...");
shutdown_sql_server().await?;
tokio::time::sleep(tokio::time::Duration::from_secs(1)).await;
initialize_sql_server().await?;
println!("[SQL Server] Restart completed");
Ok(())
}