feat(clickhouse): 支持自定义连接兼容 JDBC DSN

- 解析 ClickHouse 与 JDBC 风格 DSN 并映射协议、TLS、认证及数据库参数
- 统一连接缓存、DDL、数据同步与导出 driver-agent 生命周期
- 保持 DSN 加密存储并补充前后端回归测试和多语言提示

Fixes #383
This commit is contained in:
Syngnat
2026-07-18 17:48:19 +08:00
parent 0136b87311
commit fd093b3325
19 changed files with 1280 additions and 47 deletions

View File

@@ -56,28 +56,26 @@ func (a *App) resolveDataSyncEndpointConfig(raw connection.ConnectionConfig, sel
return resolved, selectedDatabase, err
}
if !strings.EqualFold(strings.TrimSpace(raw.Type), "oracle") || strings.TrimSpace(raw.ID) == "" {
return resolved, strings.TrimSpace(selectedDatabase), nil
}
repo := newSavedConnectionRepository(a.configDir, a.secretStore)
view, findErr := repo.Find(raw.ID)
if findErr != nil {
return resolved, strings.TrimSpace(selectedDatabase), nil
}
savedServiceName := strings.TrimSpace(view.Config.Database)
if savedServiceName == "" {
return resolved, strings.TrimSpace(selectedDatabase), nil
}
selected := strings.TrimSpace(selectedDatabase)
incomingDatabase := strings.TrimSpace(raw.Database)
if selected == "" && incomingDatabase != "" && !strings.EqualFold(incomingDatabase, savedServiceName) {
selected = incomingDatabase
if strings.EqualFold(strings.TrimSpace(raw.Type), "oracle") && strings.TrimSpace(raw.ID) != "" {
repo := newSavedConnectionRepository(a.configDir, a.secretStore)
if view, findErr := repo.Find(raw.ID); findErr == nil {
savedServiceName := strings.TrimSpace(view.Config.Database)
if savedServiceName != "" {
incomingDatabase := strings.TrimSpace(raw.Database)
if selected == "" && incomingDatabase != "" && !strings.EqualFold(incomingDatabase, savedServiceName) {
selected = incomingDatabase
}
resolved.Database = savedServiceName
}
}
}
resolved.Database = savedServiceName
return resolved, selected, nil
effectiveConfig, err := a.resolveCustomClickHouseRuntimeConfig(resolved)
if err != nil {
return resolved, selected, err
}
return effectiveConfig, selected, nil
}
// DataSync executes a data synchronization task