perf(tauri): split schema command registry into crate

This commit is contained in:
luo jiyin
2026-09-29 01:20:17 +08:00
committed by GitHub
parent 0be8a38984
commit 1aebef392d
9 changed files with 123 additions and 53 deletions
Generated
+9
View File
@@ -2114,6 +2114,7 @@ dependencies = [
"dbx-core",
"dbx-mcp",
"dbx-tauri-consul",
"dbx-tauri-schema",
"deadpool-postgres",
"font-kit",
"futures",
@@ -2680,6 +2681,14 @@ dependencies = [
"tauri",
]
[[package]]
name = "dbx-tauri-schema"
version = "0.1.0"
dependencies = [
"dbx-core",
"tauri",
]
[[package]]
name = "dbx-types"
version = "0.1.0"
+1 -1
View File
@@ -1,6 +1,6 @@
[workspace]
resolver = "2"
members = ["src-tauri", "crates/dbx-core", "crates/dbx-driver-agent", "crates/dbx-driver-support", "crates/dbx-driver-elasticsearch", "crates/dbx-driver-mongodb", "crates/dbx-driver-mysql", "crates/dbx-driver-postgres", "crates/dbx-driver-redis", "crates/dbx-driver-sqlserver", "crates/dbx-drivers", "crates/dbx-sql", "crates/dbx-sql-core", "crates/dbx-sql-data", "crates/dbx-sql-dialect", "crates/dbx-sql-schema", "crates/dbx-plugin-runtime", "crates/dbx-formats", "crates/dbx-types", "crates/dbx-platform", "crates/dbx-ai-provider", "crates/dbx-web", "crates/dbx-mcp", "crates/dbx-cli", "crates/dbx-sqlite-worker", "crates/dbx-tauri-consul"]
members = ["src-tauri", "crates/dbx-core", "crates/dbx-driver-agent", "crates/dbx-driver-support", "crates/dbx-driver-elasticsearch", "crates/dbx-driver-mongodb", "crates/dbx-driver-mysql", "crates/dbx-driver-postgres", "crates/dbx-driver-redis", "crates/dbx-driver-sqlserver", "crates/dbx-drivers", "crates/dbx-sql", "crates/dbx-sql-core", "crates/dbx-sql-data", "crates/dbx-sql-dialect", "crates/dbx-sql-schema", "crates/dbx-plugin-runtime", "crates/dbx-formats", "crates/dbx-types", "crates/dbx-platform", "crates/dbx-ai-provider", "crates/dbx-web", "crates/dbx-mcp", "crates/dbx-cli", "crates/dbx-sqlite-worker", "crates/dbx-tauri-consul", "crates/dbx-tauri-schema"]
exclude = ["vendor/tauri-plugin-updater", "vendor/ctor", "vendor/dirs-sys", "vendor/pageant", "vendor/rumqttc", "vendor/tiberius", "vendor/webview2-com-sys", "vendor/wry"]
[patch.crates-io]
+9
View File
@@ -0,0 +1,9 @@
[package]
name = "dbx-tauri-schema"
version = "0.1.0"
edition = "2021"
rust-version = "1.88.0"
[dependencies]
dbx-core = { path = "../dbx-core", default-features = false }
tauri = "2.10.3"
@@ -1,7 +1,7 @@
use std::sync::Arc;
use tauri::State;
use crate::commands::connection::AppState;
use dbx_core::connection::AppState;
use dbx_core::db;
/// Resolve a non-internal catalog for dispatch to the Doris multi-catalog path.
+93
View File
@@ -0,0 +1,93 @@
mod commands;
macro_rules! define_registry {
($($command:ident),+ $(,)?) => {
const COMMANDS: &[&str] = &[$(stringify!($command)),+];
pub fn invoke_handler() -> impl Fn(tauri::ipc::Invoke<tauri::Wry>) -> bool + Send + Sync + 'static {
tauri::generate_handler![$(commands::$command),+]
}
};
}
define_registry![
list_databases,
list_database_metadata,
list_database_storage,
list_xugu_tablespaces,
get_sqlserver_completion_context,
list_doris_catalogs,
list_doris_catalog_databases,
list_sqlserver_linked_servers,
list_sqlserver_linked_server_catalogs,
list_sqlserver_linked_server_schemas,
list_sqlserver_linked_server_tables,
list_tables,
get_table_comment,
get_mysql_table_auto_increment,
list_objects,
list_object_statistics,
list_completion_objects,
completion_assistant_search,
get_object_source,
get_event_info,
get_custom_type_details,
list_schemas,
list_schema_infos,
list_data_types,
get_columns,
get_plugin_table_metadata,
get_all_columns,
get_sqlserver_column_metadata,
list_indexes,
list_reference_key_columns,
list_reference_keys,
list_foreign_keys,
list_triggers,
list_constraints,
list_partitions,
get_table_partition_status,
get_table_partitioning,
list_invalid_indexes,
list_subpartitions,
get_table_ddl,
list_functions,
list_sequences,
list_rules,
list_owners,
get_table_owner,
list_extensions,
list_available_extensions,
list_event_triggers,
];
pub fn handles(command: &str) -> bool {
COMMANDS.contains(&command)
}
pub fn route(
main_handler: impl Fn(tauri::ipc::Invoke<tauri::Wry>) -> bool + Send + Sync + 'static,
) -> impl Fn(tauri::ipc::Invoke<tauri::Wry>) -> bool + Send + Sync + 'static {
let schema_handler = invoke_handler();
move |invoke| {
if handles(invoke.message.command()) {
schema_handler(invoke)
} else {
main_handler(invoke)
}
}
}
#[cfg(test)]
mod tests {
use super::{handles, COMMANDS};
#[test]
fn handles_only_schema_commands() {
assert_eq!(COMMANDS.len(), 48);
assert!(handles("list_databases"));
assert!(handles("list_event_triggers"));
assert!(!handles("prepare_schema_diff"));
assert!(!handles("load_connections"));
}
}
+2 -1
View File
@@ -59,6 +59,7 @@ COPY crates/dbx-web/Cargo.toml crates/dbx-web/
COPY crates/dbx-mcp/Cargo.toml crates/dbx-mcp/
COPY crates/dbx-cli/Cargo.toml crates/dbx-cli/
COPY crates/dbx-tauri-consul/Cargo.toml crates/dbx-tauri-consul/
COPY crates/dbx-tauri-schema/Cargo.toml crates/dbx-tauri-schema/
COPY src-tauri/Cargo.toml src-tauri/
# Copy every vendored crate: root Cargo.toml [patch.crates-io] points at
# vendor/{ctor,rumqttc,dirs-sys,pageant,wry}; omitting any breaks the offline build.
@@ -66,7 +67,7 @@ COPY vendor/ vendor/
RUN for crate in dbx-platform dbx-types dbx-sql dbx-sql-core dbx-sql-data dbx-sql-dialect dbx-sql-schema \
dbx-formats dbx-ai-provider dbx-plugin-runtime dbx-driver-agent dbx-driver-support \
dbx-driver-elasticsearch dbx-driver-mongodb dbx-driver-mysql dbx-driver-postgres \
dbx-driver-redis dbx-driver-sqlserver dbx-drivers dbx-sqlite-worker dbx-tauri-consul; do \
dbx-driver-redis dbx-driver-sqlserver dbx-drivers dbx-sqlite-worker dbx-tauri-consul dbx-tauri-schema; do \
mkdir -p "crates/$crate/src" && printf "" > "crates/$crate/src/lib.rs"; \
done \
&& echo 'fn main() {}' > crates/dbx-sqlite-worker/src/main.rs
+1
View File
@@ -73,6 +73,7 @@ zip = "4.6.1"
dbx-core = { path = "../crates/dbx-core", default-features = false }
dbx-mcp = { path = "../crates/dbx-mcp", default-features = false, features = ["duckdb-sidecar", "mq-admin"] }
dbx-tauri-consul = { path = "../crates/dbx-tauri-consul" }
dbx-tauri-schema = { path = "../crates/dbx-tauri-schema" }
wry = { path = "../vendor/wry" }
axum = { version = "0.8", features = ["ws"] }
font-kit = "0.14.3"
-1
View File
@@ -51,7 +51,6 @@ pub mod redis_cmd;
pub mod redis_pubsub_server;
pub mod salesforce_oauth;
pub mod saved_sql;
pub mod schema;
pub mod schema_cache;
pub mod schema_diff;
pub mod sql_file;
+7 -49
View File
@@ -1454,6 +1454,12 @@ mod tests {
}
}
fn route_external_commands(
main_handler: impl Fn(tauri::ipc::Invoke<tauri::Wry>) -> bool + Send + Sync + 'static,
) -> impl Fn(tauri::ipc::Invoke<tauri::Wry>) -> bool + Send + Sync + 'static {
dbx_tauri_consul::route(dbx_tauri_schema::route(main_handler))
}
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
// Metadata/completion command chains nest very large async futures and can
@@ -1804,7 +1810,7 @@ pub fn run() {
request_app_close(app, "settings");
}
})
.invoke_handler(migration_gate::guard_handler(dbx_tauri_consul::route(tauri::generate_handler![
.invoke_handler(migration_gate::guard_handler(route_external_commands(tauri::generate_handler![
commands::ai::ai_complete,
commands::ai::ai_stream,
commands::ai::ai_agent_stream,
@@ -2000,54 +2006,6 @@ pub fn run() {
commands::plugins::install_jdbc_plugin,
commands::plugins::install_jdbc_plugin_local,
commands::plugins::uninstall_jdbc_plugin,
commands::schema::list_databases,
commands::schema::list_database_metadata,
commands::schema::list_database_storage,
commands::schema::list_xugu_tablespaces,
commands::schema::get_sqlserver_completion_context,
commands::schema::list_doris_catalogs,
commands::schema::list_doris_catalog_databases,
commands::schema::list_sqlserver_linked_servers,
commands::schema::list_sqlserver_linked_server_catalogs,
commands::schema::list_sqlserver_linked_server_schemas,
commands::schema::list_sqlserver_linked_server_tables,
commands::schema::list_tables,
commands::schema::get_table_comment,
commands::schema::get_mysql_table_auto_increment,
commands::schema::list_objects,
commands::schema::list_object_statistics,
commands::schema::list_completion_objects,
commands::schema::completion_assistant_search,
commands::schema::get_object_source,
commands::schema::get_event_info,
commands::schema::get_custom_type_details,
commands::schema::list_schemas,
commands::schema::list_schema_infos,
commands::schema::list_data_types,
commands::schema::get_columns,
commands::schema::get_plugin_table_metadata,
commands::schema::get_all_columns,
commands::schema::get_sqlserver_column_metadata,
commands::schema::list_indexes,
commands::schema::list_reference_key_columns,
commands::schema::list_reference_keys,
commands::schema::list_foreign_keys,
commands::schema::list_triggers,
commands::schema::list_constraints,
commands::schema::list_partitions,
commands::schema::get_table_partition_status,
commands::schema::get_table_partitioning,
commands::schema::list_invalid_indexes,
commands::schema::list_subpartitions,
commands::schema::get_table_ddl,
commands::schema::list_functions,
commands::schema::list_sequences,
commands::schema::list_rules,
commands::schema::list_owners,
commands::schema::get_table_owner,
commands::schema::list_extensions,
commands::schema::list_available_extensions,
commands::schema::list_event_triggers,
commands::schema_diff::prepare_schema_diff,
commands::schema_diff::generate_schema_sync_sql,
commands::schema_diff::generate_schema_sync_plan,