mirror of https://github.com/citusdata/citus.git
Fix EXPLAIN ANALYZE JSON format for subplans
parent
f9bbcb8840
commit
c0827703ec
|
@ -316,6 +316,8 @@ ExplainSubPlans(DistributedPlan *distributedPlan, ExplainState *es)
|
|||
es->indent += 3;
|
||||
}
|
||||
|
||||
ExplainOpenGroup("Subplan", NULL, true, es);
|
||||
|
||||
if (es->analyze)
|
||||
{
|
||||
if (es->timing)
|
||||
|
@ -358,9 +360,14 @@ ExplainSubPlans(DistributedPlan *distributedPlan, ExplainState *es)
|
|||
}
|
||||
#endif
|
||||
|
||||
ExplainOpenGroup("PlannedStmt", "PlannedStmt", false, es);
|
||||
|
||||
ExplainOnePlanCompat(plan, into, es, queryString, params, NULL, &planduration,
|
||||
(es->buffers ? &bufusage : NULL));
|
||||
|
||||
ExplainCloseGroup("PlannedStmt", "PlannedStmt", false, es);
|
||||
ExplainCloseGroup("Subplan", NULL, true, es);
|
||||
|
||||
if (es->format == EXPLAIN_FORMAT_TEXT)
|
||||
{
|
||||
es->indent -= 3;
|
||||
|
|
|
@ -18,6 +18,16 @@ BEGIN
|
|||
RETURN result;
|
||||
END;
|
||||
$BODY$ LANGUAGE plpgsql;
|
||||
CREATE FUNCTION explain_analyze_json(query text)
|
||||
RETURNS jsonb
|
||||
AS $BODY$
|
||||
DECLARE
|
||||
result jsonb;
|
||||
BEGIN
|
||||
EXECUTE format('EXPLAIN (ANALYZE TRUE, FORMAT JSON) %s', query) INTO result;
|
||||
RETURN result;
|
||||
END;
|
||||
$BODY$ LANGUAGE plpgsql;
|
||||
-- Function that parses explain output as XML
|
||||
CREATE FUNCTION explain_xml(query text)
|
||||
RETURNS xml
|
||||
|
@ -29,6 +39,17 @@ BEGIN
|
|||
RETURN result;
|
||||
END;
|
||||
$BODY$ LANGUAGE plpgsql;
|
||||
-- Function that parses explain output as XML
|
||||
CREATE FUNCTION explain_analyze_xml(query text)
|
||||
RETURNS xml
|
||||
AS $BODY$
|
||||
DECLARE
|
||||
result xml;
|
||||
BEGIN
|
||||
EXECUTE format('EXPLAIN (ANALYZE true, FORMAT XML) %s', query) INTO result;
|
||||
RETURN result;
|
||||
END;
|
||||
$BODY$ LANGUAGE plpgsql;
|
||||
-- VACUMM related tables to ensure test outputs are stable
|
||||
VACUUM ANALYZE lineitem;
|
||||
VACUUM ANALYZE orders;
|
||||
|
@ -135,6 +156,13 @@ SELECT true AS valid FROM explain_json($$
|
|||
SELECT l_quantity, count(*) count_quantity FROM lineitem
|
||||
GROUP BY l_quantity ORDER BY count_quantity, l_quantity$$);
|
||||
t
|
||||
SELECT true AS valid FROM explain_analyze_json($$
|
||||
WITH a AS (
|
||||
SELECT l_quantity, count(*) count_quantity FROM lineitem
|
||||
GROUP BY l_quantity ORDER BY count_quantity, l_quantity LIMIT 10)
|
||||
SELECT count(*) FROM a
|
||||
$$);
|
||||
t
|
||||
-- Test XML format
|
||||
EXPLAIN (COSTS FALSE, FORMAT XML)
|
||||
SELECT l_quantity, count(*) count_quantity FROM lineitem
|
||||
|
@ -208,6 +236,13 @@ SELECT true AS valid FROM explain_xml($$
|
|||
SELECT l_quantity, count(*) count_quantity FROM lineitem
|
||||
GROUP BY l_quantity ORDER BY count_quantity, l_quantity$$);
|
||||
t
|
||||
SELECT true AS valid FROM explain_analyze_xml($$
|
||||
WITH a AS (
|
||||
SELECT l_quantity, count(*) count_quantity FROM lineitem
|
||||
GROUP BY l_quantity ORDER BY count_quantity, l_quantity LIMIT 10)
|
||||
SELECT count(*) FROM a
|
||||
$$);
|
||||
t
|
||||
-- Test YAML format
|
||||
EXPLAIN (COSTS FALSE, FORMAT YAML)
|
||||
SELECT l_quantity, count(*) count_quantity FROM lineitem
|
||||
|
|
|
@ -24,6 +24,17 @@ BEGIN
|
|||
END;
|
||||
$BODY$ LANGUAGE plpgsql;
|
||||
|
||||
CREATE FUNCTION explain_analyze_json(query text)
|
||||
RETURNS jsonb
|
||||
AS $BODY$
|
||||
DECLARE
|
||||
result jsonb;
|
||||
BEGIN
|
||||
EXECUTE format('EXPLAIN (ANALYZE TRUE, FORMAT JSON) %s', query) INTO result;
|
||||
RETURN result;
|
||||
END;
|
||||
$BODY$ LANGUAGE plpgsql;
|
||||
|
||||
-- Function that parses explain output as XML
|
||||
CREATE FUNCTION explain_xml(query text)
|
||||
RETURNS xml
|
||||
|
@ -36,6 +47,19 @@ BEGIN
|
|||
END;
|
||||
$BODY$ LANGUAGE plpgsql;
|
||||
|
||||
-- Function that parses explain output as XML
|
||||
CREATE FUNCTION explain_analyze_xml(query text)
|
||||
RETURNS xml
|
||||
AS $BODY$
|
||||
DECLARE
|
||||
result xml;
|
||||
BEGIN
|
||||
EXECUTE format('EXPLAIN (ANALYZE true, FORMAT XML) %s', query) INTO result;
|
||||
RETURN result;
|
||||
END;
|
||||
$BODY$ LANGUAGE plpgsql;
|
||||
|
||||
|
||||
-- VACUMM related tables to ensure test outputs are stable
|
||||
VACUUM ANALYZE lineitem;
|
||||
VACUUM ANALYZE orders;
|
||||
|
@ -63,6 +87,13 @@ SELECT true AS valid FROM explain_json($$
|
|||
SELECT l_quantity, count(*) count_quantity FROM lineitem
|
||||
GROUP BY l_quantity ORDER BY count_quantity, l_quantity$$);
|
||||
|
||||
SELECT true AS valid FROM explain_analyze_json($$
|
||||
WITH a AS (
|
||||
SELECT l_quantity, count(*) count_quantity FROM lineitem
|
||||
GROUP BY l_quantity ORDER BY count_quantity, l_quantity LIMIT 10)
|
||||
SELECT count(*) FROM a
|
||||
$$);
|
||||
|
||||
-- Test XML format
|
||||
EXPLAIN (COSTS FALSE, FORMAT XML)
|
||||
SELECT l_quantity, count(*) count_quantity FROM lineitem
|
||||
|
@ -73,6 +104,13 @@ SELECT true AS valid FROM explain_xml($$
|
|||
SELECT l_quantity, count(*) count_quantity FROM lineitem
|
||||
GROUP BY l_quantity ORDER BY count_quantity, l_quantity$$);
|
||||
|
||||
SELECT true AS valid FROM explain_analyze_xml($$
|
||||
WITH a AS (
|
||||
SELECT l_quantity, count(*) count_quantity FROM lineitem
|
||||
GROUP BY l_quantity ORDER BY count_quantity, l_quantity LIMIT 10)
|
||||
SELECT count(*) FROM a
|
||||
$$);
|
||||
|
||||
-- Test YAML format
|
||||
EXPLAIN (COSTS FALSE, FORMAT YAML)
|
||||
SELECT l_quantity, count(*) count_quantity FROM lineitem
|
||||
|
|
Loading…
Reference in New Issue