@@ -293,6 +293,196 @@ PhysicalProjection { exprs: [ #0 ] }
293
293
└── PhysicalScan { table: lineitem }
294
294
*/
295
295
296
+ -- TPC-H Q7
297
+ SELECT
298
+ supp_nation,
299
+ cust_nation,
300
+ l_year,
301
+ SUM (volume) AS revenue
302
+ FROM
303
+ (
304
+ SELECT
305
+ n1 .n_name AS supp_nation,
306
+ n2 .n_name AS cust_nation,
307
+ EXTRACT(YEAR FROM l_shipdate) AS l_year,
308
+ l_extendedprice * (1 - l_discount) AS volume
309
+ FROM
310
+ supplier,
311
+ lineitem,
312
+ orders,
313
+ customer,
314
+ nation n1,
315
+ nation n2
316
+ WHERE
317
+ s_suppkey = l_suppkey
318
+ AND o_orderkey = l_orderkey
319
+ AND c_custkey = o_custkey
320
+ AND s_nationkey = n1 .n_nationkey
321
+ AND c_nationkey = n2 .n_nationkey
322
+ AND (
323
+ (n1 .n_name = ' FRANCE' AND n2 .n_name = ' GERMANY' )
324
+ OR (n1 .n_name = ' GERMANY' AND n2 .n_name = ' FRANCE' )
325
+ )
326
+ AND l_shipdate BETWEEN DATE ' 1995-01-01' AND DATE ' 1996-12-31'
327
+ ) AS shipping
328
+ GROUP BY
329
+ supp_nation,
330
+ cust_nation,
331
+ l_year
332
+ ORDER BY
333
+ supp_nation,
334
+ cust_nation,
335
+ l_year;
336
+
337
+ /*
338
+ LogicalSort
339
+ ├── exprs:
340
+ │ ┌── SortOrder { order: Asc }
341
+ │ │ └── #0
342
+ │ ├── SortOrder { order: Asc }
343
+ │ │ └── #1
344
+ │ └── SortOrder { order: Asc }
345
+ │ └── #2
346
+ └── LogicalProjection { exprs: [ #0, #1, #2, #3 ] }
347
+ └── LogicalAgg
348
+ ├── exprs:Agg(Sum)
349
+ │ └── [ #3 ]
350
+ ├── groups: [ #0, #1, #2 ]
351
+ └── LogicalProjection
352
+ ├── exprs:
353
+ │ ┌── #41
354
+ │ ├── #45
355
+ │ ├── Scalar(DatePart)
356
+ │ │ └── [ "YEAR", #17 ]
357
+ │ └── Mul
358
+ │ ├── #12
359
+ │ └── Sub
360
+ │ ├── Cast { cast_to: Decimal128(0), expr: 1 }
361
+ │ └── #13
362
+ └── LogicalFilter
363
+ ├── cond:And
364
+ │ ├── And
365
+ │ │ ├── And
366
+ │ │ │ ├── And
367
+ │ │ │ │ ├── And
368
+ │ │ │ │ │ ├── And
369
+ │ │ │ │ │ │ ├── Eq
370
+ │ │ │ │ │ │ │ ├── #0
371
+ │ │ │ │ │ │ │ └── #9
372
+ │ │ │ │ │ │ └── Eq
373
+ │ │ │ │ │ │ ├── #23
374
+ │ │ │ │ │ │ └── #7
375
+ │ │ │ │ │ └── Eq
376
+ │ │ │ │ │ ├── #32
377
+ │ │ │ │ │ └── #24
378
+ │ │ │ │ └── Eq
379
+ │ │ │ │ ├── #3
380
+ │ │ │ │ └── #40
381
+ │ │ │ └── Eq
382
+ │ │ │ ├── #35
383
+ │ │ │ └── #44
384
+ │ │ └── Or
385
+ │ │ ├── And
386
+ │ │ │ ├── Eq
387
+ │ │ │ │ ├── #41
388
+ │ │ │ │ └── "FRANCE"
389
+ │ │ │ └── Eq
390
+ │ │ │ ├── #45
391
+ │ │ │ └── "GERMANY"
392
+ │ │ └── And
393
+ │ │ ├── Eq
394
+ │ │ │ ├── #41
395
+ │ │ │ └── "GERMANY"
396
+ │ │ └── Eq
397
+ │ │ ├── #45
398
+ │ │ └── "FRANCE"
399
+ │ └── Between { expr: #17, lower: Cast { cast_to: Date32(0), expr: "1995-01-01" }, upper: Cast { cast_to: Date32(0), expr: "1996-12-31" } }
400
+ └── LogicalJoin { join_type: Cross, cond: true }
401
+ ├── LogicalJoin { join_type: Cross, cond: true }
402
+ │ ├── LogicalJoin { join_type: Cross, cond: true }
403
+ │ │ ├── LogicalJoin { join_type: Cross, cond: true }
404
+ │ │ │ ├── LogicalJoin { join_type: Cross, cond: true }
405
+ │ │ │ │ ├── LogicalScan { table: supplier }
406
+ │ │ │ │ └── LogicalScan { table: lineitem }
407
+ │ │ │ └── LogicalScan { table: orders }
408
+ │ │ └── LogicalScan { table: customer }
409
+ │ └── LogicalScan { table: nation }
410
+ └── LogicalScan { table: nation }
411
+ PhysicalSort
412
+ ├── exprs:
413
+ │ ┌── SortOrder { order: Asc }
414
+ │ │ └── #0
415
+ │ ├── SortOrder { order: Asc }
416
+ │ │ └── #1
417
+ │ └── SortOrder { order: Asc }
418
+ │ └── #2
419
+ └── PhysicalProjection { exprs: [ #0, #1, #2, #3 ] }
420
+ └── PhysicalAgg
421
+ ├── aggrs:Agg(Sum)
422
+ │ └── [ #3 ]
423
+ ├── groups: [ #0, #1, #2 ]
424
+ └── PhysicalProjection
425
+ ├── exprs:
426
+ │ ┌── #41
427
+ │ ├── #45
428
+ │ ├── Scalar(DatePart)
429
+ │ │ └── [ "YEAR", #17 ]
430
+ │ └── Mul
431
+ │ ├── #12
432
+ │ └── Sub
433
+ │ ├── Cast { cast_to: Decimal128(0), expr: 1 }
434
+ │ └── #13
435
+ └── PhysicalFilter
436
+ ├── cond:And
437
+ │ ├── And
438
+ │ │ ├── And
439
+ │ │ │ ├── And
440
+ │ │ │ │ ├── And
441
+ │ │ │ │ │ ├── And
442
+ │ │ │ │ │ │ ├── Eq
443
+ │ │ │ │ │ │ │ ├── #0
444
+ │ │ │ │ │ │ │ └── #9
445
+ │ │ │ │ │ │ └── Eq
446
+ │ │ │ │ │ │ ├── #23
447
+ │ │ │ │ │ │ └── #7
448
+ │ │ │ │ │ └── Eq
449
+ │ │ │ │ │ ├── #32
450
+ │ │ │ │ │ └── #24
451
+ │ │ │ │ └── Eq
452
+ │ │ │ │ ├── #3
453
+ │ │ │ │ └── #40
454
+ │ │ │ └── Eq
455
+ │ │ │ ├── #35
456
+ │ │ │ └── #44
457
+ │ │ └── Or
458
+ │ │ ├── And
459
+ │ │ │ ├── Eq
460
+ │ │ │ │ ├── #41
461
+ │ │ │ │ └── "FRANCE"
462
+ │ │ │ └── Eq
463
+ │ │ │ ├── #45
464
+ │ │ │ └── "GERMANY"
465
+ │ │ └── And
466
+ │ │ ├── Eq
467
+ │ │ │ ├── #41
468
+ │ │ │ └── "GERMANY"
469
+ │ │ └── Eq
470
+ │ │ ├── #45
471
+ │ │ └── "FRANCE"
472
+ │ └── Between { expr: #17, lower: Cast { cast_to: Date32(0), expr: "1995-01-01" }, upper: Cast { cast_to: Date32(0), expr: "1996-12-31" } }
473
+ └── PhysicalNestedLoopJoin { join_type: Cross, cond: true }
474
+ ├── PhysicalNestedLoopJoin { join_type: Cross, cond: true }
475
+ │ ├── PhysicalNestedLoopJoin { join_type: Cross, cond: true }
476
+ │ │ ├── PhysicalNestedLoopJoin { join_type: Cross, cond: true }
477
+ │ │ │ ├── PhysicalNestedLoopJoin { join_type: Cross, cond: true }
478
+ │ │ │ │ ├── PhysicalScan { table: supplier }
479
+ │ │ │ │ └── PhysicalScan { table: lineitem }
480
+ │ │ │ └── PhysicalScan { table: orders }
481
+ │ │ └── PhysicalScan { table: customer }
482
+ │ └── PhysicalScan { table: nation }
483
+ └── PhysicalScan { table: nation }
484
+ */
485
+
296
486
-- TPC-H Q8 without top-most limit node
297
487
select
298
488
o_year,
@@ -505,3 +695,164 @@ PhysicalSort
505
695
└── PhysicalScan { table: region }
506
696
*/
507
697
698
+ -- TPC-H Q9
699
+ SELECT
700
+ nation,
701
+ o_year,
702
+ SUM (amount) AS sum_profit
703
+ FROM
704
+ (
705
+ SELECT
706
+ n_name AS nation,
707
+ EXTRACT(YEAR FROM o_orderdate) AS o_year,
708
+ l_extendedprice * (1 - l_discount) - ps_supplycost * l_quantity AS amount
709
+ FROM
710
+ part,
711
+ supplier,
712
+ lineitem,
713
+ partsupp,
714
+ orders,
715
+ nation
716
+ WHERE
717
+ s_suppkey = l_suppkey
718
+ AND ps_suppkey = l_suppkey
719
+ AND ps_partkey = l_partkey
720
+ AND p_partkey = l_partkey
721
+ AND o_orderkey = l_orderkey
722
+ AND s_nationkey = n_nationkey
723
+ AND p_name LIKE ' %green%'
724
+ ) AS profit
725
+ GROUP BY
726
+ nation,
727
+ o_year
728
+ ORDER BY
729
+ nation,
730
+ o_year DESC ;
731
+
732
+ /*
733
+ LogicalSort
734
+ ├── exprs:
735
+ │ ┌── SortOrder { order: Asc }
736
+ │ │ └── #0
737
+ │ └── SortOrder { order: Desc }
738
+ │ └── #1
739
+ └── LogicalProjection { exprs: [ #0, #1, #2 ] }
740
+ └── LogicalAgg
741
+ ├── exprs:Agg(Sum)
742
+ │ └── [ #2 ]
743
+ ├── groups: [ #0, #1 ]
744
+ └── LogicalProjection
745
+ ├── exprs:
746
+ │ ┌── #47
747
+ │ ├── Scalar(DatePart)
748
+ │ │ └── [ "YEAR", #41 ]
749
+ │ └── Sub
750
+ │ ├── Mul
751
+ │ │ ├── #21
752
+ │ │ └── Sub
753
+ │ │ ├── Cast { cast_to: Decimal128(0), expr: 1 }
754
+ │ │ └── #22
755
+ │ └── Mul
756
+ │ ├── #35
757
+ │ └── #20
758
+ └── LogicalFilter
759
+ ├── cond:And
760
+ │ ├── And
761
+ │ │ ├── And
762
+ │ │ │ ├── And
763
+ │ │ │ │ ├── And
764
+ │ │ │ │ │ ├── And
765
+ │ │ │ │ │ │ ├── Eq
766
+ │ │ │ │ │ │ │ ├── #9
767
+ │ │ │ │ │ │ │ └── #18
768
+ │ │ │ │ │ │ └── Eq
769
+ │ │ │ │ │ │ ├── #33
770
+ │ │ │ │ │ │ └── #18
771
+ │ │ │ │ │ └── Eq
772
+ │ │ │ │ │ ├── #32
773
+ │ │ │ │ │ └── #17
774
+ │ │ │ │ └── Eq
775
+ │ │ │ │ ├── #0
776
+ │ │ │ │ └── #17
777
+ │ │ │ └── Eq
778
+ │ │ │ ├── #37
779
+ │ │ │ └── #16
780
+ │ │ └── Eq
781
+ │ │ ├── #12
782
+ │ │ └── #46
783
+ │ └── Like { expr: #1, pattern: "%green%" }
784
+ └── LogicalJoin { join_type: Cross, cond: true }
785
+ ├── LogicalJoin { join_type: Cross, cond: true }
786
+ │ ├── LogicalJoin { join_type: Cross, cond: true }
787
+ │ │ ├── LogicalJoin { join_type: Cross, cond: true }
788
+ │ │ │ ├── LogicalJoin { join_type: Cross, cond: true }
789
+ │ │ │ │ ├── LogicalScan { table: part }
790
+ │ │ │ │ └── LogicalScan { table: supplier }
791
+ │ │ │ └── LogicalScan { table: lineitem }
792
+ │ │ └── LogicalScan { table: partsupp }
793
+ │ └── LogicalScan { table: orders }
794
+ └── LogicalScan { table: nation }
795
+ PhysicalSort
796
+ ├── exprs:
797
+ │ ┌── SortOrder { order: Asc }
798
+ │ │ └── #0
799
+ │ └── SortOrder { order: Desc }
800
+ │ └── #1
801
+ └── PhysicalProjection { exprs: [ #0, #1, #2 ] }
802
+ └── PhysicalAgg
803
+ ├── aggrs:Agg(Sum)
804
+ │ └── [ #2 ]
805
+ ├── groups: [ #0, #1 ]
806
+ └── PhysicalProjection
807
+ ├── exprs:
808
+ │ ┌── #47
809
+ │ ├── Scalar(DatePart)
810
+ │ │ └── [ "YEAR", #41 ]
811
+ │ └── Sub
812
+ │ ├── Mul
813
+ │ │ ├── #21
814
+ │ │ └── Sub
815
+ │ │ ├── Cast { cast_to: Decimal128(0), expr: 1 }
816
+ │ │ └── #22
817
+ │ └── Mul
818
+ │ ├── #35
819
+ │ └── #20
820
+ └── PhysicalFilter
821
+ ├── cond:And
822
+ │ ├── And
823
+ │ │ ├── And
824
+ │ │ │ ├── And
825
+ │ │ │ │ ├── And
826
+ │ │ │ │ │ ├── And
827
+ │ │ │ │ │ │ ├── Eq
828
+ │ │ │ │ │ │ │ ├── #9
829
+ │ │ │ │ │ │ │ └── #18
830
+ │ │ │ │ │ │ └── Eq
831
+ │ │ │ │ │ │ ├── #33
832
+ │ │ │ │ │ │ └── #18
833
+ │ │ │ │ │ └── Eq
834
+ │ │ │ │ │ ├── #32
835
+ │ │ │ │ │ └── #17
836
+ │ │ │ │ └── Eq
837
+ │ │ │ │ ├── #0
838
+ │ │ │ │ └── #17
839
+ │ │ │ └── Eq
840
+ │ │ │ ├── #37
841
+ │ │ │ └── #16
842
+ │ │ └── Eq
843
+ │ │ ├── #12
844
+ │ │ └── #46
845
+ │ └── Like { expr: #1, pattern: "%green%" }
846
+ └── PhysicalNestedLoopJoin { join_type: Cross, cond: true }
847
+ ├── PhysicalNestedLoopJoin { join_type: Cross, cond: true }
848
+ │ ├── PhysicalNestedLoopJoin { join_type: Cross, cond: true }
849
+ │ │ ├── PhysicalNestedLoopJoin { join_type: Cross, cond: true }
850
+ │ │ │ ├── PhysicalNestedLoopJoin { join_type: Cross, cond: true }
851
+ │ │ │ │ ├── PhysicalScan { table: part }
852
+ │ │ │ │ └── PhysicalScan { table: supplier }
853
+ │ │ │ └── PhysicalScan { table: lineitem }
854
+ │ │ └── PhysicalScan { table: partsupp }
855
+ │ └── PhysicalScan { table: orders }
856
+ └── PhysicalScan { table: nation }
857
+ */
858
+
0 commit comments