mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-08-21 22:44:08 +00:00
Add support for XMLTABLE
(#1817)
This commit is contained in:
parent
3ec80e187d
commit
945f8e0534
6 changed files with 327 additions and 1 deletions
|
@ -11741,6 +11741,44 @@ fn test_group_by_grouping_sets() {
|
|||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_xmltable() {
|
||||
all_dialects()
|
||||
.verified_only_select("SELECT * FROM XMLTABLE('/root' PASSING data COLUMNS element TEXT)");
|
||||
|
||||
// Minimal meaningful working example: returns a single row with a single column named y containing the value z
|
||||
all_dialects().verified_only_select(
|
||||
"SELECT y FROM XMLTABLE('/X' PASSING '<X><y>z</y></X>' COLUMNS y TEXT)",
|
||||
);
|
||||
|
||||
// Test using subqueries
|
||||
all_dialects().verified_only_select("SELECT y FROM XMLTABLE((SELECT '/X') PASSING (SELECT CAST('<X><y>z</y></X>' AS xml)) COLUMNS y TEXT PATH (SELECT 'y'))");
|
||||
|
||||
// NOT NULL
|
||||
all_dialects().verified_only_select(
|
||||
"SELECT y FROM XMLTABLE('/X' PASSING '<X></X>' COLUMNS y TEXT NOT NULL)",
|
||||
);
|
||||
|
||||
all_dialects().verified_only_select("SELECT * FROM XMLTABLE('/root/row' PASSING xmldata COLUMNS id INT PATH '@id', name TEXT PATH 'name/text()', value FLOAT PATH 'value')");
|
||||
|
||||
all_dialects().verified_only_select("SELECT * FROM XMLTABLE('//ROWS/ROW' PASSING data COLUMNS row_num FOR ORDINALITY, id INT PATH '@id', name TEXT PATH 'NAME' DEFAULT 'unnamed')");
|
||||
|
||||
// Example from https://www.postgresql.org/docs/15/functions-xml.html#FUNCTIONS-XML-PROCESSING
|
||||
all_dialects().verified_only_select(
|
||||
"SELECT xmltable.* FROM xmldata, XMLTABLE('//ROWS/ROW' PASSING data COLUMNS id INT PATH '@id', ordinality FOR ORDINALITY, \"COUNTRY_NAME\" TEXT, country_id TEXT PATH 'COUNTRY_ID', size_sq_km FLOAT PATH 'SIZE[@unit = \"sq_km\"]', size_other TEXT PATH 'concat(SIZE[@unit!=\"sq_km\"], \" \", SIZE[@unit!=\"sq_km\"]/@unit)', premier_name TEXT PATH 'PREMIER_NAME' DEFAULT 'not specified')"
|
||||
);
|
||||
|
||||
// Example from DB2 docs without explicit PASSING clause: https://www.ibm.com/docs/en/db2/12.1.0?topic=xquery-simple-column-name-passing-xmlexists-xmlquery-xmltable
|
||||
all_dialects().verified_only_select(
|
||||
"SELECT X.* FROM T1, XMLTABLE('$CUSTLIST/customers/customerinfo' COLUMNS \"Cid\" BIGINT PATH '@Cid', \"Info\" XML PATH 'document{.}', \"History\" XML PATH 'NULL') AS X"
|
||||
);
|
||||
|
||||
// Example from PostgreSQL with XMLNAMESPACES
|
||||
all_dialects().verified_only_select(
|
||||
"SELECT xmltable.* FROM XMLTABLE(XMLNAMESPACES('http://example.com/myns' AS x, 'http://example.com/b' AS \"B\"), '/x:example/x:item' PASSING (SELECT data FROM xmldata) COLUMNS foo INT PATH '@foo', bar INT PATH '@B:bar')"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_match_recognize() {
|
||||
use MatchRecognizePattern::*;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue