From 81bd188972f2e4713cbe82628ff41bb327457963 Mon Sep 17 00:00:00 2001 From: Agent-43 Date: Sun, 3 May 2026 23:28:45 +0530 Subject: [PATCH] Fix SQLite UNC path connections --- src-tauri/src/commands/connection.rs | 6 +++--- src-tauri/src/db/sqlite.rs | 16 +++++++++++++++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src-tauri/src/commands/connection.rs b/src-tauri/src/commands/connection.rs index 60669e65e..1316c58f7 100644 --- a/src-tauri/src/commands/connection.rs +++ b/src-tauri/src/commands/connection.rs @@ -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)) diff --git a/src-tauri/src/db/sqlite.rs b/src-tauri/src/db/sqlite.rs index 31d94cc1a..752d8ead4 100644 --- a/src-tauri/src/db/sqlite.rs +++ b/src-tauri/src/db/sqlite.rs @@ -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 { .map_err(|e| format!("SQLite connection failed: {e}")) } +pub async fn connect_path(path: &str) -> Result { + 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, String> { Ok(vec![DatabaseInfo { name: "main".to_string() }]) }