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)
|
||||
|
||||
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
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
Nested Loop
|
||||
Output: "xmltable"."COUNTRY_NAME", "xmltable"."REGION_ID"
|
||||
Output: f."COUNTRY_NAME", f."REGION_ID"
|
||||
-> Seq Scan on public.xmldata
|
||||
Output: xmldata.data
|
||||
-> Table Function Scan on "xmltable"
|
||||
Output: "xmltable"."COUNTRY_NAME", "xmltable"."REGION_ID"
|
||||
-> Table Function Scan on "xmltable" 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: ("xmltable"."COUNTRY_NAME" = 'Japan'::text)
|
||||
Filter: (f."COUNTRY_NAME" = 'Japan'::text)
|
||||
(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
|
||||
INSERT INTO xmldata VALUES('<ROWS>
|
||||
<ROW id="10">
|
||||
|
@ -1174,19 +1174,60 @@ SELECT xmltable.* FROM xmldata, LATERAL xmltable('/ROWS/ROW[COUNTRY_NAME="Japan"
|
||||
(0 rows)
|
||||
|
||||
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
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
Nested Loop
|
||||
Output: "xmltable"."COUNTRY_NAME", "xmltable"."REGION_ID"
|
||||
Output: f."COUNTRY_NAME", f."REGION_ID"
|
||||
-> Seq Scan on public.xmldata
|
||||
Output: xmldata.data
|
||||
-> Table Function Scan on "xmltable"
|
||||
Output: "xmltable"."COUNTRY_NAME", "xmltable"."REGION_ID"
|
||||
-> Table Function Scan on "xmltable" 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: ("xmltable"."COUNTRY_NAME" = 'Japan'::text)
|
||||
Filter: (f."COUNTRY_NAME" = 'Japan'::text)
|
||||
(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
|
||||
INSERT INTO xmldata VALUES('<ROWS>
|
||||
<ROW id="10">
|
||||
|
@ -1529,19 +1529,60 @@ SELECT xmltable.* FROM xmldata, LATERAL xmltable('/ROWS/ROW[COUNTRY_NAME="Japan"
|
||||
(1 row)
|
||||
|
||||
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
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
Nested Loop
|
||||
Output: "xmltable"."COUNTRY_NAME", "xmltable"."REGION_ID"
|
||||
Output: f."COUNTRY_NAME", f."REGION_ID"
|
||||
-> Seq Scan on public.xmldata
|
||||
Output: xmldata.data
|
||||
-> Table Function Scan on "xmltable"
|
||||
Output: "xmltable"."COUNTRY_NAME", "xmltable"."REGION_ID"
|
||||
-> Table Function Scan on "xmltable" 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: ("xmltable"."COUNTRY_NAME" = 'Japan'::text)
|
||||
Filter: (f."COUNTRY_NAME" = 'Japan'::text)
|
||||
(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
|
||||
INSERT INTO xmldata VALUES('<ROWS>
|
||||
<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';
|
||||
|
||||
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
|
||||
INSERT INTO xmldata VALUES('<ROWS>
|
||||
|
Loading…
x
Reference in New Issue
Block a user