diff --git a/crates/dbx-core/src/query.rs b/crates/dbx-core/src/query.rs index 7d5ec1f338..e1931767e5 100644 --- a/crates/dbx-core/src/query.rs +++ b/crates/dbx-core/src/query.rs @@ -467,6 +467,23 @@ async fn exec_tx_mysql_inner( pool: sqlx::mysql::MySqlPool, statements: &[String], start: std::time::Instant, +) -> Result { + let statements = statements.to_vec(); + tokio::task::spawn_blocking(move || { + tokio::runtime::Builder::new_current_thread() + .enable_all() + .build() + .map_err(|e| format!("Failed to start MySQL transaction runtime: {}", e))? + .block_on(exec_tx_mysql_raw_inner(pool, statements, start)) + }) + .await + .map_err(|e| format!("MySQL transaction task failed: {}", e))? +} + +async fn exec_tx_mysql_raw_inner( + pool: sqlx::mysql::MySqlPool, + statements: Vec, + start: std::time::Instant, ) -> Result { let mut conn = pool.acquire().await.map_err(|e| format!("Failed to acquire connection: {}", e))?; sqlx::raw_sql("START TRANSACTION") diff --git a/src/components/grid/DataGrid.vue b/src/components/grid/DataGrid.vue index b720428854..a33efddbc3 100644 --- a/src/components/grid/DataGrid.vue +++ b/src/components/grid/DataGrid.vue @@ -34,6 +34,7 @@ import { Pencil, Filter, FileDown, + SquareDashed, } from "lucide-vue-next"; import { Button } from "@/components/ui/button"; import { @@ -2315,7 +2316,7 @@ defineExpose({ - + {{ t("grid.copy") }} - + {{ t("grid.copyCell") }} {{ t("grid.copyRow") }} {{ t("grid.copyRowInsert") }} @@ -2356,8 +2357,10 @@ defineExpose({ {{ t("grid.transpose") }} - {{ t("grid.selection") }} - + + {{ t("grid.selection") }} + + {{ t("grid.copySelectionTsv") }} {{ t("grid.copySelectionCsv") }} {{ t("grid.copySelectionJson") }} @@ -2378,7 +2381,7 @@ defineExpose({ {{ t("grid.export") }} - + {{ t("grid.exportCsv") }} {{ t("grid.exportJson") }} {{ t("grid.exportMarkdown") }}