Fix SQLite UNC path connections

This commit is contained in:
Agent-43 2026-05-03 23:28:45 +05:30
parent ea0dce23e2
commit 81bd188972
2 changed files with 18 additions and 4 deletions

View File

@ -93,7 +93,7 @@ impl AppState {
DatabaseType::Mysql => PoolKind::Mysql(db::mysql::connect(&url).await?, false),
DatabaseType::Doris | DatabaseType::StarRocks => PoolKind::Mysql(db::mysql::connect_bare(&url).await?, true),
DatabaseType::Postgres | DatabaseType::Redshift => PoolKind::Postgres(db::postgres::connect(&url).await?),
DatabaseType::Sqlite => PoolKind::Sqlite(db::sqlite::connect(&url).await?),
DatabaseType::Sqlite => PoolKind::Sqlite(db::sqlite::connect_path(&db_config.host).await?),
DatabaseType::Redis => {
let con = db::redis_driver::connect(&url).await?;
PoolKind::Redis(tokio::sync::Mutex::new(con))
@ -302,7 +302,7 @@ pub async fn test_connection(
}
Err(e) => Err(e),
},
DatabaseType::Sqlite => match db::sqlite::connect(&url).await {
DatabaseType::Sqlite => match db::sqlite::connect_path(&config.host).await {
Ok(pool) => {
pool.close().await;
Ok("Connection successful".to_string())
@ -387,7 +387,7 @@ pub async fn connect_db(
DatabaseType::Mysql => PoolKind::Mysql(db::mysql::connect(&url).await?, false),
DatabaseType::Doris | DatabaseType::StarRocks => PoolKind::Mysql(db::mysql::connect_bare(&url).await?, true),
DatabaseType::Postgres | DatabaseType::Redshift => PoolKind::Postgres(db::postgres::connect(&url).await?),
DatabaseType::Sqlite => PoolKind::Sqlite(db::sqlite::connect(&url).await?),
DatabaseType::Sqlite => PoolKind::Sqlite(db::sqlite::connect_path(&config.host).await?),
DatabaseType::Redis => {
let con = db::redis_driver::connect(&url).await?;
PoolKind::Redis(tokio::sync::Mutex::new(con))

View File

@ -1,4 +1,4 @@
use sqlx::sqlite::{SqlitePool, SqlitePoolOptions, SqliteRow};
use sqlx::sqlite::{SqliteConnectOptions, SqlitePool, SqlitePoolOptions, SqliteRow};
use sqlx::{Column, Executor, Row};
use std::time::{Duration, Instant};
@ -14,6 +14,20 @@ pub async fn connect(url: &str) -> Result<SqlitePool, String> {
.map_err(|e| format!("SQLite connection failed: {e}"))
}
pub async fn connect_path(path: &str) -> Result<SqlitePool, String> {
let options = SqliteConnectOptions::new()
.filename(path)
.create_if_missing(true);
SqlitePoolOptions::new()
.max_connections(5)
.acquire_timeout(Duration::from_secs(10))
.idle_timeout(Duration::from_secs(300))
.connect_with(options)
.await
.map_err(|e| format!("SQLite connection failed: {e}"))
}
pub async fn list_databases(_pool: &SqlitePool) -> Result<Vec<DatabaseInfo>, String> {
Ok(vec![DatabaseInfo { name: "main".to_string() }])
}