fix(query): show returned rows in execution summary

Closes #5621
This commit is contained in:
t8y2 2026-08-09 01:27:23 +08:00
parent f10642e29a
commit cedd2e5097
No known key found for this signature in database
3 changed files with 16 additions and 9 deletions

View File

@ -1413,7 +1413,7 @@ defineExpose({ focusSearch, refreshData, refreshQueryEditorCompletionCache, hand
<div>{{ t("executionSummary.statement") }}</div>
<div>{{ t("executionSummary.sql") }}</div>
<div>{{ t("executionSummary.status") }}</div>
<div class="text-right">{{ t("executionSummary.affected") }}</div>
<div class="text-right">{{ t("executionSummary.rows") }}</div>
<div class="text-right">{{ t("executionSummary.time") }}</div>
</div>
<div v-for="item in summaryItems" :key="item.statementIndex" class="relative grid w-full grid-cols-[4rem_minmax(14rem,1fr)_7rem_7rem_6rem] items-center border-b px-3 py-2 text-left text-xs last:border-b-0">
@ -1456,7 +1456,7 @@ defineExpose({ focusSearch, refreshData, refreshQueryEditorCompletionCache, hand
{{ t(`executionSummary.statuses.${item.status}`) }}
</span>
</div>
<div class="pointer-events-none relative z-[1] text-right tabular-nums">{{ item.status === "pending" || item.status === "running" || item.status === "skipped" ? "—" : item.affectedRows.toLocaleString() }}</div>
<div class="pointer-events-none relative z-[1] text-right tabular-nums">{{ item.status === "pending" || item.status === "running" || item.status === "skipped" ? "—" : item.rowCount.toLocaleString() }}</div>
<div class="pointer-events-none relative z-[1] text-right tabular-nums">{{ item.executionTimeMs > 0 || item.status === "success" || item.status === "error" ? `${item.executionTimeMs}ms` : "—" }}</div>
</div>
</div>

View File

@ -351,6 +351,7 @@ export interface ExecutionSummaryItem {
returnedColumns: number;
returnedRows: number;
affectedRows: number;
rowCount: number;
executionTimeMs: number;
hasTabularResult: boolean;
isError: boolean;
@ -361,6 +362,9 @@ export function executionSummaryItems(tab: Pick<QueryTab, "result" | "results" |
if (tab.batchSqlExecution?.items.length) {
return tab.batchSqlExecution.items.map((item, index) => {
const result = results.find((candidate, resultIndex) => (candidate.statement_index ?? resultIndex) === item.statementIndex);
const returnedRows = result?.rows.length ?? 0;
const affectedRows = item.affectedRows ?? result?.affected_rows ?? 0;
const hasTabularResult = (result?.columns.length ?? 0) > 0;
return {
result,
index,
@ -371,10 +375,11 @@ export function executionSummaryItems(tab: Pick<QueryTab, "result" | "results" |
status: item.status,
error: item.error,
returnedColumns: result?.columns.length ?? 0,
returnedRows: result?.rows.length ?? 0,
affectedRows: item.affectedRows ?? result?.affected_rows ?? 0,
returnedRows,
affectedRows,
rowCount: hasTabularResult ? returnedRows : affectedRows,
executionTimeMs: item.executionTimeMs ?? result?.execution_time_ms ?? 0,
hasTabularResult: (result?.columns.length ?? 0) > 0,
hasTabularResult,
isError: item.status === "error",
};
});
@ -393,6 +398,7 @@ export function executionSummaryItems(tab: Pick<QueryTab, "result" | "results" |
returnedColumns: result.columns.length,
returnedRows: result.rows.length,
affectedRows: result.affected_rows,
rowCount: result.columns.length > 0 ? result.rows.length : result.affected_rows,
executionTimeMs: result.execution_time_ms,
hasTabularResult: result.columns.length > 0,
isError,

View File

@ -320,7 +320,7 @@ test("result grid cache key includes result run id and statement result index",
test("execution summary items include table and non-table statement results", () => {
const items = executionSummaryItems({
results: [result([]), result(["id"]), { ...result(["Error"]), rows: [["boom"]], execution_error: true }],
results: [result([], { affected_rows: 4 }), result(["id"], { rows: [[1], [2], [3]] }), { ...result(["Error"]), rows: [["boom"]], execution_error: true }],
});
assert.deepEqual(
@ -329,12 +329,13 @@ test("execution summary items include table and non-table statement results", ()
hasTabularResult: item.hasTabularResult,
returnedColumns: item.returnedColumns,
returnedRows: item.returnedRows,
rowCount: item.rowCount,
isError: item.isError,
})),
[
{ index: 0, hasTabularResult: false, returnedColumns: 0, returnedRows: 0, isError: false },
{ index: 1, hasTabularResult: true, returnedColumns: 1, returnedRows: 0, isError: false },
{ index: 2, hasTabularResult: true, returnedColumns: 1, returnedRows: 1, isError: true },
{ index: 0, hasTabularResult: false, returnedColumns: 0, returnedRows: 0, rowCount: 4, isError: false },
{ index: 1, hasTabularResult: true, returnedColumns: 1, returnedRows: 3, rowCount: 3, isError: false },
{ index: 2, hasTabularResult: true, returnedColumns: 1, returnedRows: 1, rowCount: 1, isError: true },
],
);
});