From 44cb4acbb75cd3f7d3c240a213f74398c2916f8c Mon Sep 17 00:00:00 2001 From: zipg Date: Tue, 28 Jul 2026 11:28:02 +0800 Subject: [PATCH] feat(hbase): add HBase REST support --- .../connection/ConnectionDialog.vue | 11 +- .../src/components/hbase/HBaseBrowser.vue | 508 ++++++++++ .../src/components/layout/ContentArea.vue | 7 + .../sidebar/SidebarTreeRuntimeHost.vue | 70 +- .../composables/useSidebarDataOpenRuntime.ts | 6 + apps/desktop/src/i18n/locales/en.ts | 26 + apps/desktop/src/i18n/locales/es.ts | 26 + apps/desktop/src/i18n/locales/it.ts | 26 + apps/desktop/src/i18n/locales/ja.ts | 26 + apps/desktop/src/i18n/locales/pt-BR.ts | 26 + apps/desktop/src/i18n/locales/zh-CN.ts | 26 + apps/desktop/src/i18n/locales/zh-TW.ts | 26 + .../database/databaseFeatureSupport.spec.ts | 2 + .../databaseObjectCapabilities.spec.ts | 4 + .../lib/__tests__/hbase/hbaseValues.spec.ts | 31 + apps/desktop/src/lib/backend/api.ts | 9 + apps/desktop/src/lib/backend/http.ts | 32 + apps/desktop/src/lib/backend/tauri.ts | 29 + .../lib/database/databaseFeatureSupport.ts | 2 +- .../lib/database/databaseNamespaceCreation.ts | 1 + .../database/databaseObjectCapabilities.ts | 1 + .../lib/database/databasePropertyEditing.ts | 1 + apps/desktop/src/lib/hbase/hbaseValues.ts | 16 + .../src/lib/sidebar/sidebarActiveTabTarget.ts | 20 + .../lib/table/tableMetadataCapabilities.ts | 6 + apps/desktop/src/lib/tabs/tabPresentation.ts | 8 + apps/desktop/src/types/database.ts | 27 +- apps/desktop/src/types/hbase.ts | 44 + .../assets/database-drivers.manifest.json | 29 + crates/dbx-core/src/connection.rs | 43 + crates/dbx-core/src/database_capabilities.rs | 1 + crates/dbx-core/src/db/hbase_driver.rs | 902 ++++++++++++++++++ crates/dbx-core/src/db/mod.rs | 1 + crates/dbx-core/src/hbase_ops.rs | 82 ++ crates/dbx-core/src/lib.rs | 1 + crates/dbx-core/src/models/connection.rs | 17 + crates/dbx-core/src/query.rs | 3 +- crates/dbx-core/src/schema.rs | 7 + .../dbx-core/src/schema/providers/native.rs | 3 + crates/dbx-web/src/main.rs | 8 + crates/dbx-web/src/routes/hbase.rs | 181 ++++ crates/dbx-web/src/routes/mod.rs | 1 + .../app-tests/databaseCapabilities.test.ts | 3 +- .../app-tests/sidebarActiveTabTarget.test.ts | 34 +- packages/app-tests/tabPresentation.test.ts | 35 +- src-tauri/src/commands/hbase_cmd.rs | 98 ++ src-tauri/src/commands/mod.rs | 1 + src-tauri/src/lib.rs | 7 + 48 files changed, 2455 insertions(+), 19 deletions(-) create mode 100644 apps/desktop/src/components/hbase/HBaseBrowser.vue create mode 100644 apps/desktop/src/lib/__tests__/hbase/hbaseValues.spec.ts create mode 100644 apps/desktop/src/lib/hbase/hbaseValues.ts create mode 100644 apps/desktop/src/types/hbase.ts create mode 100644 crates/dbx-core/src/db/hbase_driver.rs create mode 100644 crates/dbx-core/src/hbase_ops.rs create mode 100644 crates/dbx-web/src/routes/hbase.rs create mode 100644 src-tauri/src/commands/hbase_cmd.rs diff --git a/apps/desktop/src/components/connection/ConnectionDialog.vue b/apps/desktop/src/components/connection/ConnectionDialog.vue index 58086da95..bb571bf3c 100644 --- a/apps/desktop/src/components/connection/ConnectionDialog.vue +++ b/apps/desktop/src/components/connection/ConnectionDialog.vue @@ -826,6 +826,7 @@ const driverProfiles: Record< label: "Elasticsearch", icon: "elasticsearch", }, + hbase: { type: "hbase", port: 8080, user: "", label: "Apache HBase", icon: "hbase" }, qdrant: { type: "qdrant", port: 6333, user: "", label: "Qdrant", icon: "qdrant" }, milvus: { type: "milvus", port: 19530, user: "root", label: "Milvus", icon: "milvus" }, weaviate: { type: "weaviate", port: 8080, user: "", label: "Weaviate", icon: "weaviate" }, @@ -2200,6 +2201,7 @@ const iconTypeMap: Record = { sqlserver: "sqlserver", oracle: "oracle", elasticsearch: "elasticsearch", + hbase: "hbase", qdrant: "qdrant", milvus: "milvus", weaviate: "weaviate", @@ -2279,6 +2281,7 @@ const dbOptions: DbOption[] = [ { value: "sqlite", label: "SQLite" }, { value: "sqlserver", label: "SQL Server" }, { value: "elasticsearch", label: "Elasticsearch" }, + { value: "hbase", label: "Apache HBase" }, { value: "qdrant", label: "Qdrant" }, { value: "milvus", label: "Milvus" }, { value: "weaviate", label: "Weaviate" }, @@ -2380,7 +2383,7 @@ const dbCategoryDefinitions: Array<{ { key: "document", titleKey: "connection.databaseCategoryDocument", - optionValues: ["mongodb", "redis", "elasticsearch", "manticoresearch", "cassandra"], + optionValues: ["mongodb", "redis", "elasticsearch", "hbase", "manticoresearch", "cassandra"], }, { key: "graph_ai", @@ -2495,10 +2498,10 @@ const sqliteExtensionPaths = computed({ form.value.url_params = setSqliteExtensionPaths(form.value.url_params, value); }, }); -const tlsCapableDatabaseTypes = new Set(["mysql", "starrocks", "postgres", "redshift", "gaussdb", "kwdb", "opengauss", "questdb", "dameng", "redis", "etcd", "clickhouse", "elasticsearch", "qdrant", "milvus", "weaviate", "chromadb", "influxdb"]); +const tlsCapableDatabaseTypes = new Set(["mysql", "starrocks", "postgres", "redshift", "gaussdb", "kwdb", "opengauss", "questdb", "dameng", "redis", "etcd", "clickhouse", "elasticsearch", "hbase", "qdrant", "milvus", "weaviate", "chromadb", "influxdb"]); const supportsTlsToggle = computed(() => tlsCapableDatabaseTypes.has(form.value.db_type)); const supportsCaCertificatePath = computed(() => form.value.db_type === "clickhouse"); -const supportsGenericUrlParams = computed(() => form.value.db_type !== "manticoresearch"); +const supportsGenericUrlParams = computed(() => form.value.db_type !== "manticoresearch" && form.value.db_type !== "hbase"); const bareMysqlProfiles = new Set(["doris", "selectdb", "oceanbase"]); const supportsMysqlTlsOptions = computed(() => form.value.db_type === "starrocks" || (form.value.db_type === "mysql" && !bareMysqlProfiles.has(selectedType.value))); const supportsMysqlCleartextPasswordAuth = computed(() => form.value.db_type === "mysql" && !bareMysqlProfiles.has(selectedType.value)); @@ -5902,7 +5905,7 @@ function openExternalUrl(url: string) { -
+
diff --git a/apps/desktop/src/components/hbase/HBaseBrowser.vue b/apps/desktop/src/components/hbase/HBaseBrowser.vue new file mode 100644 index 000000000..915a2c895 --- /dev/null +++ b/apps/desktop/src/components/hbase/HBaseBrowser.vue @@ -0,0 +1,508 @@ + + +