From 78f708bfad7eeed251438ea2d0a59ce674693f89 Mon Sep 17 00:00:00 2001 From: James Coleman Date: Mon, 30 Mar 2020 18:39:09 -0400 Subject: [PATCH v47 3/6] explain fixes --- src/backend/commands/explain.c | 25 +++++++++++++------ .../regress/expected/incremental_sort.out | 9 +++---- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index 799c6c44d2..cd2d81712f 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -2774,8 +2774,6 @@ show_incremental_sort_group_info(IncrementalSortGroupInfo *groupInfo, spaceTypeName, avgSpace, groupInfo->maxDiskSpaceUsed); } - - appendStringInfo(es->str, "\n"); } else { @@ -2845,11 +2843,18 @@ show_incremental_sort_info(IncrementalSortState *incrsortstate, show_incremental_sort_group_info(fullsortGroupInfo, "Full-sort", true, es); prefixsortGroupInfo = &incrsortstate->incsort_info.prefixsortGroupInfo; if (prefixsortGroupInfo->groupCount > 0) - show_incremental_sort_group_info(prefixsortGroupInfo, "Presorted", true, es); + { + if (es->format == EXPLAIN_FORMAT_TEXT) + appendStringInfo(es->str, " "); + show_incremental_sort_group_info(prefixsortGroupInfo, "Presorted", false, es); + } + if (es->format == EXPLAIN_FORMAT_TEXT) + appendStringInfo(es->str, "\n"); if (incrsortstate->shared_info != NULL) { int n; + bool indent_first_line; for (n = 0; n < incrsortstate->shared_info->num_workers; n++) { @@ -2870,11 +2875,17 @@ show_incremental_sort_info(IncrementalSortState *incrsortstate, if (es->workers_state) ExplainOpenWorker(n, es); - if (fullsortGroupInfo->groupCount > 0) - show_incremental_sort_group_info(fullsortGroupInfo, "Full-sort", - es->workers_state == NULL, es); + indent_first_line = es->workers_state == NULL || es->verbose; + show_incremental_sort_group_info(fullsortGroupInfo, "Full-sort", + indent_first_line, es); if (prefixsortGroupInfo->groupCount > 0) - show_incremental_sort_group_info(prefixsortGroupInfo, "Presorted", true, es); + { + if (es->format == EXPLAIN_FORMAT_TEXT) + appendStringInfo(es->str, " "); + show_incremental_sort_group_info(prefixsortGroupInfo, "Presorted", false, es); + } + if (es->format == EXPLAIN_FORMAT_TEXT) + appendStringInfo(es->str, "\n"); if (es->workers_state) ExplainCloseWorker(n, es); diff --git a/src/test/regress/expected/incremental_sort.out b/src/test/regress/expected/incremental_sort.out index 9a9cb9f28c..288a5b2101 100644 --- a/src/test/regress/expected/incremental_sort.out +++ b/src/test/regress/expected/incremental_sort.out @@ -705,19 +705,18 @@ select * from t left join (select * from (select * from t order by a) v order by rollback; -- Test EXPLAIN ANALYZE with both fullsort and presorted groups. select explain_analyze_without_memory('select * from (select * from t order by a) s order by a, b limit 70'); - explain_analyze_without_memory -------------------------------------------------------------------------------- + explain_analyze_without_memory +----------------------------------------------------------------------------------------------------------------------------------------------------- Limit (actual rows=70 loops=1) -> Incremental Sort (actual rows=70 loops=1) Sort Key: t.a, t.b Presorted Key: t.a - Full-sort Groups: 1 Sort Method: quicksort Memory: avg=NNkB peak=NNkB - Presorted Groups: 5 Sort Method: quicksort Memory: avg=NNkB peak=NNkB + Full-sort Groups: 1 Sort Method: quicksort Memory: avg=NNkB peak=NNkB Presorted Groups: 5 Sort Method: quicksort Memory: avg=NNkB peak=NNkB -> Sort (actual rows=100 loops=1) Sort Key: t.a Sort Method: quicksort Memory: NNkB -> Seq Scan on t (actual rows=100 loops=1) -(10 rows) +(9 rows) select jsonb_pretty(explain_analyze_inc_sort_nodes_without_memory('select * from (select * from t order by a) s order by a, b limit 70')); jsonb_pretty -- 2.17.1