TPC-W (MCT, Shallow, Deep, respectively) {blue}customer-order-orderline {purple}billing address-order-orderline {red}shipping address-order-orderline {green}date-order-orderline {yellow}author-item-orderline TQ1 Return the customer id of the order that has matching id attribute value (1). For $a in //{blue}customer//{blue}order[@id="1"] Return createColor(black, {$a/@id}) For $a in //customer//order[@id="1"] Return {$a/@id} For $a in //customer//order[@id="1"] Return {$a/@id} TQ2 Group orders with total amount bigger than a certain number (11000.0), by customer id, display user_name and calculate the total number of each group. For $a in //{blue}customer Let $b := $a//{blue}order[{blue}total > 11000.00] Where count($b) > 0 Return createColor(black, {$a/@id} {$a/{blue}user_name/text()} {count($b)} ) For $a in //customer Let $b := $a//order[total > 11000.00] Where count($b) > 0 Return {$a/@id} {$a/{blue}user_name/text()} {count($b)} For $a in //customer Let $b := $a//order[total > 11000.00] Where count($b) > 0 Return {$a/@id} {$a/{blue}user_name/text()} {count($b)} TQ3 Return the order line item ids of an order with an attribute value (3). For $a in //{blue}order[@id="3"]//{blue}order_line, $b in //{yellow}item[//{yellow}order_line = $a] Return createColor(black, {$b/@id}) For $a in //order[@id="3"] $b in //item Where $a//order_line/@item_idref = $b/@id Return {$b/@id} For $a in //order[@id="3"] Return {$a//order_line/item/@id} TQ4 List the orders (order id, ship type), with total amount larger than a certain number (11000.0), ordered alphabetically by ship type. For $a in //{blue}order [{blue}total > 11000.00] Order by $a/{blue}ship_type Return createColor(black, {$a/@id} {$a/{blue}ship_type} ) For $a in //order [total > 11000.00] Order by $a/ship_type Return {$a/@id} {$a/ship_type} For $a in //order [total > 11000.00] Order by $a/ship_type Return {$a/@id} {$a/ship_type} TQ5 List all order lines of a certain order with id attribute value (5). For $a in //{blue}order[@id="5"] Return createColor(black, {$a//{blue}order_line} ) For $a in //order[@id="5"] Return {$a//order_line} For $a in //order[@id="5"] Return {$a//order_line} TQ6 List the ids of orders that only have one order line. For $a in //{blue}order Where empty($a/{blue}order_lines/{blue}order_line[2]) Return createColor(black, {$a/@id}) For $a in //order Where empty($a/order_lines/order_line[2]) Return {$a/@id} For $a in //order Where empty($a/order_lines/order_line[2]) Return {$a/@id} TQ7 Return the ids of authors whose biographies contain a certain word (``hockey"). For $a in //{yellow}author Where contains ($a/{yellow}biography,"hockey") Return createColor(black, {$a/@id}) For $a in //author Where contains ($a/biography,"hockey") Return {$a/@id} For $a in //author Where contains ($a/biography,"hockey") Return {distinct-values($a/@id)} TQ8 For a particular order with id attribute value (7), get its customer name and phone, and its order status. For $a in //{blue}order[@id="7"], $b in //{blue}customer Where some($b//{blue}order = $a) Return createColor(black, {$b/{blue}first_name} {$b/{blue}last_name} {$b/{blue}phone_number} {$a/{blue}order_status} ) For $a in //order[@id="7"], $b in //customer Where some($b//order = $a) Return {$b/first_name} {$b/last_name} {$b/phone_number} {$a/order_status} For $a in //order[@id="7"], $b in //customer Where some($b//order = $a) Return {$b/first_name} {$b/last_name} {$b/phone_number} {$a/order_status} TQ9 List all item ids with quantity ordered each time less than 20. For $a in //{blue}item[{blue}order_line/{blue}quantity_of_item < 20] Return createColor(black, {distinct-values($a/@id)}) For $a in //item, $b in //order_line[quantity_of_item < 20] Where $a/@id = $b/@item_idref Return {distinct-values($a/@id)} For $a in //order_line[quantity_of_item < 20]/item Return {distinct-values($a/@id)} TQ10 Return customers where shipping address is in Canada and that some of the order's order_status is "PENDING". For $a in //{blue}customer, $b in $a//{blue}order, $b in //{red}country[{red}name"Canada"]//{red}shipping_addresses/{red}address//{red}order Where $b/{red}order_status = "PENDING" Return createColor(black {distinct-values($a)}) For $a in //customer, $o in $a//order, $b in //country[name="Canada"]//address Where $o/@shipaddr_idref = $b/@id and $o/order_status = "PENDING" Return {distinct-values($a)} For $a in //customer, $b in $a//order Where $b/order_status = "PENDING" and $b/ship_address/country/name = "Canada" Return {distinct-values($a)} TQ11 Return order ids that have shipping address in the city of "Honolulu". For $a in //{red}shipping_addresses/{red}address[{red}name_of_city = "Honolulu]//{red}order Return createColor(black, {distinct-values($a/@id)}) For $a in //order $b in //address[name_of_city = "Honolulu"] Where $a/@shipaddr_idref = $b/@id Return {distinct-values($a/@id)} For $a in //order[ship_address/name_of_city = "Honolulu"] Return {distinct-values($a/@id)} TQ12 Return cost of item that has ISBN = 1ZKUVJGIDBQJLE (item1). For $c in //{yellow}item[{yellow}ISBN = "1ZKUVJGIDBQJLE"] Return createColor(black, {$c/cost}) For $c in //item[ISBN = "1ZKUVJGIDBQJLE"] Return {$c/cost} For $c in //item[ISBN = "1ZKUVJGIDBQJLE"] Return {$c/cost} TQ13 Return orders in year 2002 that is SHIPPED (order_status). For $a in //{green}year[ = 2002]//{green}order[{green}order_status = "SHIPPED"] Return createColor(black, {$a}) For $a in //order [order_status = "SHIPPED"], $b in //year [ = 2002] Where $a/@time_idref = $b//day/@id Return {$a} For $a in distinct-values(//order[order_status = "SHIPPED" and //year = 2002]) Return {$a} TQ14 Return orders in year December 2002 that is SHIPPED (order_status). For $a in //{green}year [ = 2002]//{green}month [ = 12] //{green}order[{green}order_status = "SHIPPED"] Return createColor(black, {$a}) For $a in //order [order_status = "SHIPPED"], $b in //year [ = 2002]//month [ = 12] Where $a/@time_idref = $b//day/@id Return {$a} For $a in distinct-values(//order[order_status = "SHIPPED" and //year = 2002 and //month = 12]) Return {$a} TQ15 For each author, count number of order_line that has quantity_of_item ordered each time not more than 2. For $a in //{yellow}author Let $b := $a//{yellow}order_line[{yellow}quantity_of_item <= 2] Return createColor(black, {$a} {count($b)} ) For $a in //author Let $b := //order_line[quantity_of_item <= 2] Where $a/item/@id = $b/@item_idref Return {$a} {count($b)} For $a in //author Let $b := //order_line[quantity_of_item <= 2] Where $b/author = $a Return {$a} {count($b)} TQ16 Return all country name that is the destination of orders, ordered by number of orders from that country. For $a in //{red}country Let $b := $a/{red}shipping_addresses//{red}order Order by count($b) Return createColor(black, {$a/{red}name}) For $a in //country Let $b := //order Where $b/@shipaddr_idref = $a//address/@id Order by count($b) Return {$a/name} For $a in //country Let $b := //order Where $b/ship_address/country = $a Order by count($b) Return {$a/name} TU1 Modify the last name of author id (1) to Doe. For $a in //{yellow}author [@id = "1"] Modify($a/{yellow}last_name/text() = "Doe") For $a in //author [@id = "1"] Modify($a/last_name/text() = "Doe") For $a in //author [@id = "1"] Modify($a/last_name/text() = "Doe") TU2 Modify zip code of an address (id = 444) to 01111. For $a in //{red}address [@id = "444"] Modify($a/{red}zip_code/text() = "01111") For $a in //address [@id = "444"] Modify($a/zip_code/text() = "01111") For $a in //address [@id = "444"] Modify($a/zip_code/text() = "01111") TU3 Modify order_status of today order (11/16/2003) to "SHIPPED". For $a in //{green}year[ = 2003]/{green}month [ = 11]/{green}day [= 16] //{green}order Modify($a/{green}order_status = "SHIPPED") For $a in //order, $b in //year[=2003] /month [ =11] / day [= 16] Where $a/@time_idref = $b/@id Modify($a/order_status = "SHIPPED") For $a in order[year = 2003 and month = 11 and day = 16] Modify($a/order_status = "SHIPPED") TU4 Modify zip_code of billing_address of order id = "1" to "88888". For $a in //{purple}billing_addresses/{purple}address[{purple}order/@id = "1"] Modify($a/{purple}zip_code = "88888") For $a in //order[@id = "1"], $b in //address Where $a/@billaddr_idref = $b/@id Modify($a/zip_code = "88888") For $a in order[@id = "1"]/bill_address Modify($a/zip_code = "88888") SIGMOD Record (MCT, Shallow, Deep, respectively) {blue}date-issue-articles {red}editor-topic-articles SQ1 Display an article with title "Database Compression". For $a in //{blue}article[{blue}title = "Database Compression"] Return createColor(black, {$a}) For $a in //article[title = "Database Compression"] Return {$a} For $a in //article[title = "Database Compression"] Return {$a} SQ2 Return all articles in the topic "Industry Perspectives". For $a in //{red}topic[ = "Industry Perspectives"] Return createColor(black, {$a/{red}article}) For $a in //topic[ = "Industry Perspectives"] $b in //article Where $a/@id = $b/@topic_idref Return {$b} For $a in //topic[ = "Industry Perspectives"] Return {$a/article} SQ3 Return number of articles by topic, for the first editor. For $a in //{red}editor [@id = "e1"]//{red}topic Let $b := $a/{red}article Return createColor(black, {$a/@id} {count($b)} ) For $a in //editor [@id = "e1"]//topic Let $b := //article Where $b/@topic_idref = $a/@id Return {$a/@id} {count($b)} For $id1 in distinct-values(//issue[editor/@id = "e1"]//topic/@id) Let $b := { For $t in //issue[editor/@id = "e1"]//topic $id2 = $t/@id Let $cc : = $t/article Where $id1 = $id2 Return $cc } Return {$id1} {count($b)} SQ4 List all topic names defined by each editor. For $a in //{red}editor Let $b := $a/{red}topic Return createColor(black, {$a} {$b/text()} ) For $a in editor Let $b := $a/topic Return {$a} {$b/text()} For $a in //issue/editor, $id1 in distinct-values($a/@id) Let $b := { For $c in //issue $id2 = $c/editor/@id Let $cc : = $c/topic Where $id1 = $id2 Return $cc } Return {$a} {distinct-values($b/text())} SQ5 Display article title and authors published in year 2002 issue. For $a in //{blue}year[= 2002]//{blue}article Return createColor(black, {$a/{blue}title} {$a/{blue}authors} ) For $a in //year [= 2002] //issue, $b in //article Where $a/@id = $b/@issue_idref Return {$b/title} {$b/authors} For $a in //year[ = 2002]/issue//article Return {$a/title} {$a/authors} SU1 Modify the name of topic from "Reports" to "Database Reports". For $a in //{blue}topic[ = "Reports"] Modify($a/text() = "Database Reports") For $a in //topic[ = "Reports"] Modify($a/text() = "Database Reports") For $a in //topic[ = "Reports"] Modify ($a/text() = "Database Reports") SU2 Modify the name of topic of an article ("Report on the EDBT'02 Panel on Scientific Data Integration") to "Reports" . For $a in //{blue}topic[//{blue}article/{blue}title = "Report on the EDBT'02 Panel on Scientific Data Integration"] Modify($a/text() = "Reports") For $a in //article[title = "Report on the EDBT'02 Panel on Scientific Data Integration"] $b in //topic Where $b/@id = $a/@topic_idref Modify($b/text() = "Reports") For $a in //topic[//article/title = "Report on the EDBT'02 Panel on Scientific Data Integration"] Let $b := //topic Where $b/@id = $a/@id Modify($b/text() = "Reports")