@@ -88,6 +88,233 @@ CREATE TABLE LINEITEM (
88
88
89
89
*/
90
90
91
+ -- TPC-H Q2
92
+ select
93
+ s_acctbal,
94
+ s_name,
95
+ n_name,
96
+ p_partkey,
97
+ p_mfgr,
98
+ s_address,
99
+ s_phone,
100
+ s_comment
101
+ from
102
+ part,
103
+ supplier,
104
+ partsupp,
105
+ nation,
106
+ region
107
+ where
108
+ p_partkey = ps_partkey
109
+ and s_suppkey = ps_suppkey
110
+ and p_size = 4
111
+ and p_type like ' %TIN'
112
+ and s_nationkey = n_nationkey
113
+ and n_regionkey = r_regionkey
114
+ and r_name = ' AFRICA'
115
+ and ps_supplycost = (
116
+ select
117
+ min (ps_supplycost)
118
+ from
119
+ partsupp,
120
+ supplier,
121
+ nation,
122
+ region
123
+ where
124
+ p_partkey = ps_partkey
125
+ and s_suppkey = ps_suppkey
126
+ and s_nationkey = n_nationkey
127
+ and n_regionkey = r_regionkey
128
+ and r_name = ' AFRICA'
129
+ )
130
+ order by
131
+ s_acctbal desc ,
132
+ n_name,
133
+ s_name,
134
+ p_partkey
135
+ limit 100 ;
136
+
137
+ /*
138
+ LogicalLimit { skip: 0, fetch: 100 }
139
+ └── LogicalSort
140
+ ├── exprs:
141
+ │ ┌── SortOrder { order: Desc }
142
+ │ │ └── #0
143
+ │ ├── SortOrder { order: Asc }
144
+ │ │ └── #2
145
+ │ ├── SortOrder { order: Asc }
146
+ │ │ └── #1
147
+ │ └── SortOrder { order: Asc }
148
+ │ └── #3
149
+ └── LogicalProjection { exprs: [ #5, #2, #8, #0, #1, #3, #4, #6 ] }
150
+ └── LogicalJoin
151
+ ├── join_type: Inner
152
+ ├── cond:And
153
+ │ ├── Eq
154
+ │ │ ├── #0
155
+ │ │ └── #10
156
+ │ └── Eq
157
+ │ ├── #7
158
+ │ └── #9
159
+ ├── LogicalProjection { exprs: [ #0, #1, #2, #3, #4, #5, #6, #7, #8 ] }
160
+ │ └── LogicalJoin
161
+ │ ├── join_type: Inner
162
+ │ ├── cond:Eq
163
+ │ │ ├── #9
164
+ │ │ └── #10
165
+ │ ├── LogicalProjection { exprs: [ #0, #1, #2, #3, #5, #6, #7, #8, #10, #11 ] }
166
+ │ │ └── LogicalJoin
167
+ │ │ ├── join_type: Inner
168
+ │ │ ├── cond:Eq
169
+ │ │ │ ├── #4
170
+ │ │ │ └── #9
171
+ │ │ ├── LogicalProjection { exprs: [ #0, #1, #5, #6, #7, #8, #9, #10, #3 ] }
172
+ │ │ │ └── LogicalJoin
173
+ │ │ │ ├── join_type: Inner
174
+ │ │ │ ├── cond:Eq
175
+ │ │ │ │ ├── #2
176
+ │ │ │ │ └── #4
177
+ │ │ │ ├── LogicalProjection { exprs: [ #0, #1, #3, #4 ] }
178
+ │ │ │ │ └── LogicalJoin
179
+ │ │ │ │ ├── join_type: Inner
180
+ │ │ │ │ ├── cond:Eq
181
+ │ │ │ │ │ ├── #0
182
+ │ │ │ │ │ └── #2
183
+ │ │ │ │ ├── LogicalProjection { exprs: [ #0, #1 ] }
184
+ │ │ │ │ │ └── LogicalFilter
185
+ │ │ │ │ │ ├── cond:And
186
+ │ │ │ │ │ │ ├── Eq
187
+ │ │ │ │ │ │ │ ├── #3
188
+ │ │ │ │ │ │ │ └── 4
189
+ │ │ │ │ │ │ └── Like { expr: #2, pattern: "%TIN" }
190
+ │ │ │ │ │ └── LogicalProjection { exprs: [ #0, #2, #4, #5 ] }
191
+ │ │ │ │ │ └── LogicalScan { table: part }
192
+ │ │ │ │ └── LogicalProjection { exprs: [ #0, #1, #3 ] }
193
+ │ │ │ │ └── LogicalScan { table: partsupp }
194
+ │ │ │ └── LogicalProjection { exprs: [ #0, #1, #2, #3, #4, #5, #6 ] }
195
+ │ │ │ └── LogicalScan { table: supplier }
196
+ │ │ └── LogicalProjection { exprs: [ #0, #1, #2 ] }
197
+ │ │ └── LogicalScan { table: nation }
198
+ │ └── LogicalProjection { exprs: [ #0 ] }
199
+ │ └── LogicalFilter
200
+ │ ├── cond:Eq
201
+ │ │ ├── #1
202
+ │ │ └── "AFRICA"
203
+ │ └── LogicalProjection { exprs: [ #0, #1 ] }
204
+ │ └── LogicalScan { table: region }
205
+ └── LogicalProjection { exprs: [ #1, #0 ] }
206
+ └── LogicalAgg
207
+ ├── exprs:Agg(Min)
208
+ │ └── [ #1 ]
209
+ ├── groups: [ #0 ]
210
+ └── LogicalProjection { exprs: [ #0, #1 ] }
211
+ └── LogicalJoin
212
+ ├── join_type: Inner
213
+ ├── cond:Eq
214
+ │ ├── #2
215
+ │ └── #3
216
+ ├── LogicalProjection { exprs: [ #0, #1, #4 ] }
217
+ │ └── LogicalJoin
218
+ │ ├── join_type: Inner
219
+ │ ├── cond:Eq
220
+ │ │ ├── #2
221
+ │ │ └── #3
222
+ │ ├── LogicalProjection { exprs: [ #0, #2, #4 ] }
223
+ │ │ └── LogicalJoin
224
+ │ │ ├── join_type: Inner
225
+ │ │ ├── cond:Eq
226
+ │ │ │ ├── #1
227
+ │ │ │ └── #3
228
+ │ │ ├── LogicalProjection { exprs: [ #0, #1, #3 ] }
229
+ │ │ │ └── LogicalScan { table: partsupp }
230
+ │ │ └── LogicalProjection { exprs: [ #0, #3 ] }
231
+ │ │ └── LogicalScan { table: supplier }
232
+ │ └── LogicalProjection { exprs: [ #0, #2 ] }
233
+ │ └── LogicalScan { table: nation }
234
+ └── LogicalProjection { exprs: [ #0 ] }
235
+ └── LogicalFilter
236
+ ├── cond:Eq
237
+ │ ├── #1
238
+ │ └── "AFRICA"
239
+ └── LogicalProjection { exprs: [ #0, #1 ] }
240
+ └── LogicalScan { table: region }
241
+ PhysicalLimit { skip: 0, fetch: 100 }
242
+ └── PhysicalSort
243
+ ├── exprs:
244
+ │ ┌── SortOrder { order: Desc }
245
+ │ │ └── #0
246
+ │ ├── SortOrder { order: Asc }
247
+ │ │ └── #2
248
+ │ ├── SortOrder { order: Asc }
249
+ │ │ └── #1
250
+ │ └── SortOrder { order: Asc }
251
+ │ └── #3
252
+ └── PhysicalProjection { exprs: [ #5, #2, #8, #0, #1, #3, #4, #6 ] }
253
+ └── PhysicalNestedLoopJoin
254
+ ├── join_type: Inner
255
+ ├── cond:And
256
+ │ ├── Eq
257
+ │ │ ├── #0
258
+ │ │ └── #10
259
+ │ └── Eq
260
+ │ ├── #7
261
+ │ └── #9
262
+ ├── PhysicalProjection { exprs: [ #0, #1, #2, #3, #4, #5, #6, #7, #8 ] }
263
+ │ └── PhysicalHashJoin { join_type: Inner, left_keys: [ #9 ], right_keys: [ #0 ] }
264
+ │ ├── PhysicalProjection { exprs: [ #0, #1, #2, #3, #5, #6, #7, #8, #10, #11 ] }
265
+ │ │ └── PhysicalHashJoin { join_type: Inner, left_keys: [ #4 ], right_keys: [ #0 ] }
266
+ │ │ ├── PhysicalProjection { exprs: [ #0, #1, #5, #6, #7, #8, #9, #10, #3 ] }
267
+ │ │ │ └── PhysicalHashJoin { join_type: Inner, left_keys: [ #2 ], right_keys: [ #0 ] }
268
+ │ │ │ ├── PhysicalProjection { exprs: [ #0, #1, #3, #4 ] }
269
+ │ │ │ │ └── PhysicalHashJoin { join_type: Inner, left_keys: [ #0 ], right_keys: [ #0 ] }
270
+ │ │ │ │ ├── PhysicalProjection { exprs: [ #0, #1 ] }
271
+ │ │ │ │ │ └── PhysicalFilter
272
+ │ │ │ │ │ ├── cond:And
273
+ │ │ │ │ │ │ ├── Eq
274
+ │ │ │ │ │ │ │ ├── #3
275
+ │ │ │ │ │ │ │ └── 4
276
+ │ │ │ │ │ │ └── Like { expr: #2, pattern: "%TIN" }
277
+ │ │ │ │ │ └── PhysicalProjection { exprs: [ #0, #2, #4, #5 ] }
278
+ │ │ │ │ │ └── PhysicalScan { table: part }
279
+ │ │ │ │ └── PhysicalProjection { exprs: [ #0, #1, #3 ] }
280
+ │ │ │ │ └── PhysicalScan { table: partsupp }
281
+ │ │ │ └── PhysicalProjection { exprs: [ #0, #1, #2, #3, #4, #5, #6 ] }
282
+ │ │ │ └── PhysicalScan { table: supplier }
283
+ │ │ └── PhysicalProjection { exprs: [ #0, #1, #2 ] }
284
+ │ │ └── PhysicalScan { table: nation }
285
+ │ └── PhysicalProjection { exprs: [ #0 ] }
286
+ │ └── PhysicalFilter
287
+ │ ├── cond:Eq
288
+ │ │ ├── #1
289
+ │ │ └── "AFRICA"
290
+ │ └── PhysicalProjection { exprs: [ #0, #1 ] }
291
+ │ └── PhysicalScan { table: region }
292
+ └── PhysicalProjection { exprs: [ #1, #0 ] }
293
+ └── PhysicalAgg
294
+ ├── aggrs:Agg(Min)
295
+ │ └── [ #1 ]
296
+ ├── groups: [ #0 ]
297
+ └── PhysicalProjection { exprs: [ #0, #1 ] }
298
+ └── PhysicalHashJoin { join_type: Inner, left_keys: [ #2 ], right_keys: [ #0 ] }
299
+ ├── PhysicalProjection { exprs: [ #0, #1, #4 ] }
300
+ │ └── PhysicalHashJoin { join_type: Inner, left_keys: [ #2 ], right_keys: [ #0 ] }
301
+ │ ├── PhysicalProjection { exprs: [ #0, #2, #4 ] }
302
+ │ │ └── PhysicalHashJoin { join_type: Inner, left_keys: [ #1 ], right_keys: [ #0 ] }
303
+ │ │ ├── PhysicalProjection { exprs: [ #0, #1, #3 ] }
304
+ │ │ │ └── PhysicalScan { table: partsupp }
305
+ │ │ └── PhysicalProjection { exprs: [ #0, #3 ] }
306
+ │ │ └── PhysicalScan { table: supplier }
307
+ │ └── PhysicalProjection { exprs: [ #0, #2 ] }
308
+ │ └── PhysicalScan { table: nation }
309
+ └── PhysicalProjection { exprs: [ #0 ] }
310
+ └── PhysicalFilter
311
+ ├── cond:Eq
312
+ │ ├── #1
313
+ │ └── "AFRICA"
314
+ └── PhysicalProjection { exprs: [ #0, #1 ] }
315
+ └── PhysicalScan { table: region }
316
+ */
317
+
91
318
-- TPC-H Q5
92
319
SELECT
93
320
n_name AS nation,
0 commit comments