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

@@ -41,6 +41,9 @@ describe("connectionDriverType", () => {
);
expect(resolveConnectionDriverType("custom", "gauss_db")).toBe("gaussdb");
expect(resolveConnectionDriverType("custom", "goldendb")).toBe("goldendb");
expect(resolveConnectionDriverType("custom", "ClickHouse")).toBe(
"clickhouse",
);
expect(resolveConnectionDriverType("custom", "")).toBe("");
});

View File

@@ -34,4 +34,12 @@ describe('shouldAllowBlankCustomDsn', () => {
clearStoredSecret: true,
})).toBe(true);
});
it('accepts a JDBC-style ClickHouse DSN for the backend compatibility adapter', () => {
expect(shouldAllowBlankCustomDsn({
dsnInput: 'jdbc:clickhouse://localhost:8123/default',
hasStoredSecret: false,
clearStoredSecret: false,
})).toBe(true);
});
});

View File

@@ -31,6 +31,18 @@ describe('dataSourceCapabilities', () => {
});
});
it('uses ClickHouse capabilities for a custom ClickHouse JDBC connection', () => {
expect(getDataSourceCapabilities({ type: 'custom', driver: 'clickhouse' })).toMatchObject({
type: 'clickhouse',
supportsQueryEditor: true,
supportsExplainDiagnosis: true,
supportsSqlQueryExport: true,
supportsCreateDatabase: true,
supportsDropDatabase: true,
forceReadOnlyQueryResult: true,
});
});
it('only enables execution-plan diagnosis for backend-supported SQL dialects', () => {
expect(getDataSourceCapabilities({ type: 'goldendb' }).supportsExplainDiagnosis).toBe(true);
expect(getDataSourceCapabilities({ type: 'custom', driver: 'greatdb' }).supportsExplainDiagnosis).toBe(true);

View File

@@ -141,6 +141,8 @@ describe('driver import guidance', () => {
expect(helpText).toContain('pgx');
expect(helpText).toContain('open_gauss');
expect(helpText).toContain('oceanbase');
expect(helpText).toContain('clickhouse');
expect(helpText).toContain('jdbc:clickhouse://');
expect(helpText).toContain('Go database/sql');
expect(helpText).toContain('ODBC/JDBC');
expect(helpText).toContain('JDBC Jar');