diff --git a/apps/desktop/public/icons/database/databend.svg b/apps/desktop/public/icons/database/databend.svg
new file mode 100644
index 000000000..ab3b97498
--- /dev/null
+++ b/apps/desktop/public/icons/database/databend.svg
@@ -0,0 +1,16 @@
+
diff --git a/apps/desktop/src/components/connection/ConnectionDialog.vue b/apps/desktop/src/components/connection/ConnectionDialog.vue
index c0d76386e..e3a84dfd4 100644
--- a/apps/desktop/src/components/connection/ConnectionDialog.vue
+++ b/apps/desktop/src/components/connection/ConnectionDialog.vue
@@ -332,6 +332,7 @@ const driverProfiles: Record<
icon: "oceanbase",
},
goldendb: { type: "goldendb", port: 3306, user: "root", label: "GoldenDB", icon: "goldendb" },
+ databend: { type: "databend", port: 8000, user: "databend", label: "Databend", icon: "databend" },
tdsql: { type: "mysql", port: 3306, user: "root", label: "TDSQL", icon: "tdsql" },
polardb: { type: "mysql", port: 3306, user: "root", label: "PolarDB", icon: "polardb" },
greatsql: { type: "mysql", port: 3306, user: "root", label: "GreatSQL", icon: "greatsql" },
@@ -600,6 +601,7 @@ function defaultDatabaseForProfile() {
if (form.value.db_type === "redshift") return "dev";
if (form.value.db_type === "gaussdb") return "postgres";
if (form.value.db_type === "kwdb") return "defaultdb";
+ if (form.value.db_type === "databend") return "default";
if (selectedType.value === "cockroachdb") return "defaultdb";
if (form.value.db_type === "highgo") return "highgo";
if (form.value.db_type === "yashandb") return "yasdb";
@@ -636,6 +638,7 @@ const iconTypeMap: Record = {
oceanbase: "oceanbase",
"oceanbase-oracle": "oceanbase",
goldendb: "goldendb",
+ databend: "databend",
tdsql: "tdsql",
polardb: "polardb",
greatsql: "greatsql",
@@ -699,6 +702,7 @@ const dbOptions = [
{ value: "tidb", label: "TiDB" },
{ value: "oceanbase", label: "OceanBase" },
{ value: "goldendb", label: "GoldenDB" },
+ { value: "databend", label: "Databend" },
{ value: "tdsql", label: "TDSQL" },
{ value: "polardb", label: "PolarDB" },
{ value: "greatsql", label: "GreatSQL" },
diff --git a/apps/desktop/src/components/icons/DatabaseIcon.vue b/apps/desktop/src/components/icons/DatabaseIcon.vue
index fbc90aaf9..2a15e8d1a 100644
--- a/apps/desktop/src/components/icons/DatabaseIcon.vue
+++ b/apps/desktop/src/components/icons/DatabaseIcon.vue
@@ -33,6 +33,7 @@ const assetIcons: Record = {
kingbase: "kingbase",
highgo: "highgo.png",
goldendb: "goldendb.png",
+ databend: "databend",
vastbase: "vastbase.png",
yashandb: "yashandb.png",
snowflake: "snowflake",
diff --git a/apps/desktop/src/components/sidebar/TreeItem.vue b/apps/desktop/src/components/sidebar/TreeItem.vue
index 4903f148f..fd18588a2 100644
--- a/apps/desktop/src/components/sidebar/TreeItem.vue
+++ b/apps/desktop/src/components/sidebar/TreeItem.vue
@@ -117,6 +117,7 @@ import { buildRoutineRenameObjectSourceStatements, supportsSourceBackedRoutineRe
import { buildViewDdl } from "@/lib/viewDdl";
import { getTableStructureCapabilities } from "@/lib/tableStructureCapabilities";
import {
+ connectionObjectTreeNodeSchema,
connectionObjectTreeQuerySchema,
connectionUsesDatabaseObjectTreeMode,
effectiveDatabaseTypeForConnection,
@@ -753,7 +754,7 @@ async function openData() {
table: node.label,
dbType: config?.db_type,
});
- const tableSchema = connectionUsesDatabaseObjectTreeMode(config) ? undefined : node.schema;
+ const tableSchema = connectionObjectTreeNodeSchema(config, node.database, node.schema);
const tabId = (() => {
if (settingsStore.editorSettings.reuseDataTab) {
const existing = queryStore.tabs.find(
diff --git a/apps/desktop/src/lib/databaseCapabilitySets.ts b/apps/desktop/src/lib/databaseCapabilitySets.ts
index 27f7de8c6..c0c7dcac1 100644
--- a/apps/desktop/src/lib/databaseCapabilitySets.ts
+++ b/apps/desktop/src/lib/databaseCapabilitySets.ts
@@ -25,6 +25,7 @@ export const SCHEMA_AWARE_TYPES = new Set([
"snowflake",
"trino",
"hive",
+ "databend",
"db2",
"tdengine",
"xugu",
@@ -242,6 +243,7 @@ export const AGENT_DRIVER_TYPES = new Set([
"vastbase",
"yashandb",
"goldendb",
+ "databend",
"databricks",
"saphana",
"teradata",
diff --git a/apps/desktop/src/lib/jdbcDialect.ts b/apps/desktop/src/lib/jdbcDialect.ts
index 05469848c..4df3d4d3a 100644
--- a/apps/desktop/src/lib/jdbcDialect.ts
+++ b/apps/desktop/src/lib/jdbcDialect.ts
@@ -2,6 +2,7 @@ import type { ConnectionConfig, DatabaseType } from "@/types/database";
import { isSchemaAware, usesDatabaseObjectTreeMode } from "@/lib/databaseFeatureSupport";
const JDBC_DIALECT_MATCHERS: Array<{ type: DatabaseType; patterns: RegExp[] }> = [
+ { type: "databend", patterns: [/jdbc:databend:/i, /com\.databend\.jdbc\.DatabendDriver/i, /databend-jdbc/i] },
{ type: "starrocks", patterns: [/starrocks/i] },
{ type: "doris", patterns: [/doris/i] },
{ type: "hive", patterns: [/org\.apache\.hive\.jdbc\.HiveDriver/i, /hive-jdbc/i] },
@@ -45,6 +46,12 @@ export function connectionUsesDatabaseObjectTreeMode(
return true;
}
+export function connectionUsesSchemaExecutionContext(
+ connection?: Pick,
+): boolean {
+ return connection?.db_type === "jdbc" && inferJdbcDialect(connection) === "databend";
+}
+
export function connectionObjectTreeQuerySchema(
connection:
| Pick
@@ -52,6 +59,7 @@ export function connectionObjectTreeQuerySchema(
database: string,
schema?: string,
): string {
+ if (connection?.db_type === "jdbc" && inferJdbcDialect(connection) === "databend") return schema || database;
if (connectionUsesDatabaseObjectTreeMode(connection)) return "";
return schema || database;
}
@@ -63,6 +71,7 @@ export function connectionObjectTreeNodeSchema(
database: string,
schema?: string,
): string | undefined {
+ if (connection?.db_type === "jdbc" && inferJdbcDialect(connection) === "databend") return schema || database;
if (connectionUsesDatabaseObjectTreeMode(connection)) return undefined;
if (schema) return schema;
const type = connection?.db_type === "jdbc" ? effectiveDatabaseTypeForConnection(connection) : connection?.db_type;
diff --git a/apps/desktop/src/lib/tableSelectSql.ts b/apps/desktop/src/lib/tableSelectSql.ts
index bed3ae062..0e6500b38 100644
--- a/apps/desktop/src/lib/tableSelectSql.ts
+++ b/apps/desktop/src/lib/tableSelectSql.ts
@@ -19,7 +19,13 @@ export interface BuildTableSelectSqlOptions {
export function quoteTableIdentifier(databaseType: DatabaseType | undefined, name: string): string {
if (databaseType === "iotdb") return name;
if (databaseType === "jdbc") return quoteJdbcIdentifier(name);
- if (databaseType === "mysql" || databaseType === "hive" || databaseType === "tdengine" || databaseType === "access")
+ if (
+ databaseType === "mysql" ||
+ databaseType === "hive" ||
+ databaseType === "databend" ||
+ databaseType === "tdengine" ||
+ databaseType === "access"
+ )
return `\`${name.replace(/`/g, "``")}\``;
if (databaseType === "informix" && /^[A-Za-z_][A-Za-z0-9_$]*$/.test(name)) return name;
if (databaseType === "neo4j") return quoteCypherIdentifier(name);
diff --git a/apps/desktop/src/stores/queryStore.ts b/apps/desktop/src/stores/queryStore.ts
index 411433b4c..dd0349d36 100644
--- a/apps/desktop/src/stores/queryStore.ts
+++ b/apps/desktop/src/stores/queryStore.ts
@@ -30,7 +30,11 @@ import { editablePrimaryKeys } from "@/lib/tableEditing";
import { TABLE_DATA_EXPORT_PAGE_SIZE } from "@/lib/tableDataExport";
import { tableMetaForDataTab } from "@/lib/tableDataTabMeta";
import { quoteTableIdentifier } from "@/lib/tableSelectSql";
-import { connectionUsesDatabaseObjectTreeMode, effectiveDatabaseTypeForConnection } from "@/lib/jdbcDialect";
+import {
+ connectionUsesDatabaseObjectTreeMode,
+ connectionUsesSchemaExecutionContext,
+ effectiveDatabaseTypeForConnection,
+} from "@/lib/jdbcDialect";
import { queryTimeoutSecsForConnection } from "@/lib/queryTimeout";
import { clearDataGridPendingSnapshotsForTab } from "@/composables/useDataGridEditor";
import {
@@ -1161,8 +1165,11 @@ export const useQueryStore = defineStore("query", () => {
...(clientSessionId ? { clientSessionId } : {}),
timeoutSecs: queryTimeoutSecs,
};
- const executionSchema =
- tab.mode === "data" || connectionUsesDatabaseObjectTreeMode(conn) ? undefined : tab.schema;
+ const executionSchema = connectionUsesSchemaExecutionContext(conn)
+ ? tab.schema || tab.database
+ : tab.mode === "data" || connectionUsesDatabaseObjectTreeMode(conn)
+ ? undefined
+ : tab.schema;
const executionPromise = api.executeMulti(
tab.connectionId,
tab.database,
diff --git a/apps/desktop/src/types/database.ts b/apps/desktop/src/types/database.ts
index 962138f0c..4ce933cee 100644
--- a/apps/desktop/src/types/database.ts
+++ b/apps/desktop/src/types/database.ts
@@ -12,6 +12,7 @@ export type DatabaseType =
| "elasticsearch"
| "doris"
| "starrocks"
+ | "databend"
| "redshift"
| "dameng"
| "gaussdb"
diff --git a/crates/dbx-core/assets/database-drivers.manifest.json b/crates/dbx-core/assets/database-drivers.manifest.json
index ca14731c8..3724014c6 100644
--- a/crates/dbx-core/assets/database-drivers.manifest.json
+++ b/crates/dbx-core/assets/database-drivers.manifest.json
@@ -200,6 +200,17 @@
"skipTcpProbe": true,
"defaultPort": 3306
},
+ {
+ "dbType": "databend",
+ "label": "Databend",
+ "runtimeMode": "agent",
+ "mcpMode": "bridge",
+ "agentKey": "databend",
+ "singleConnectionPool": false,
+ "metadataConnectionScoped": false,
+ "skipTcpProbe": true,
+ "defaultPort": 8000
+ },
{
"dbType": "gaussdb",
"label": "GaussDB",
diff --git a/crates/dbx-core/src/agent_catalog.rs b/crates/dbx-core/src/agent_catalog.rs
index 8cc6b6b8a..5764ac189 100644
--- a/crates/dbx-core/src/agent_catalog.rs
+++ b/crates/dbx-core/src/agent_catalog.rs
@@ -61,6 +61,13 @@ const AGENT_CATALOG: &[AgentCatalogEntry] = &[
store_visible: true,
profiles: &[],
},
+ AgentCatalogEntry {
+ db_type: DatabaseType::Databend,
+ key: "databend",
+ label: "Databend",
+ store_visible: true,
+ profiles: &[],
+ },
AgentCatalogEntry {
db_type: DatabaseType::Databricks,
key: "databricks",
diff --git a/crates/dbx-core/src/connection.rs b/crates/dbx-core/src/connection.rs
index cf07a4de9..b34d7e06c 100644
--- a/crates/dbx-core/src/connection.rs
+++ b/crates/dbx-core/src/connection.rs
@@ -321,7 +321,7 @@ impl AppState {
connect_mysql_metadata_pool(&config, &db_config, &host, port, connect_timeout).await?;
PoolKind::Mysql(pool, mode)
}
- DatabaseType::Doris | DatabaseType::StarRocks => {
+ DatabaseType::Doris | DatabaseType::StarRocks | DatabaseType::Databend => {
let pool = if database.is_none() {
connect_bare_metadata_pool(&db_config, &host, port, connect_timeout).await?
} else {
diff --git a/crates/dbx-core/src/models/connection.rs b/crates/dbx-core/src/models/connection.rs
index 20588c360..6e6972534 100644
--- a/crates/dbx-core/src/models/connection.rs
+++ b/crates/dbx-core/src/models/connection.rs
@@ -214,6 +214,7 @@ pub enum DatabaseType {
Doris,
#[serde(rename = "starrocks")]
StarRocks,
+ Databend,
Redshift,
Dameng,
Kingbase,
@@ -606,7 +607,7 @@ impl ConnectionConfig {
let fragment = self.redis_tls_insecure_fragment();
format!("{scheme}://{host}:{port}/{fragment}")
}
- DatabaseType::Mysql | DatabaseType::Doris | DatabaseType::StarRocks => {
+ DatabaseType::Mysql | DatabaseType::Doris | DatabaseType::StarRocks | DatabaseType::Databend => {
let suffix = if params.is_empty() { String::new() } else { format!("?{params}") };
format!("mysql://{host}:{port}{db_part}{suffix}")
}
@@ -719,7 +720,7 @@ impl ConnectionConfig {
format!("{scheme}://{username}:{password}@{host}:{port}/{fragment}")
}
}
- DatabaseType::Mysql | DatabaseType::Doris | DatabaseType::StarRocks => {
+ DatabaseType::Mysql | DatabaseType::Doris | DatabaseType::StarRocks | DatabaseType::Databend => {
let suffix = if params.is_empty() { String::new() } else { format!("?{params}") };
format!("mysql://{}:{}@{host}:{port}{db_part}{suffix}", username, password)
}
@@ -886,7 +887,9 @@ impl ConnectionConfig {
}
match self.db_type {
DatabaseType::Mysql => normalize_mysql_url_params(value, self.ssl, self.ca_cert_path.trim().is_empty()),
- DatabaseType::Doris | DatabaseType::StarRocks => normalize_bare_mysql_url_params(value),
+ DatabaseType::Doris | DatabaseType::StarRocks | DatabaseType::Databend => {
+ normalize_bare_mysql_url_params(value)
+ }
DatabaseType::Postgres | DatabaseType::Redshift => normalize_postgres_url_params(value, self.ssl),
DatabaseType::MongoDb => value.trim_start_matches('?').to_string(),
_ => value.trim_start_matches('?').to_string(),
diff --git a/crates/dbx-core/src/sql_dialect.rs b/crates/dbx-core/src/sql_dialect.rs
index 747a0582a..ca78360d5 100644
--- a/crates/dbx-core/src/sql_dialect.rs
+++ b/crates/dbx-core/src/sql_dialect.rs
@@ -213,6 +213,7 @@ pub fn quote_table_identifier(database_type: Option, name: &str) -
Some(
DatabaseType::Mysql
| DatabaseType::Hive
+ | DatabaseType::Databend
| DatabaseType::Tdengine
| DatabaseType::Access
| DatabaseType::Bigquery,
@@ -418,6 +419,7 @@ pub fn is_schema_aware(database_type: DatabaseType) -> bool {
| DatabaseType::OpenGauss
| DatabaseType::OceanbaseOracle
| DatabaseType::Gbase
+ | DatabaseType::Databend
| DatabaseType::Jdbc
| DatabaseType::H2
| DatabaseType::Snowflake
@@ -472,6 +474,7 @@ mod tests {
assert_eq!(qualified_table_name(Some(DatabaseType::Postgres), Some("public"), "users"), "\"public\".\"users\"");
assert_eq!(qualified_table_name(Some(DatabaseType::Kwdb), Some("public"), "users"), "\"public\".\"users\"");
assert_eq!(qualified_table_name(Some(DatabaseType::Mysql), Some("public"), "users"), "`users`");
+ assert_eq!(qualified_table_name(Some(DatabaseType::Databend), Some("dbx_test"), "users"), "`dbx_test`.`users`");
assert_eq!(qualified_table_name(Some(DatabaseType::Jdbc), Some("cbsdw_dwd"), "dwd_test_df"), "dwd_test_df");
assert_eq!(qualified_table_name(Some(DatabaseType::Iotdb), Some("root.test"), "device2"), "root.test.device2");
assert_eq!(
@@ -529,6 +532,17 @@ mod tests {
}),
"SELECT * FROM dwd_test_df LIMIT 100;"
);
+ assert_eq!(
+ build_table_select_sql(TableSelectSqlOptions {
+ database_type: Some(DatabaseType::Databend),
+ schema: Some("dbx_test"),
+ table_name: "jdbc_probe",
+ columns: &[],
+ order_columns: &[],
+ limit: 500,
+ }),
+ "SELECT * FROM `dbx_test`.`jdbc_probe` LIMIT 500;"
+ );
assert_eq!(
build_table_select_sql(TableSelectSqlOptions {
database_type: Some(DatabaseType::Hive),
diff --git a/crates/dbx-core/tests/database_capabilities.rs b/crates/dbx-core/tests/database_capabilities.rs
index 2d63f6509..ecec3b9e4 100644
--- a/crates/dbx-core/tests/database_capabilities.rs
+++ b/crates/dbx-core/tests/database_capabilities.rs
@@ -62,6 +62,7 @@ fn maps_agent_database_types_to_driver_keys() {
assert_eq!(agent_key(&DatabaseType::Gbase, None), Some("gbase"));
assert_eq!(agent_key(&DatabaseType::Access, None), Some("access"));
assert_eq!(agent_key(&DatabaseType::Oracle, None), Some("oracle"));
+ assert_eq!(agent_key(&DatabaseType::Databend, None), Some("databend"));
assert_eq!(agent_key(&DatabaseType::Oracle, Some("oracle-legacy")), Some("oracle-legacy"));
assert_eq!(agent_key(&DatabaseType::Oracle, Some("oracle-10g")), Some("oracle-10g"));
assert_eq!(agent_key(&DatabaseType::Postgres, None), None);
@@ -84,6 +85,7 @@ fn classifies_agent_database_types() {
assert!(is_agent_type(&DatabaseType::OceanbaseOracle));
assert!(is_agent_type(&DatabaseType::Gbase));
assert!(is_agent_type(&DatabaseType::Access));
+ assert!(is_agent_type(&DatabaseType::Databend));
assert!(!is_agent_type(&DatabaseType::Mysql));
assert!(!is_agent_type(&DatabaseType::Jdbc));
assert!(!is_agent_type(&DatabaseType::Gaussdb));
@@ -132,6 +134,7 @@ fn skips_tcp_probe_for_local_file_plugin_and_agent_types() {
assert!(skips_tcp_probe(&DatabaseType::Databricks));
assert!(skips_tcp_probe(&DatabaseType::OceanbaseOracle));
assert!(skips_tcp_probe(&DatabaseType::Gbase));
+ assert!(skips_tcp_probe(&DatabaseType::Databend));
assert!(!skips_tcp_probe(&DatabaseType::Postgres));
assert!(!skips_tcp_probe(&DatabaseType::Mysql));
assert!(!skips_tcp_probe(&DatabaseType::Gaussdb));
diff --git a/packages/app-tests/jdbcDialect.test.ts b/packages/app-tests/jdbcDialect.test.ts
index 30ac25ba8..b4c3e7d5e 100644
--- a/packages/app-tests/jdbcDialect.test.ts
+++ b/packages/app-tests/jdbcDialect.test.ts
@@ -1,7 +1,9 @@
import assert from "node:assert/strict";
import test from "node:test";
import {
+ connectionObjectTreeNodeSchema,
connectionObjectTreeQuerySchema,
+ connectionUsesSchemaExecutionContext,
connectionUsesDatabaseObjectTreeMode,
effectiveDatabaseTypeForConnection,
inferJdbcDialect,
@@ -19,9 +21,10 @@ test("infers JDBC dialect from URL, driver class, and driver jar path", () => {
"mysql",
);
assert.equal(inferJdbcDialect({ db_type: "jdbc", jdbc_driver_class: "org.apache.hive.jdbc.HiveDriver" }), "hive");
+ assert.equal(inferJdbcDialect({ db_type: "jdbc", jdbc_driver_paths: ["/drivers/starrocks-jdbc.jar"] }), "starrocks");
assert.equal(
- inferJdbcDialect({ db_type: "jdbc", jdbc_driver_paths: ["/drivers/starrocks-jdbc.jar"] }),
- "starrocks",
+ inferJdbcDialect({ db_type: "jdbc", connection_string: "jdbc:databend://db.example.com:8000/default" }),
+ "databend",
);
});
@@ -29,12 +32,18 @@ test("effective database type keeps non-JDBC types and enables compatible JDBC s
assert.equal(effectiveDatabaseTypeForConnection({ db_type: "postgres" }), "postgres");
assert.equal(effectiveDatabaseTypeForConnection({ db_type: "jdbc" }), "jdbc");
assert.equal(
- effectiveDatabaseTypeForConnection({ db_type: "jdbc", jdbc_driver_class: "org.apache.kyuubi.jdbc.KyuubiHiveDriver" }),
+ effectiveDatabaseTypeForConnection({
+ db_type: "jdbc",
+ jdbc_driver_class: "org.apache.kyuubi.jdbc.KyuubiHiveDriver",
+ }),
"mysql",
);
assert.equal(
supportsTableStructureEditing(
- effectiveDatabaseTypeForConnection({ db_type: "jdbc", jdbc_driver_class: "org.apache.kyuubi.jdbc.KyuubiHiveDriver" }),
+ effectiveDatabaseTypeForConnection({
+ db_type: "jdbc",
+ jdbc_driver_class: "org.apache.kyuubi.jdbc.KyuubiHiveDriver",
+ }),
),
true,
);
@@ -58,3 +67,21 @@ test("JDBC tree shape follows the inferred driver dialect", () => {
"`test`.`dws_event_analyse`",
);
});
+
+test("Databend JDBC keeps database as schema context for table data", () => {
+ const databend = { db_type: "jdbc" as const, connection_string: "jdbc:databend://db.example.com:8000/dbx_test" };
+
+ assert.equal(effectiveDatabaseTypeForConnection(databend), "databend");
+ assert.equal(connectionUsesDatabaseObjectTreeMode(databend), true);
+ assert.equal(connectionUsesSchemaExecutionContext(databend), true);
+ assert.equal(connectionObjectTreeQuerySchema(databend, "dbx_test", undefined), "dbx_test");
+ assert.equal(connectionObjectTreeNodeSchema(databend, "dbx_test", undefined), "dbx_test");
+ assert.equal(
+ qualifiedTableName({
+ databaseType: effectiveDatabaseTypeForConnection(databend),
+ schema: connectionObjectTreeNodeSchema(databend, "dbx_test", undefined),
+ tableName: "jdbc_probe",
+ }),
+ "`dbx_test`.`jdbc_probe`",
+ );
+});
diff --git a/packages/mcp-server/src/index.ts b/packages/mcp-server/src/index.ts
index 91d17ec2d..51559b19d 100644
--- a/packages/mcp-server/src/index.ts
+++ b/packages/mcp-server/src/index.ts
@@ -46,7 +46,7 @@ function formatQueryToolResult(result: QueryResult, title?: string) {
}
export const DBX_CONNECTION_TYPE_DESCRIPTION =
- "Database type: postgres, mysql, sqlite, rqlite, redis, duckdb, clickhouse, sqlserver, mongodb, oracle, elasticsearch, doris, starrocks, redshift, dameng, kingbase, highgo, vastbase, goldendb, gaussdb, kwdb, yashandb, databricks, saphana, teradata, vertica, firebird, exasol, opengauss, oceanbase-oracle, gbase, h2, snowflake, trino, hive, db2, informix, iris, neo4j, cassandra, bigquery, kylin, sundb, tdengine, iotdb, xugu, jdbc, access";
+ "Database type: postgres, mysql, sqlite, rqlite, redis, duckdb, clickhouse, sqlserver, mongodb, oracle, elasticsearch, doris, starrocks, redshift, dameng, kingbase, highgo, vastbase, goldendb, databend, gaussdb, kwdb, yashandb, databricks, saphana, teradata, vertica, firebird, exasol, opengauss, oceanbase-oracle, gbase, h2, snowflake, trino, hive, db2, informix, iris, neo4j, cassandra, bigquery, kylin, sundb, tdengine, iotdb, xugu, jdbc, access";
export function createDbxMcpServer(backend: Backend, options: { isWebMode?: boolean } = {}): McpServer {
const isWebMode = options.isWebMode ?? !!process.env.DBX_WEB_URL;
diff --git a/packages/node-core/src/diagnostics.ts b/packages/node-core/src/diagnostics.ts
index dfbbe33af..6bd4707a1 100644
--- a/packages/node-core/src/diagnostics.ts
+++ b/packages/node-core/src/diagnostics.ts
@@ -36,6 +36,7 @@ export const BRIDGE_REQUIRED_TYPES = [
"highgo",
"vastbase",
"goldendb",
+ "databend",
"yashandb",
"databricks",
"saphana",