|
Implementations | ||||||||||||||||
Tests | BaseX 7.7 XQ30 |
EMC/xDB xDB_main_r2411365 XQ30 |
Saxon-EE 9.5.1.1 XP20 |
Saxon-EE 9.5.1.1 XQ10 |
Saxon-EE 9.5.1.1 XP30 |
Saxon-EE 9.5.1.1 XQ30 |
Saxon-EE 9.5.1.4 XQX30 (QT3 v1.1) |
XmlPrime 3.0.0.0 XP30 (QT3 vCVS) |
XmlPrime 3.0.0.0 XQ30 (QT3 vCVS) |
XmlPrime 3.0.0.0 XQX30 (QT3 vCVS) |
XmlPrime 3.0.0.0 XP20 (QT3 vCVS) |
XmlPrime 3.0.0.0 XQX10 (QT3 vCVS) |
XmlPrime 3.0.0.0 XQ10 (QT3 vCVS) |
Zorba 2.9 XQ10 (QT3 vCVS) |
Zorba 2.9 XQ30 (QT3 vCVS) |
|
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
prod-GroupByClause* | 28/28 | 26/26 | 0/0 | 0/0 | 0/0 | 28/28 | 28/28 | 0/0 | 28/28 | 28/28 | 0/0 | 0/0 | 0/0 | 0/0 | 28/28 | 2/15 |
group-001[+]
X group-001: for $x in 1 to 100 let $key := $x mod 10 group by $key return string(text{$x}) |
pass | pass | pass | n/a
notXP20 |
n/a
notXQ10 |
n/a
notXP30 |
pass | n/a | pass | pass | n/a | n/a | n/a | n/a
Dependency (type=spec, value=XQ30+, satisfied=true) was not met. |
pass | |
group-001a[+]
X group-001a: for $x in 1 to 100 group by $key := $x mod 10 return string(text{$x}) |
pass | pass | pass | n/a
notXP20 |
n/a
notXQ10 |
n/a
notXP30 |
pass | n/a | pass | pass | n/a | n/a | n/a | n/a
Dependency (type=spec, value=XQ30+, satisfied=true) was not met. |
pass | |
group-002[+]
X group-002: for $x in //employee let $key := $x/@gender group by $key return concat($key, ':', string-join(for $e in $x return $e/@name/string(), ',')) |
pass | pass | pass | n/a
notXP20 |
n/a
notXQ10 |
n/a
notXP30 |
pass | n/a | pass | pass | n/a | n/a | n/a | n/a
Dependency (type=spec, value=XQ30+, satisfied=true) was not met. |
pass | |
group-002a[+]
X group-002a: for $x in //employee group by $key := $x/@gender return concat($key, ':', string-join(for $e in $x return $e/@name/string(), ',')) |
pass | pass | pass | n/a
notXP20 |
n/a
notXQ10 |
n/a
notXP30 |
pass | n/a | pass | pass | n/a | n/a | n/a | n/a
Dependency (type=spec, value=XQ30+, satisfied=true) was not met. |
pass | |
group-003[+]
X group-003: for $x in //employee let $key := ($x/@gender = 'male') group by $key return concat($key, ':', string-join(for $e in $x return $e/@name/string(), ',')) |
pass | pass | pass | n/a
notXP20 |
n/a
notXQ10 |
n/a
notXP30 |
pass | n/a | pass | pass | n/a | n/a | n/a | n/a
Dependency (type=spec, value=XQ30+, satisfied=true) was not met. |
pass | |
group-003a[+]
X group-003a: for $x in //employee group by $key := ($x/@gender = 'male') return concat($key, ':', string-join(for $e in $x return $e/@name/string(), ',')) |
pass | pass | pass | n/a
notXP20 |
n/a
notXQ10 |
n/a
notXP30 |
pass | n/a | pass | pass | n/a | n/a | n/a | n/a
Dependency (type=spec, value=XQ30+, satisfied=true) was not met. |
pass | |
group-004[+]
X group-004: for $x in //employee let $key := $x/@gender group by $key return concat($key, ':', avg($x/hours)) |
pass | pass | pass | n/a
notXP20 |
n/a
notXQ10 |
n/a
notXP30 |
pass | n/a | pass | pass | n/a | n/a | n/a | n/a
Dependency (type=spec, value=XQ30+, satisfied=true) was not met. |
pass | |
group-005[+]
X group-005: for $x in //employee let $key := $x/hours group by $key return <group hours="{$key}" avHours="{avg($x/hours)}"/> |
pass | pass | pass | n/a
notXP20 |
n/a
notXQ10 |
n/a
notXP30 |
pass | n/a | pass | pass | n/a | n/a | n/a | n/a
Dependency (type=spec, value=XQ30+, satisfied=true) was not met. |
pass | |
group-006[+]
X group-006: <out>{ for $x in //employee group by $key := $x/status return <group status="{$key}" count="{count($x)}"/> }</out> |
pass | pass | pass | n/a
notXP20 |
n/a
notXQ10 |
n/a
notXP30 |
pass | n/a | pass | pass | n/a | n/a | n/a | n/a
Dependency (type=spec, value=XQ30+, satisfied=true) was not met. |
pass | |
group-007[+]
X group-007: for $x in //employee let $key := $x/hours[1] group by $key where count($x) gt 2 return concat($key, ':', count($x)) |
pass | pass | pass | n/a
notXP20 |
n/a
notXQ10 |
n/a
notXP30 |
pass | n/a | pass | pass | n/a | n/a | n/a | n/a
Dependency (type=spec, value=XQ30+, satisfied=true) was not met. |
pass | |
group-008[+]
X group-008: <out>{ for $x in //employee let $key := $x/empnum group by $key order by count($x), $key return <group count="{count($x)}"> {string-join($x/@name, '|')} </group> }</out> |
pass | pass | pass | n/a
notXP20 |
n/a
notXQ10 |
n/a
notXP30 |
pass | n/a | pass | pass | n/a | n/a | n/a | n/a
Dependency (type=spec, value=XQ30+, satisfied=true) was not met. |
pass | |
group-009[+]
X group-009: <out>{ for $x in //employee let $key := $x/empnum group by $key collation "http://www.w3.org/2005/xpath-functions/collation/codepoint" order by $key return <group count="{count($x)}" key="{$key}"> {string-join($x/pnum, '|')} </group> }</out> |
pass | pass | pass | n/a
notXP20 |
n/a
notXQ10 |
n/a
notXP30 |
pass | n/a | pass | pass | n/a | n/a | n/a | n/a
Dependency (type=spec, value=XQ30+, satisfied=true) was not met. |
pass | |
group-009a[+]
X group-009a: <out>{ for $x in //employee group by $key := $x/empnum collation "http://www.w3.org/2005/xpath-functions/collation/codepoint" order by $key return <group count="{count($x)}" key="{$key}"> {string-join($x/pnum, '|')} </group> }</out> |
pass | pass | pass | n/a
notXP20 |
n/a
notXQ10 |
n/a
notXP30 |
pass | n/a | pass | pass | n/a | n/a | n/a | n/a
Dependency (type=spec, value=XQ30+, satisfied=true) was not met. |
pass | |
group-010[+]
X group-010: <out>{ for $x in //employee let $key := if ($x/@gender='male') then number('NaN') else 42 group by $key return <group key="{$key}" count="{count($x)}"/> }</out> |
pass | pass | pass | n/a
notXP20 |
n/a
notXQ10 |
n/a
notXP30 |
pass | n/a | pass | pass | n/a | n/a | n/a | n/a
Dependency (type=spec, value=XQ30+, satisfied=true) was not met. |
pass | |
group-011[+]
X group-011: for $a at $p in 1 to 10 let $g := $p mod 2 group by $g return string-join($p!string(), ' ') |
pass | pass | pass | n/a
notXP20 |
n/a
notXQ10 |
n/a
notXP30 |
pass | n/a | pass | pass | n/a | n/a | n/a | n/a
Dependency (type=spec, value=XQ30+, satisfied=true) was not met. |
pass | |
group-012[+]
X group-012: <out>{ for $x in //employee[age > 300] let $key := @gender group by $key return <group gender="{$key}"> { for $e in $x return <person>{$e/@name/string()}</person> } </group> }</out> |
pass | pass | pass | n/a
notXP20 |
n/a
notXQ10 |
n/a
notXP30 |
pass | n/a | pass | pass | n/a | n/a | n/a | n/a
Dependency (type=spec, value=XQ30+, satisfied=true) was not met. |
pass | |
group-013[+]
X group-013: for $x in 1 to 10, $y in 1 to 4 let $org_y := $y group by $y, $y := $x mod 2 return <grp y="{$org_y[1]}" even="{$y}">{$x}</grp> |
pass | pass | pass | n/a
notXP20 |
n/a
notXQ10 |
n/a
notXP30 |
pass | n/a | pass | pass | n/a | n/a | n/a | n/a
Dependency (type=spec, value=XQ30+, satisfied=true) was not met. |
pass | |
group-014[+]
X group-014: let $x := 1 return for $i in ("a", "b") group by $x return ($x, count($i)) |
pass | pass | pass | n/a
notXP20 |
n/a
notXQ10 |
n/a
notXP30 |
pass | n/a | pass | pass | n/a | n/a | n/a | n/a
Dependency (type=spec, value=XQ30+, satisfied=true) was not met. |
pass | |
group-015[+]
X group-015: for $x in (true(), "true", xs:QName("true")) group by $x return $x |
pass | pass | pass | n/a
notXP20 |
n/a
notXQ10 |
n/a
notXP30 |
pass | n/a | pass | pass | n/a | n/a | n/a | n/a
Dependency (type=spec, value=XQ30+, satisfied=true) was not met. |
pass | |
group-016[+]
X group-016: count( for $y in 1 to 10 group by $y := $y, $y := $y mod 2 return $y ) |
pass | pass | pass | n/a
notXP20 |
n/a
notXQ10 |
n/a
notXP30 |
pass | n/a | pass | pass | n/a | n/a | n/a | n/a
Dependency (type=spec, value=XQ30+, satisfied=true) was not met. |
pass | |
use-case-groupby-Q1[+]
X use-case-groupby-Q1: <sales-qty-by-product>{ for $sales in $sales-records-doc/*/record let $pname := $sales/product-name group by $pname order by $pname return <product name="{$pname}">{ sum($sales/qty) }</product> }</sales-qty-by-product> |
pass | pass | pass | n/a
notXP20 |
n/a
notXQ10 |
n/a
notXP30 |
pass | n/a | pass | pass | n/a | n/a | n/a | n/a
Dependency (type=spec, value=XQ30+, satisfied=true) was not met. Dependency (type=spec, value=XQ30+, satisfied=true) was not met. |
pass | |
use-case-groupby-Q2[+]
X use-case-groupby-Q2: <result>{ for $sales in $sales-records-doc/*/record let $state := $stores-doc/*/store[store-number = $sales/store-number]/state let $category := $products-doc/*/product[name = $sales/product-name]/category group by $state, $category order by $state, $category return <group> <state>{$state}</state> <category>{$category}</category> <total-qty>{sum($sales/qty)}</total-qty> </group> }</result> |
pass | disputed | pass | n/a
notXP20 |
n/a
notXQ10 |
n/a
notXP30 |
pass | n/a | pass | pass | n/a | n/a | n/a | n/a
Dependency (type=spec, value=XQ30+, satisfied=true) was not met. Dependency (type=spec, value=XQ30+, satisfied=true) was not met. |
pass | |
use-case-groupby-Q3[+]
X use-case-groupby-Q3: <result>{ for $sales in $sales-records-doc/*/record let $state := $stores-doc/*/store[store-number = $sales/store-number]/state, $product := $products-doc/*/product[name = $sales/product-name], $category := $product/category, $revenue := $sales/qty * $product/price group by $state, $category order by $state, $category return <group> <state>{$state}</state> <category>{$category}</category> <total-revenue>{sum($revenue)}</total-revenue> </group> }</result> |
pass | disputed | pass | n/a
notXP20 |
n/a
notXQ10 |
n/a
notXP30 |
pass | n/a | pass | pass | n/a | n/a | n/a | n/a
Dependency (type=spec, value=XQ30+, satisfied=true) was not met. Dependency (type=spec, value=XQ30+, satisfied=true) was not met. |
pass | |
use-case-groupby-Q4[+]
X use-case-groupby-Q4: <result>{ for $store in $stores-doc/*/store let $state := $store/state group by $state order by $state return <state name="{$state}">{ for $product in $products-doc/*/product let $category := $product/category group by $category order by $category return <category name="{$category}">{ for $sales in $sales-records-doc/*/record[store-number = $store/store-number and product-name = $product/name] let $pname := $sales/product-name group by $pname order by $pname return <product name="{$pname}" total-qty="{sum($sales/qty)}" /> }</category> }</state> }</result> |
pass | pass | pass | n/a
notXP20 |
n/a
notXQ10 |
n/a
notXP30 |
pass | n/a | pass | pass | n/a | n/a | n/a | n/a
Dependency (type=spec, value=XQ30+, satisfied=true) was not met. Dependency (type=spec, value=XQ30+, satisfied=true) was not met. |
pass | |
use-case-groupby-Q5[+]
X use-case-groupby-Q5: <result>{ for $sales in $sales-records-doc/*/record let $storeno := $sales/store-number group by $storeno order by $storeno return <store number = "{$storeno}">{ for $s in $sales order by xs:int($s/qty) descending return <product name = "{$s/product-name}" qty = "{$s/qty}"/> }</store> }</result> |
pass | pass | pass | n/a
notXP20 |
n/a
notXQ10 |
n/a
notXP30 |
pass | n/a | pass | pass | n/a | n/a | n/a | n/a
Dependency (type=spec, value=XQ30+, satisfied=true) was not met. Dependency (type=spec, value=XQ30+, satisfied=true) was not met. |
pass | |
use-case-groupby-Q6[+]
X use-case-groupby-Q6: <result>{ for $sales in $sales-records-doc/*/record let $storeno := $sales/store-number, $product := $products-doc/*/product[name = $sales/product-name], $prd := $product, $profit := $sales/qty * ($prd/price - $prd/cost) group by $storeno let $total-store-profit := sum($profit) where $total-store-profit > 100 order by $total-store-profit descending return <store number = "{$storeno}" total-profit = "{$total-store-profit}"/> }</result> |
pass | pass | pass | n/a
notXP20 |
n/a
notXQ10 |
n/a
notXP30 |
pass | n/a | pass | pass | n/a | n/a | n/a | n/a
Dependency (type=spec, value=XQ30+, satisfied=true) was not met. Dependency (type=spec, value=XQ30+, satisfied=true) was not met. |
pass | |
use-case-groupby-Q7[+]
X use-case-groupby-Q7: <result>{ for $book in $books-doc/*/book for $author in $book/author group by $author order by $author return <author name="{$author}">{ for $b in $book order by $b/title return <title> {fn:data($b/title)} </title> }</author> }</result> |
pass | pass | pass | n/a
notXP20 |
n/a
notXQ10 |
n/a
notXP30 |
pass | n/a | pass | pass | n/a | n/a | n/a | n/a
Dependency (type=spec, value=XQ30+, satisfied=true) was not met. Dependency (type=spec, value=XQ30+, satisfied=true) was not met. |
pass | |
use-case-groupby-Q8[+]
X use-case-groupby-Q8: <result>{ for $book in $books-doc/*/book let $author-list := fn:string-join($book/author, ', ') group by $author-list order by $author-list return <author-list names="{$author-list}">{ for $b in $book order by $b/title return <title> {fn:data($b/title)} </title> }</author-list> }</result> |
pass | pass | pass | n/a
notXP20 |
n/a
notXQ10 |
n/a
notXP30 |
pass | n/a | pass | pass | n/a | n/a | n/a | n/a
Dependency (type=spec, value=XQ30+, satisfied=true) was not met. Dependency (type=spec, value=XQ30+, satisfied=true) was not met. |
pass |