Test EXPLAIN (FORMAT JSON) ... XMLTABLE
Also, add an alias to the XMLTABLE expression in an existing test. This covers some code in explain.c that wasn't previously covered. I patched xml_2.out blindly :-( Discussion: https://postgr.es/m/202401181146.fuoeskfzriq7@alvherre.pgsql
This commit is contained in:
parent
b0f0a9432d
commit
752533d40f
@ -1549,19 +1549,60 @@ SELECT xmltable.* FROM xmldata, LATERAL xmltable('/ROWS/ROW[COUNTRY_NAME="Japan"
|
|||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
EXPLAIN (VERBOSE, COSTS OFF)
|
EXPLAIN (VERBOSE, COSTS OFF)
|
||||||
SELECT xmltable.* FROM xmldata, LATERAL xmltable('/ROWS/ROW[COUNTRY_NAME="Japan" or COUNTRY_NAME="India"]' PASSING data COLUMNS "COUNTRY_NAME" text, "REGION_ID" int) WHERE "COUNTRY_NAME" = 'Japan';
|
SELECT f.* FROM xmldata, LATERAL xmltable('/ROWS/ROW[COUNTRY_NAME="Japan" or COUNTRY_NAME="India"]' PASSING data COLUMNS "COUNTRY_NAME" text, "REGION_ID" int) AS f WHERE "COUNTRY_NAME" = 'Japan';
|
||||||
QUERY PLAN
|
QUERY PLAN
|
||||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
Nested Loop
|
Nested Loop
|
||||||
Output: "xmltable"."COUNTRY_NAME", "xmltable"."REGION_ID"
|
Output: f."COUNTRY_NAME", f."REGION_ID"
|
||||||
-> Seq Scan on public.xmldata
|
-> Seq Scan on public.xmldata
|
||||||
Output: xmldata.data
|
Output: xmldata.data
|
||||||
-> Table Function Scan on "xmltable"
|
-> Table Function Scan on "xmltable" f
|
||||||
Output: "xmltable"."COUNTRY_NAME", "xmltable"."REGION_ID"
|
Output: f."COUNTRY_NAME", f."REGION_ID"
|
||||||
Table Function Call: XMLTABLE(('/ROWS/ROW[COUNTRY_NAME="Japan" or COUNTRY_NAME="India"]'::text) PASSING (xmldata.data) COLUMNS "COUNTRY_NAME" text, "REGION_ID" integer)
|
Table Function Call: XMLTABLE(('/ROWS/ROW[COUNTRY_NAME="Japan" or COUNTRY_NAME="India"]'::text) PASSING (xmldata.data) COLUMNS "COUNTRY_NAME" text, "REGION_ID" integer)
|
||||||
Filter: ("xmltable"."COUNTRY_NAME" = 'Japan'::text)
|
Filter: (f."COUNTRY_NAME" = 'Japan'::text)
|
||||||
(8 rows)
|
(8 rows)
|
||||||
|
|
||||||
|
EXPLAIN (VERBOSE, FORMAT JSON, COSTS OFF)
|
||||||
|
SELECT f.* FROM xmldata, LATERAL xmltable('/ROWS/ROW[COUNTRY_NAME="Japan" or COUNTRY_NAME="India"]' PASSING data COLUMNS "COUNTRY_NAME" text, "REGION_ID" int) AS f WHERE "COUNTRY_NAME" = 'Japan';
|
||||||
|
QUERY PLAN
|
||||||
|
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
[ +
|
||||||
|
{ +
|
||||||
|
"Plan": { +
|
||||||
|
"Node Type": "Nested Loop", +
|
||||||
|
"Parallel Aware": false, +
|
||||||
|
"Async Capable": false, +
|
||||||
|
"Join Type": "Inner", +
|
||||||
|
"Output": ["f.\"COUNTRY_NAME\"", "f.\"REGION_ID\""], +
|
||||||
|
"Inner Unique": false, +
|
||||||
|
"Plans": [ +
|
||||||
|
{ +
|
||||||
|
"Node Type": "Seq Scan", +
|
||||||
|
"Parent Relationship": "Outer", +
|
||||||
|
"Parallel Aware": false, +
|
||||||
|
"Async Capable": false, +
|
||||||
|
"Relation Name": "xmldata", +
|
||||||
|
"Schema": "public", +
|
||||||
|
"Alias": "xmldata", +
|
||||||
|
"Output": ["xmldata.data"] +
|
||||||
|
}, +
|
||||||
|
{ +
|
||||||
|
"Node Type": "Table Function Scan", +
|
||||||
|
"Parent Relationship": "Inner", +
|
||||||
|
"Parallel Aware": false, +
|
||||||
|
"Async Capable": false, +
|
||||||
|
"Table Function Name": "xmltable", +
|
||||||
|
"Alias": "f", +
|
||||||
|
"Output": ["f.\"COUNTRY_NAME\"", "f.\"REGION_ID\""], +
|
||||||
|
"Table Function Call": "XMLTABLE(('/ROWS/ROW[COUNTRY_NAME=\"Japan\" or COUNTRY_NAME=\"India\"]'::text) PASSING (xmldata.data) COLUMNS \"COUNTRY_NAME\" text, \"REGION_ID\" integer)",+
|
||||||
|
"Filter": "(f.\"COUNTRY_NAME\" = 'Japan'::text)" +
|
||||||
|
} +
|
||||||
|
] +
|
||||||
|
} +
|
||||||
|
} +
|
||||||
|
]
|
||||||
|
(1 row)
|
||||||
|
|
||||||
-- should to work with more data
|
-- should to work with more data
|
||||||
INSERT INTO xmldata VALUES('<ROWS>
|
INSERT INTO xmldata VALUES('<ROWS>
|
||||||
<ROW id="10">
|
<ROW id="10">
|
||||||
|
@ -1174,19 +1174,60 @@ SELECT xmltable.* FROM xmldata, LATERAL xmltable('/ROWS/ROW[COUNTRY_NAME="Japan"
|
|||||||
(0 rows)
|
(0 rows)
|
||||||
|
|
||||||
EXPLAIN (VERBOSE, COSTS OFF)
|
EXPLAIN (VERBOSE, COSTS OFF)
|
||||||
SELECT xmltable.* FROM xmldata, LATERAL xmltable('/ROWS/ROW[COUNTRY_NAME="Japan" or COUNTRY_NAME="India"]' PASSING data COLUMNS "COUNTRY_NAME" text, "REGION_ID" int) WHERE "COUNTRY_NAME" = 'Japan';
|
SELECT f.* FROM xmldata, LATERAL xmltable('/ROWS/ROW[COUNTRY_NAME="Japan" or COUNTRY_NAME="India"]' PASSING data COLUMNS "COUNTRY_NAME" text, "REGION_ID" int) AS f WHERE "COUNTRY_NAME" = 'Japan';
|
||||||
QUERY PLAN
|
QUERY PLAN
|
||||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
Nested Loop
|
Nested Loop
|
||||||
Output: "xmltable"."COUNTRY_NAME", "xmltable"."REGION_ID"
|
Output: f."COUNTRY_NAME", f."REGION_ID"
|
||||||
-> Seq Scan on public.xmldata
|
-> Seq Scan on public.xmldata
|
||||||
Output: xmldata.data
|
Output: xmldata.data
|
||||||
-> Table Function Scan on "xmltable"
|
-> Table Function Scan on "xmltable" f
|
||||||
Output: "xmltable"."COUNTRY_NAME", "xmltable"."REGION_ID"
|
Output: f."COUNTRY_NAME", f."REGION_ID"
|
||||||
Table Function Call: XMLTABLE(('/ROWS/ROW[COUNTRY_NAME="Japan" or COUNTRY_NAME="India"]'::text) PASSING (xmldata.data) COLUMNS "COUNTRY_NAME" text, "REGION_ID" integer)
|
Table Function Call: XMLTABLE(('/ROWS/ROW[COUNTRY_NAME="Japan" or COUNTRY_NAME="India"]'::text) PASSING (xmldata.data) COLUMNS "COUNTRY_NAME" text, "REGION_ID" integer)
|
||||||
Filter: ("xmltable"."COUNTRY_NAME" = 'Japan'::text)
|
Filter: (f."COUNTRY_NAME" = 'Japan'::text)
|
||||||
(8 rows)
|
(8 rows)
|
||||||
|
|
||||||
|
EXPLAIN (VERBOSE, FORMAT JSON, COSTS OFF)
|
||||||
|
SELECT f.* FROM xmldata, LATERAL xmltable('/ROWS/ROW[COUNTRY_NAME="Japan" or COUNTRY_NAME="India"]' PASSING data COLUMNS "COUNTRY_NAME" text, "REGION_ID" int) AS f WHERE "COUNTRY_NAME" = 'Japan';
|
||||||
|
QUERY PLAN
|
||||||
|
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
[ +
|
||||||
|
{ +
|
||||||
|
"Plan": { +
|
||||||
|
"Node Type": "Nested Loop", +
|
||||||
|
"Parallel Aware": false, +
|
||||||
|
"Async Capable": false, +
|
||||||
|
"Join Type": "Inner", +
|
||||||
|
"Output": ["f.\"COUNTRY_NAME\"", "f.\"REGION_ID\""], +
|
||||||
|
"Inner Unique": false, +
|
||||||
|
"Plans": [ +
|
||||||
|
{ +
|
||||||
|
"Node Type": "Seq Scan", +
|
||||||
|
"Parent Relationship": "Outer", +
|
||||||
|
"Parallel Aware": false, +
|
||||||
|
"Async Capable": false, +
|
||||||
|
"Relation Name": "xmldata", +
|
||||||
|
"Schema": "public", +
|
||||||
|
"Alias": "xmldata", +
|
||||||
|
"Output": ["xmldata.data"] +
|
||||||
|
}, +
|
||||||
|
{ +
|
||||||
|
"Node Type": "Table Function Scan", +
|
||||||
|
"Parent Relationship": "Inner", +
|
||||||
|
"Parallel Aware": false, +
|
||||||
|
"Async Capable": false, +
|
||||||
|
"Table Function Name": "xmltable", +
|
||||||
|
"Alias": "f", +
|
||||||
|
"Output": ["f.\"COUNTRY_NAME\"", "f.\"REGION_ID\""], +
|
||||||
|
"Table Function Call": "XMLTABLE(('/ROWS/ROW[COUNTRY_NAME=\"Japan\" or COUNTRY_NAME=\"India\"]'::text) PASSING (xmldata.data) COLUMNS \"COUNTRY_NAME\" text, \"REGION_ID\" integer)",+
|
||||||
|
"Filter": "(f.\"COUNTRY_NAME\" = 'Japan'::text)" +
|
||||||
|
} +
|
||||||
|
] +
|
||||||
|
} +
|
||||||
|
} +
|
||||||
|
]
|
||||||
|
(1 row)
|
||||||
|
|
||||||
-- should to work with more data
|
-- should to work with more data
|
||||||
INSERT INTO xmldata VALUES('<ROWS>
|
INSERT INTO xmldata VALUES('<ROWS>
|
||||||
<ROW id="10">
|
<ROW id="10">
|
||||||
|
@ -1529,19 +1529,60 @@ SELECT xmltable.* FROM xmldata, LATERAL xmltable('/ROWS/ROW[COUNTRY_NAME="Japan"
|
|||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
EXPLAIN (VERBOSE, COSTS OFF)
|
EXPLAIN (VERBOSE, COSTS OFF)
|
||||||
SELECT xmltable.* FROM xmldata, LATERAL xmltable('/ROWS/ROW[COUNTRY_NAME="Japan" or COUNTRY_NAME="India"]' PASSING data COLUMNS "COUNTRY_NAME" text, "REGION_ID" int) WHERE "COUNTRY_NAME" = 'Japan';
|
SELECT f.* FROM xmldata, LATERAL xmltable('/ROWS/ROW[COUNTRY_NAME="Japan" or COUNTRY_NAME="India"]' PASSING data COLUMNS "COUNTRY_NAME" text, "REGION_ID" int) AS f WHERE "COUNTRY_NAME" = 'Japan';
|
||||||
QUERY PLAN
|
QUERY PLAN
|
||||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
Nested Loop
|
Nested Loop
|
||||||
Output: "xmltable"."COUNTRY_NAME", "xmltable"."REGION_ID"
|
Output: f."COUNTRY_NAME", f."REGION_ID"
|
||||||
-> Seq Scan on public.xmldata
|
-> Seq Scan on public.xmldata
|
||||||
Output: xmldata.data
|
Output: xmldata.data
|
||||||
-> Table Function Scan on "xmltable"
|
-> Table Function Scan on "xmltable" f
|
||||||
Output: "xmltable"."COUNTRY_NAME", "xmltable"."REGION_ID"
|
Output: f."COUNTRY_NAME", f."REGION_ID"
|
||||||
Table Function Call: XMLTABLE(('/ROWS/ROW[COUNTRY_NAME="Japan" or COUNTRY_NAME="India"]'::text) PASSING (xmldata.data) COLUMNS "COUNTRY_NAME" text, "REGION_ID" integer)
|
Table Function Call: XMLTABLE(('/ROWS/ROW[COUNTRY_NAME="Japan" or COUNTRY_NAME="India"]'::text) PASSING (xmldata.data) COLUMNS "COUNTRY_NAME" text, "REGION_ID" integer)
|
||||||
Filter: ("xmltable"."COUNTRY_NAME" = 'Japan'::text)
|
Filter: (f."COUNTRY_NAME" = 'Japan'::text)
|
||||||
(8 rows)
|
(8 rows)
|
||||||
|
|
||||||
|
EXPLAIN (VERBOSE, FORMAT JSON, COSTS OFF)
|
||||||
|
SELECT f.* FROM xmldata, LATERAL xmltable('/ROWS/ROW[COUNTRY_NAME="Japan" or COUNTRY_NAME="India"]' PASSING data COLUMNS "COUNTRY_NAME" text, "REGION_ID" int) AS f WHERE "COUNTRY_NAME" = 'Japan';
|
||||||
|
QUERY PLAN
|
||||||
|
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
[ +
|
||||||
|
{ +
|
||||||
|
"Plan": { +
|
||||||
|
"Node Type": "Nested Loop", +
|
||||||
|
"Parallel Aware": false, +
|
||||||
|
"Async Capable": false, +
|
||||||
|
"Join Type": "Inner", +
|
||||||
|
"Output": ["f.\"COUNTRY_NAME\"", "f.\"REGION_ID\""], +
|
||||||
|
"Inner Unique": false, +
|
||||||
|
"Plans": [ +
|
||||||
|
{ +
|
||||||
|
"Node Type": "Seq Scan", +
|
||||||
|
"Parent Relationship": "Outer", +
|
||||||
|
"Parallel Aware": false, +
|
||||||
|
"Async Capable": false, +
|
||||||
|
"Relation Name": "xmldata", +
|
||||||
|
"Schema": "public", +
|
||||||
|
"Alias": "xmldata", +
|
||||||
|
"Output": ["xmldata.data"] +
|
||||||
|
}, +
|
||||||
|
{ +
|
||||||
|
"Node Type": "Table Function Scan", +
|
||||||
|
"Parent Relationship": "Inner", +
|
||||||
|
"Parallel Aware": false, +
|
||||||
|
"Async Capable": false, +
|
||||||
|
"Table Function Name": "xmltable", +
|
||||||
|
"Alias": "f", +
|
||||||
|
"Output": ["f.\"COUNTRY_NAME\"", "f.\"REGION_ID\""], +
|
||||||
|
"Table Function Call": "XMLTABLE(('/ROWS/ROW[COUNTRY_NAME=\"Japan\" or COUNTRY_NAME=\"India\"]'::text) PASSING (xmldata.data) COLUMNS \"COUNTRY_NAME\" text, \"REGION_ID\" integer)",+
|
||||||
|
"Filter": "(f.\"COUNTRY_NAME\" = 'Japan'::text)" +
|
||||||
|
} +
|
||||||
|
] +
|
||||||
|
} +
|
||||||
|
} +
|
||||||
|
]
|
||||||
|
(1 row)
|
||||||
|
|
||||||
-- should to work with more data
|
-- should to work with more data
|
||||||
INSERT INTO xmldata VALUES('<ROWS>
|
INSERT INTO xmldata VALUES('<ROWS>
|
||||||
<ROW id="10">
|
<ROW id="10">
|
||||||
|
@ -505,7 +505,10 @@ SELECT xmltable.*
|
|||||||
SELECT xmltable.* FROM xmldata, LATERAL xmltable('/ROWS/ROW[COUNTRY_NAME="Japan" or COUNTRY_NAME="India"]' PASSING data COLUMNS "COUNTRY_NAME" text, "REGION_ID" int) WHERE "COUNTRY_NAME" = 'Japan';
|
SELECT xmltable.* FROM xmldata, LATERAL xmltable('/ROWS/ROW[COUNTRY_NAME="Japan" or COUNTRY_NAME="India"]' PASSING data COLUMNS "COUNTRY_NAME" text, "REGION_ID" int) WHERE "COUNTRY_NAME" = 'Japan';
|
||||||
|
|
||||||
EXPLAIN (VERBOSE, COSTS OFF)
|
EXPLAIN (VERBOSE, COSTS OFF)
|
||||||
SELECT xmltable.* FROM xmldata, LATERAL xmltable('/ROWS/ROW[COUNTRY_NAME="Japan" or COUNTRY_NAME="India"]' PASSING data COLUMNS "COUNTRY_NAME" text, "REGION_ID" int) WHERE "COUNTRY_NAME" = 'Japan';
|
SELECT f.* FROM xmldata, LATERAL xmltable('/ROWS/ROW[COUNTRY_NAME="Japan" or COUNTRY_NAME="India"]' PASSING data COLUMNS "COUNTRY_NAME" text, "REGION_ID" int) AS f WHERE "COUNTRY_NAME" = 'Japan';
|
||||||
|
|
||||||
|
EXPLAIN (VERBOSE, FORMAT JSON, COSTS OFF)
|
||||||
|
SELECT f.* FROM xmldata, LATERAL xmltable('/ROWS/ROW[COUNTRY_NAME="Japan" or COUNTRY_NAME="India"]' PASSING data COLUMNS "COUNTRY_NAME" text, "REGION_ID" int) AS f WHERE "COUNTRY_NAME" = 'Japan';
|
||||||
|
|
||||||
-- should to work with more data
|
-- should to work with more data
|
||||||
INSERT INTO xmldata VALUES('<ROWS>
|
INSERT INTO xmldata VALUES('<ROWS>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user