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