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