From 5c4c87a042fe16640cb7488fa996e93dadb2881a Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Tue, 23 Jun 2026 17:07:30 +0800 Subject: [PATCH] feat(grid): align query result editing --- apps/desktop/src/components/grid/DataGrid.vue | 14 ++++++++- .../src/components/sidebar/TreeItem.vue | 5 ++-- .../src/composables/useDataGridActions.ts | 10 +++---- .../src/composables/useNavigationTargets.ts | 10 ++++--- .../src/lib/__tests__/tableEditing.spec.ts | 27 +++++++++++++++-- apps/desktop/src/lib/tableEditing.ts | 13 +++++++- apps/desktop/src/stores/queryStore.ts | 9 +++--- crates/dbx-core/src/data_grid_sql.rs | 30 +++++++++++++++++++ 8 files changed, 98 insertions(+), 20 deletions(-) diff --git a/apps/desktop/src/components/grid/DataGrid.vue b/apps/desktop/src/components/grid/DataGrid.vue index 80a1e2912..ef2114364 100644 --- a/apps/desktop/src/components/grid/DataGrid.vue +++ b/apps/desktop/src/components/grid/DataGrid.vue @@ -87,7 +87,7 @@ import type { BuildSingleColumnAlterSqlOptions } from "@/lib/tableStructureEdito import { buildTableSelectSql, quoteTableIdentifier } from "@/lib/tableSelectSql"; import { uuid } from "@/lib/utils"; import { resolveHeaderColumnType } from "@/lib/dataGridColumnType"; -import { canEditExistingTableRows, hiveTablePropertiesIndicateTransactional, isHiddenGridColumn, isTdengineExistingRowReadonlyColumn, usesSyntheticRowIdKey } from "@/lib/tableEditing"; +import { canEditExistingTableRows, canUseKeylessRowPredicate, hiveTablePropertiesIndicateTransactional, isHiddenGridColumn, isTdengineExistingRowReadonlyColumn, usesSyntheticRowIdKey } from "@/lib/tableEditing"; import { buildDataGridContextFilterCondition, buildDataGridCountSql, buildHiveTablePropertiesSql, type DataGridContextFilterMode } from "@/lib/dataGridSql"; import { buildVisibleTransposeRows, @@ -2345,6 +2345,7 @@ const canJumpLastPage = computed(() => canGoNextPage.value && (hasKnownTotalRowC const totalRowCountBusy = computed(() => props.totalRowCountLoading === true || manualTotalRowCountLoading.value); const canCalculateTotalRowCount = computed(() => !isResultsContext.value && !!props.connectionId && (!!props.tableMeta || !!props.countSql)); const showQueryEditReadyBadge = computed(() => isResultsContext.value && hasData.value && !!props.editable && !!props.tableMeta); +const showKeylessEditWarning = computed(() => !!props.editable && !!props.tableMeta && canUseKeylessRowPredicate(props.databaseType, props.tableMeta.primaryKeys ?? [])); const canShowWhereSearch = computed(() => !!props.onExecuteSql && !isResultsContext.value); const canUseWhereSearch = computed(() => !!props.tableMeta && !!props.onExecuteSql && !isResultsContext.value); type DataGridTableMeta = NonNullable; @@ -6720,6 +6721,17 @@ const gridContextMenuItems = computed(() => { {{ t("grid.queryEditReadyHint", { table: tableMeta?.tableName }) }} + + +
+ + {{ t("grid.keylessEditWarning") }} +
+
+ + {{ t("grid.keylessEditWarningHint") }} + +