feat: add Microsoft Access database support

Add Access as a new database type with agent-based connectivity,
UCanAccess JDBC URL parsing, backtick identifier quoting, file-path
connection dialog, and PNG icons for Access/GoldenDB/Vastbase.
This commit is contained in:
t8y2 committed 2026-05-17 09:57:04 +08:00
1 parent 381c92ff53
commit 1bcfd02de1
26 files changed
+185 -22

No files matched your search

+2
View File
@@ -239,6 +239,7 @@ impl AppState {
| DatabaseType::Kylin
| DatabaseType::Sundb
| DatabaseType::Tdengine
| DatabaseType::Access
| DatabaseType::Gaussdb => {
let mut client =
self.agent_manager.spawn(&db_config.db_type, db_config.driver_profile.as_deref()).await?;
@@ -437,6 +438,7 @@ pub fn agent_connect_params(config: &ConnectionConfig, host: &str, port: u16, da
"username": config.username,
"password": config.password,
"url_params": config.url_params.as_deref().unwrap_or(""),
"connection_string": config.connection_string.as_deref().unwrap_or(""),
})
}
@@ -25,6 +25,7 @@ pub fn agent_key(db_type: &DatabaseType, driver_profile: Option<&str>) -> Option
DatabaseType::Gaussdb => Some("gaussdb"),
DatabaseType::MongoDb => Some("mongodb"),
DatabaseType::Tdengine => Some("tdengine"),
DatabaseType::Access => Some("access"),
_ => None,
}
}
@@ -44,6 +45,7 @@ pub fn is_single_connection_pool(db_type: &DatabaseType) -> bool {
| DatabaseType::Highgo
| DatabaseType::Vastbase
| DatabaseType::Goldendb
| DatabaseType::Access
| DatabaseType::Jdbc
)
}
+3
View File
@@ -120,6 +120,7 @@ pub enum DatabaseType {
Vastbase,
Goldendb,
Gaussdb,
Access,
#[serde(rename = "h2")]
H2,
Snowflake,
@@ -213,6 +214,7 @@ impl ConnectionConfig {
DatabaseType::Sqlite | DatabaseType::DuckDb => {
format!("{}?mode=rwc", self.host)
}
DatabaseType::Access => self.host.clone(),
DatabaseType::Redis => {
let scheme = if self.ssl { "rediss" } else { "redis" };
format!("{scheme}://{host}:{port}/")
@@ -284,6 +286,7 @@ impl ConnectionConfig {
DatabaseType::Sqlite | DatabaseType::DuckDb => {
format!("{}?mode=rwc", self.host)
}
DatabaseType::Access => self.host.clone(),
DatabaseType::Redis => {
let scheme = if self.ssl { "rediss" } else { "redis" };
if self.username.is_empty() && self.password.is_empty() {