mirror of
https://github.com/postgres/postgres.git
synced 2025-06-26 12:21:12 +03:00
Fix EXPLAIN MERGE output when no tuples are processed
An 'else' clause was misplaced in commit 598ac10be1
, making zero-rows
output look a bit silly. Add a test case for it.
Pointed out by Tom Lane.
Discussion: https://postgr.es/m/21030.1652893083@sss.pgh.pa.us
This commit is contained in:
@ -4068,7 +4068,9 @@ show_modifytable_info(ModifyTableState *mtstate, List *ancestors,
|
|||||||
skipped_path = total - insert_path - update_path - delete_path;
|
skipped_path = total - insert_path - update_path - delete_path;
|
||||||
Assert(skipped_path >= 0);
|
Assert(skipped_path >= 0);
|
||||||
|
|
||||||
if (es->format == EXPLAIN_FORMAT_TEXT && total > 0)
|
if (es->format == EXPLAIN_FORMAT_TEXT)
|
||||||
|
{
|
||||||
|
if (total > 0)
|
||||||
{
|
{
|
||||||
ExplainIndentText(es);
|
ExplainIndentText(es);
|
||||||
appendStringInfoString(es->str, "Tuples:");
|
appendStringInfoString(es->str, "Tuples:");
|
||||||
@ -4082,6 +4084,7 @@ show_modifytable_info(ModifyTableState *mtstate, List *ancestors,
|
|||||||
appendStringInfo(es->str, " skipped=%.0f", skipped_path);
|
appendStringInfo(es->str, " skipped=%.0f", skipped_path);
|
||||||
appendStringInfoChar(es->str, '\n');
|
appendStringInfoChar(es->str, '\n');
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ExplainPropertyFloat("Tuples Inserted", NULL, insert_path, 0, es);
|
ExplainPropertyFloat("Tuples Inserted", NULL, insert_path, 0, es);
|
||||||
|
@ -1316,7 +1316,7 @@ BEGIN
|
|||||||
EXECUTE 'explain (analyze, timing off, summary off, costs off) ' ||
|
EXECUTE 'explain (analyze, timing off, summary off, costs off) ' ||
|
||||||
query
|
query
|
||||||
LOOP
|
LOOP
|
||||||
ln := regexp_replace(ln, 'Memory: \S*', 'Memory: xxx');
|
ln := regexp_replace(ln, '(Memory( Usage)?|Buckets|Batches): \S*', '\1: xxx', 'g');
|
||||||
RETURN NEXT ln;
|
RETURN NEXT ln;
|
||||||
END LOOP;
|
END LOOP;
|
||||||
END;
|
END;
|
||||||
@ -1432,6 +1432,24 @@ WHEN NOT MATCHED AND s.a < 20 THEN
|
|||||||
-> Seq Scan on ex_mtarget t (actual rows=49 loops=1)
|
-> Seq Scan on ex_mtarget t (actual rows=49 loops=1)
|
||||||
(12 rows)
|
(12 rows)
|
||||||
|
|
||||||
|
-- nothing
|
||||||
|
SELECT explain_merge('
|
||||||
|
MERGE INTO ex_mtarget t USING ex_msource s ON t.a = s.a AND t.a < -1000
|
||||||
|
WHEN MATCHED AND t.a < 10 THEN
|
||||||
|
DO NOTHING');
|
||||||
|
explain_merge
|
||||||
|
--------------------------------------------------------------------
|
||||||
|
Merge on ex_mtarget t (actual rows=0 loops=1)
|
||||||
|
-> Hash Join (actual rows=0 loops=1)
|
||||||
|
Hash Cond: (s.a = t.a)
|
||||||
|
-> Seq Scan on ex_msource s (actual rows=1 loops=1)
|
||||||
|
-> Hash (actual rows=0 loops=1)
|
||||||
|
Buckets: xxx Batches: xxx Memory Usage: xxx
|
||||||
|
-> Seq Scan on ex_mtarget t (actual rows=0 loops=1)
|
||||||
|
Filter: (a < '-1000'::integer)
|
||||||
|
Rows Removed by Filter: 54
|
||||||
|
(9 rows)
|
||||||
|
|
||||||
DROP TABLE ex_msource, ex_mtarget;
|
DROP TABLE ex_msource, ex_mtarget;
|
||||||
DROP FUNCTION explain_merge(text);
|
DROP FUNCTION explain_merge(text);
|
||||||
-- Subqueries
|
-- Subqueries
|
||||||
|
@ -878,7 +878,7 @@ BEGIN
|
|||||||
EXECUTE 'explain (analyze, timing off, summary off, costs off) ' ||
|
EXECUTE 'explain (analyze, timing off, summary off, costs off) ' ||
|
||||||
query
|
query
|
||||||
LOOP
|
LOOP
|
||||||
ln := regexp_replace(ln, 'Memory: \S*', 'Memory: xxx');
|
ln := regexp_replace(ln, '(Memory( Usage)?|Buckets|Batches): \S*', '\1: xxx', 'g');
|
||||||
RETURN NEXT ln;
|
RETURN NEXT ln;
|
||||||
END LOOP;
|
END LOOP;
|
||||||
END;
|
END;
|
||||||
@ -920,6 +920,12 @@ WHEN MATCHED AND t.a >= 30 AND t.a <= 40 THEN
|
|||||||
WHEN NOT MATCHED AND s.a < 20 THEN
|
WHEN NOT MATCHED AND s.a < 20 THEN
|
||||||
INSERT VALUES (a, b)');
|
INSERT VALUES (a, b)');
|
||||||
|
|
||||||
|
-- nothing
|
||||||
|
SELECT explain_merge('
|
||||||
|
MERGE INTO ex_mtarget t USING ex_msource s ON t.a = s.a AND t.a < -1000
|
||||||
|
WHEN MATCHED AND t.a < 10 THEN
|
||||||
|
DO NOTHING');
|
||||||
|
|
||||||
DROP TABLE ex_msource, ex_mtarget;
|
DROP TABLE ex_msource, ex_mtarget;
|
||||||
DROP FUNCTION explain_merge(text);
|
DROP FUNCTION explain_merge(text);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user