1(: 2 HashJoin 3:) 4 5let $auction := doc("auction.xml") return 6 7for $p in $auction/site/people/person 8let $a := 9 for $t in $auction/site/closed_auctions/closed_auction 10 where xs:string($t/buyer/@person) eq xs:string($p/@id) 11 return $t 12return <item person="{$p/name/text()}">{count($a)}</item> 13 14(: 15 16HOIST --> HASHJOIN 17 18flwor_expr 19[ 20 LET auction (0x80c6318) 21 [ 22 fn:doc/1 [ const_expr [ auction.xml ] ] 23 ] 24 LET $$opt_temp_0 (0x80cbd38) 25 [ 26 fn::hoist/1 [ relpath_expr [ auction / site/closes_auctions/closed_auction ] ] 27 ] 28RETURN 29 sequential_expr 30 [ 31 op-extensions:create/1 32 [ 33 const_expr [ tempIndex0 ] 34 ] 35 sequential_expr 36 [ 37 fn::index-session-opener/1 38 [ 39 const_expr [ tempIndex0 ] 40 ] 41 flwor_expr (0x80aef90) 42 [ 43 FOR $$opt_temp_2 (0x80ae220) AT $$opt_temp_3 (0x80ce608) 44 [ 45 fn::unhoist/1 [ (0x80cbd38) $$opt_temp_0 ] 46 ] 47 RETURN 48 fn::index-builder/3 (0x80aef28) 49 [ 50 const_expr (0x80ce670) [AtomicXQType XS_ANY_URI] [ tempIndex0 ] 51 var kind=FOR (0x80ae220) name=$$opt_temp_2 52 cast_expr [AtomicXQType XS_STRING?] (0x80aee88) [ 53 relpath_expr (0x80aea60) [ 54 var kind=FOR (0x80ae220) name=$$opt_temp_2 55 REL STEP child::match_expr [name_test(buyer)] 56 REL STEP attribute::match_expr [name_test(person)] 57 ] 58 ] 59 ] 60 ] 61 fn::index-session-closer/1 (0x80af050) [ 62 const_expr (0x80aeff8) [AtomicXQType XS_ANY_URI] [ tempIndex0 ] 63 ] 64 ] 65 flwor_expr (0x80d3020) [ 66 FOR (0x80d30d8) [ 67 var kind=FOR (0x80c96d8) name=p type=[NodeXQType anyNode content=[XQType UNTYPED_KIND*]] 68 IN 69 relpath_expr (0x80c9348) [ 70 var kind=LET (0x80c6318) name=auction type=[NodeXQType documentNode? content=[XQType UNTYPED_KIND*]] 71 REL STEP child::match_expr [name_test(site)] 72 REL STEP child::match_expr [name_test(people)] 73 REL STEP child::match_expr [name_test(person)] 74 ] 75 ] 76 LET (0x80ae5e8) [ 77 var kind=LET (0x80ae788) name=$$opt_temp_1 78 := 79 fn::hoist/1 (0x80ae570) [ 80 cast_expr [AtomicXQType XS_STRING?] (0x80ce588) [ 81 relpath_expr (0x80ce358) [ 82 var kind=FOR (0x80c96d8) name=p type=[NodeXQType anyNode content=[XQType UNTYPED_KIND*]] 83 REL STEP attribute::match_expr [name_test(id)] 84 ] 85 ] 86 ] 87 ] 88 RETURN 89 elem_expr (0x80d2d18) [ 90 const_expr (0x80d2ec8) [AtomicXQType XS_QNAME] [ item ] 91 attr_expr (0x80d2cb8) [ 92 const_expr (0x80d2b48) [AtomicXQType XS_QNAME] [ person ] 93 = 94 fn::enclosed-expr/1 (0x80d2c50) [ 95 fn:data/1 (0x80b0fe8) [ 96 relpath_expr (0x80ce1d0) [ 97 var kind=FOR (0x80c96d8) name=p type=[NodeXQType anyNode content=[XQType UNTYPED_KIND*]] 98 REL STEP child::match_expr [name_test(name)] 99 REL STEP child::match_expr [text()] 100 ] 101 ] 102 ] 103 ] 104 fn::enclosed-expr/1 (0x80d2fb8) [ 105 fn:count/1 (0x80d2f50) [ 106 flwor_expr (0x80ce720) [ 107 FOR (0x80ce7b8) [ 108 var kind=FOR (0x80cbc30) name=t type=[NodeXQType anyNode content=[XQType UNTYPED_KIND*]] 109 IN 110 op-extensions:probe-index-point/2 (0x80aee20) [ 111 const_expr (0x80ae1c8) [AtomicXQType XS_ANY_URI] [ tempIndex0 ] 112 fn::unhoist/1 (0x80ae638) [ 113 var kind=LET (0x80ae788) name=$$opt_temp_1 114 ] 115 ] 116 ] 117 RETURN 118 var kind=FOR (0x80cbc30) name=t type=[NodeXQType anyNode content=[XQType UNTYPED_KIND*]] 119 ] 120 ] 121 ] 122 ] 123 ] 124 ] 125] 126 127 128 129HASHJOIN --> HOIST 130 131 132flwor_expr (0x80c9f18) 133[ 134 forlet (0x80c9fb0) 135 [ 136 var kind=LET (0x80bd1d0) name=auction type=[documentNode? content=[EMPTY_KIND?]] 137 := 138 fn:doc/1 (0x80bd2c8) [ const_expr (0x80ad410) [XS_STRING] [ auction.xml ] ] 139 ] 140RETURN 141 fn::concatenate/3 (0x80a6460) 142 [ 143 op-extensions:create/1 (0x80a3fe8) [ 144 const_expr (0x80a5a20) [AtomicXQType XS_ANY_URI] [ tempIndex0 ] 145 ] 146 147 sequential_expr (0x80a70e8) 148 [ 149 fn::index-session-opener/1 (0x80a6930) [ 150 const_expr (0x80a68d8) [AtomicXQType XS_ANY_URI] [ tempIndex0 ] 151 ] 152 153 flwor_expr (0x80a6f90) 154 [ 155 forlet (0x80c9b88) 156 [ 157 var kind=FOR (0x80a6b88) name=$$opt_temp_0 AT 158 var kind=POS (0x80a6bf0) name=$$opt_temp_1 159 IN 160 relpath_expr (0x80a6998) 161 [ 162 var kind=LET (0x80bd1d0) name=auction type=[documentNode? ] 163 REL STEP child::match_expr [name_test(site)] 164 REL STEP child::match_expr [name_test(closed_auctions)] 165 REL STEP child::match_expr [name_test(closed_auction)] 166 ] 167 ] 168 RETURN 169 fn::index-builder/3 (0x80a6f28) 170 [ 171 const_expr (0x80a6c58) [AtomicXQType XS_ANY_URI] [ tempIndex0 ] 172 var kind=FOR (0x80a6b88) name=$$opt_temp_0 173 cast_expr [AtomicXQType XS_STRING?] (0x80a6e90) 174 [ 175 relpath_expr (0x80a6d08) 176 [ 177 var kind=FOR (0x80a6b88) name=$$opt_temp_0 178 REL STEP child::match_expr [name_test(buyer)] 179 REL STEP attribute::match_expr [name_test(person)] 180 ] 181 ] 182 ] 183 ] 184 185 fn::index-session-closer/1 (0x80a7080) [ 186 const_expr (0x80a7028) [AtomicXQType XS_ANY_URI] [ tempIndex0 ] 187 ] 188 ] 189 190 flwor_expr (0x80c9e48) 191 [ 192 forlet (0x80c9ee0) 193 [ 194 var kind=FOR (0x80c0560) name=p type=[anyNode content=[EMPTY_KIND?]] 195 IN 196 relpath_expr (0x80c01b8) 197 [ 198 var kind=LET (0x80bd1d0) name=auction type=[documentNode? content=[EMPTY_KIND?]] 199 REL STEP child::match_expr [name_test(site)] 200 REL STEP child::match_expr [name_test(people)] 201 REL STEP child::match_expr [name_test(person)] 202 ] 203 ] 204 RETURN 205 elem_expr (0x80c9b20) 206 [ 207 const_expr (0x80c9cf0) [AtomicXQType XS_QNAME] [ item ] 208 attr_expr (0x80c9ac0) 209 [ 210 const_expr (0x80c9950) [AtomicXQType XS_QNAME] [ person ] 211 = 212 fn::enclosed-expr/1 (0x80c9a40) 213 [ 214 fn:data/1 (0x80abdb0) 215 [ 216 relpath_expr (0x80c9648) 217 [ 218 var kind=FOR (0x80c0560) name=p type=[anyNode content=[EMPTY_KIND?]] 219 REL STEP child::match_expr [name_test(name)] 220 REL STEP child::match_expr [text()] 221 ] 222 ] 223 ] 224 ] 225 fn::enclosed-expr/1 (0x80c9de0) 226 [ 227 fn:count/1 (0x80c9d78) 228 [ 229 flwor_expr (0x80c5470) 230 [ 231 forlet (0x80c4d10) 232 [ 233 var kind=FOR (0x80c2ac8) name=t type=[anyNode content=[EMPTY_KIND?]] 234 IN 235 op-extensions:probe-index-point/2 (0x80a6510) 236 [ 237 const_expr (0x80a5a20) [AtomicXQType XS_ANY_URI] [ tempIndex0 ] 238 promote_expr [AtomicXQType XS_ANY_ATOMIC?] (0x8098800) 239 [ 240 fn:data/1 (0x8098798) 241 [ 242 relpath_expr (0x80c5180) 243 [ 244 var kind=FOR (0x80c0560) name=p type=[anyNode content=[EMPTY_KIND?]] 245 REL STEP attribute::match_expr [name_test(id)] 246 ] 247 ] 248 ] 249 ] 250 ] 251 RETURN 252 var kind=FOR (0x80c2ac8) name=t type=[anyNode content=[EMPTY_KIND?]] 253 ] 254 ] 255 ] 256 ] 257 ] 258 ] 259] 260 261 262 263:) 264