@@ -228,18 +228,20 @@ const (
228
228
//
229
229
// See props/statistics.go for more details.
230
230
type statisticsBuilder struct {
231
- ctx context.Context
232
- evalCtx * eval.Context
233
- md * opt.Metadata
231
+ ctx context.Context
232
+ evalCtx * eval.Context
233
+ md * opt.Metadata
234
+ minRowCount float64
234
235
}
235
236
236
237
func (sb * statisticsBuilder ) init (ctx context.Context , evalCtx * eval.Context , md * opt.Metadata ) {
237
238
// This initialization pattern ensures that fields are not unwittingly
238
239
// reused. Field reuse must be explicit.
239
240
* sb = statisticsBuilder {
240
- ctx : ctx ,
241
- evalCtx : evalCtx ,
242
- md : md ,
241
+ ctx : ctx ,
242
+ evalCtx : evalCtx ,
243
+ md : md ,
244
+ minRowCount : evalCtx .SessionData ().OptimizerMinRowCount ,
243
245
}
244
246
}
245
247
@@ -836,7 +838,7 @@ func (sb *statisticsBuilder) colAvgSize(tabID opt.TableID, col opt.ColumnID) uin
836
838
837
839
func (sb * statisticsBuilder ) buildScan (scan * ScanExpr , relProps * props.Relational ) {
838
840
s := relProps .Statistics ()
839
- if zeroCardinality := s .Init (relProps ); zeroCardinality {
841
+ if zeroCardinality := s .Init (relProps , sb . minRowCount ); zeroCardinality {
840
842
// Short cut if cardinality is 0.
841
843
return
842
844
}
@@ -1085,7 +1087,7 @@ func (sb *statisticsBuilder) colStatScan(colSet opt.ColSet, scan *ScanExpr) *pro
1085
1087
1086
1088
func (sb * statisticsBuilder ) buildSelect (sel * SelectExpr , relProps * props.Relational ) {
1087
1089
s := relProps .Statistics ()
1088
- if zeroCardinality := s .Init (relProps ); zeroCardinality {
1090
+ if zeroCardinality := s .Init (relProps , sb . minRowCount ); zeroCardinality {
1089
1091
// Short cut if cardinality is 0.
1090
1092
return
1091
1093
}
@@ -1126,7 +1128,7 @@ func (sb *statisticsBuilder) colStatSelect(
1126
1128
1127
1129
func (sb * statisticsBuilder ) buildProject (prj * ProjectExpr , relProps * props.Relational ) {
1128
1130
s := relProps .Statistics ()
1129
- if zeroCardinality := s .Init (relProps ); zeroCardinality {
1131
+ if zeroCardinality := s .Init (relProps , sb . minRowCount ); zeroCardinality {
1130
1132
// Short cut if cardinality is 0.
1131
1133
return
1132
1134
}
@@ -1228,7 +1230,7 @@ func (sb *statisticsBuilder) buildInvertedFilter(
1228
1230
invFilter * InvertedFilterExpr , relProps * props.Relational ,
1229
1231
) {
1230
1232
s := relProps .Statistics ()
1231
- if zeroCardinality := s .Init (relProps ); zeroCardinality {
1233
+ if zeroCardinality := s .Init (relProps , sb . minRowCount ); zeroCardinality {
1232
1234
// Short cut if cardinality is 0.
1233
1235
return
1234
1236
}
@@ -1289,7 +1291,7 @@ func (sb *statisticsBuilder) buildJoin(
1289
1291
}
1290
1292
1291
1293
s := relProps .Statistics ()
1292
- if zeroCardinality := s .Init (relProps ); zeroCardinality {
1294
+ if zeroCardinality := s .Init (relProps , sb . minRowCount ); zeroCardinality {
1293
1295
// Short cut if cardinality is 0.
1294
1296
return
1295
1297
}
@@ -1820,7 +1822,7 @@ func (sb *statisticsBuilder) colStatFromJoinRight(
1820
1822
1821
1823
func (sb * statisticsBuilder ) buildIndexJoin (indexJoin * IndexJoinExpr , relProps * props.Relational ) {
1822
1824
s := relProps .Statistics ()
1823
- if zeroCardinality := s .Init (relProps ); zeroCardinality {
1825
+ if zeroCardinality := s .Init (relProps , sb . minRowCount ); zeroCardinality {
1824
1826
// Short cut if cardinality is 0.
1825
1827
return
1826
1828
}
@@ -1901,7 +1903,7 @@ func (sb *statisticsBuilder) buildZigzagJoin(
1901
1903
zigzag * ZigzagJoinExpr , relProps * props.Relational , h * joinPropsHelper ,
1902
1904
) {
1903
1905
s := relProps .Statistics ()
1904
- if zeroCardinality := s .Init (relProps ); zeroCardinality {
1906
+ if zeroCardinality := s .Init (relProps , sb . minRowCount ); zeroCardinality {
1905
1907
// Short cut if cardinality is 0.
1906
1908
return
1907
1909
}
@@ -2002,7 +2004,7 @@ func (sb *statisticsBuilder) buildZigzagJoin(
2002
2004
2003
2005
func (sb * statisticsBuilder ) buildGroupBy (groupNode RelExpr , relProps * props.Relational ) {
2004
2006
s := relProps .Statistics ()
2005
- if zeroCardinality := s .Init (relProps ); zeroCardinality {
2007
+ if zeroCardinality := s .Init (relProps , sb . minRowCount ); zeroCardinality {
2006
2008
// Short cut if cardinality is 0.
2007
2009
return
2008
2010
}
@@ -2114,7 +2116,7 @@ func (sb *statisticsBuilder) colStatGroupBy(
2114
2116
2115
2117
func (sb * statisticsBuilder ) buildSetNode (setNode RelExpr , relProps * props.Relational ) {
2116
2118
s := relProps .Statistics ()
2117
- if zeroCardinality := s .Init (relProps ); zeroCardinality {
2119
+ if zeroCardinality := s .Init (relProps , sb . minRowCount ); zeroCardinality {
2118
2120
// Short cut if cardinality is 0.
2119
2121
return
2120
2122
}
@@ -2219,7 +2221,7 @@ func (sb *statisticsBuilder) colStatSetNodeImpl(
2219
2221
// buildValues builds the statistics for a VALUES expression.
2220
2222
func (sb * statisticsBuilder ) buildValues (values ValuesContainer , relProps * props.Relational ) {
2221
2223
s := relProps .Statistics ()
2222
- if zeroCardinality := s .Init (relProps ); zeroCardinality {
2224
+ if zeroCardinality := s .Init (relProps , sb . minRowCount ); zeroCardinality {
2223
2225
// Short cut if cardinality is 0.
2224
2226
return
2225
2227
}
@@ -2324,7 +2326,7 @@ func (sb *statisticsBuilder) colStatLiteralValues(
2324
2326
2325
2327
func (sb * statisticsBuilder ) buildLimit (limit * LimitExpr , relProps * props.Relational ) {
2326
2328
s := relProps .Statistics ()
2327
- if zeroCardinality := s .Init (relProps ); zeroCardinality {
2329
+ if zeroCardinality := s .Init (relProps , sb . minRowCount ); zeroCardinality {
2328
2330
// Short cut if cardinality is 0.
2329
2331
return
2330
2332
}
@@ -2367,7 +2369,7 @@ func (sb *statisticsBuilder) colStatLimit(
2367
2369
2368
2370
func (sb * statisticsBuilder ) buildTopK (topK * TopKExpr , relProps * props.Relational ) {
2369
2371
s := relProps .Statistics ()
2370
- if zeroCardinality := s .Init (relProps ); zeroCardinality {
2372
+ if zeroCardinality := s .Init (relProps , sb . minRowCount ); zeroCardinality {
2371
2373
// Short cut if cardinality is 0.
2372
2374
return
2373
2375
}
@@ -2409,7 +2411,7 @@ func (sb *statisticsBuilder) colStatTopK(colSet opt.ColSet, topK *TopKExpr) *pro
2409
2411
2410
2412
func (sb * statisticsBuilder ) buildOffset (offset * OffsetExpr , relProps * props.Relational ) {
2411
2413
s := relProps .Statistics ()
2412
- if zeroCardinality := s .Init (relProps ); zeroCardinality {
2414
+ if zeroCardinality := s .Init (relProps , sb . minRowCount ); zeroCardinality {
2413
2415
// Short cut if cardinality is 0.
2414
2416
return
2415
2417
}
@@ -2462,7 +2464,7 @@ func (sb *statisticsBuilder) colStatOffset(
2462
2464
2463
2465
func (sb * statisticsBuilder ) buildMax1Row (max1Row * Max1RowExpr , relProps * props.Relational ) {
2464
2466
s := relProps .Statistics ()
2465
- if zeroCardinality := s .Init (relProps ); zeroCardinality {
2467
+ if zeroCardinality := s .Init (relProps , sb . minRowCount ); zeroCardinality {
2466
2468
// Short cut if cardinality is 0.
2467
2469
return
2468
2470
}
@@ -2492,7 +2494,7 @@ func (sb *statisticsBuilder) colStatMax1Row(
2492
2494
2493
2495
func (sb * statisticsBuilder ) buildOrdinality (ord * OrdinalityExpr , relProps * props.Relational ) {
2494
2496
s := relProps .Statistics ()
2495
- if zeroCardinality := s .Init (relProps ); zeroCardinality {
2497
+ if zeroCardinality := s .Init (relProps , sb . minRowCount ); zeroCardinality {
2496
2498
// Short cut if cardinality is 0.
2497
2499
return
2498
2500
}
@@ -2537,7 +2539,7 @@ func (sb *statisticsBuilder) colStatOrdinality(
2537
2539
2538
2540
func (sb * statisticsBuilder ) buildWindow (window * WindowExpr , relProps * props.Relational ) {
2539
2541
s := relProps .Statistics ()
2540
- if zeroCardinality := s .Init (relProps ); zeroCardinality {
2542
+ if zeroCardinality := s .Init (relProps , sb . minRowCount ); zeroCardinality {
2541
2543
// Short cut if cardinality is 0.
2542
2544
return
2543
2545
}
@@ -2605,7 +2607,7 @@ func (sb *statisticsBuilder) buildProjectSet(
2605
2607
projectSet * ProjectSetExpr , relProps * props.Relational ,
2606
2608
) {
2607
2609
s := relProps .Statistics ()
2608
- if zeroCardinality := s .Init (relProps ); zeroCardinality {
2610
+ if zeroCardinality := s .Init (relProps , sb . minRowCount ); zeroCardinality {
2609
2611
// Short cut if cardinality is 0.
2610
2612
return
2611
2613
}
@@ -2738,7 +2740,7 @@ func (sb *statisticsBuilder) buildWithScan(
2738
2740
withScan * WithScanExpr , relProps , bindingProps * props.Relational ,
2739
2741
) {
2740
2742
s := relProps .Statistics ()
2741
- if zeroCardinality := s .Init (relProps ); zeroCardinality {
2743
+ if zeroCardinality := s .Init (relProps , sb . minRowCount ); zeroCardinality {
2742
2744
// Short cut if cardinality is 0.
2743
2745
return
2744
2746
}
@@ -2780,7 +2782,7 @@ func (sb *statisticsBuilder) colStatWithScan(
2780
2782
2781
2783
func (sb * statisticsBuilder ) buildMutation (mutation RelExpr , relProps * props.Relational ) {
2782
2784
s := relProps .Statistics ()
2783
- if zeroCardinality := s .Init (relProps ); zeroCardinality {
2785
+ if zeroCardinality := s .Init (relProps , sb . minRowCount ); zeroCardinality {
2784
2786
// Short cut if cardinality is 0.
2785
2787
return
2786
2788
}
@@ -2818,7 +2820,7 @@ func (sb *statisticsBuilder) colStatMutation(
2818
2820
2819
2821
func (sb * statisticsBuilder ) buildLock (lock * LockExpr , relProps * props.Relational ) {
2820
2822
s := relProps .Statistics ()
2821
- if zeroCardinality := s .Init (relProps ); zeroCardinality {
2823
+ if zeroCardinality := s .Init (relProps , sb . minRowCount ); zeroCardinality {
2822
2824
// Short cut if cardinality is 0.
2823
2825
return
2824
2826
}
@@ -2852,7 +2854,7 @@ func (sb *statisticsBuilder) buildVectorSearch(
2852
2854
search * VectorSearchExpr , relProps * props.Relational ,
2853
2855
) {
2854
2856
s := relProps .Statistics ()
2855
- if zeroCardinality := s .Init (relProps ); zeroCardinality {
2857
+ if zeroCardinality := s .Init (relProps , sb . minRowCount ); zeroCardinality {
2856
2858
// Short cut if cardinality is 0.
2857
2859
return
2858
2860
}
@@ -2909,7 +2911,7 @@ func (sb *statisticsBuilder) buildVectorPartitionSearch(
2909
2911
search * VectorPartitionSearchExpr , relProps * props.Relational ,
2910
2912
) {
2911
2913
s := relProps .Statistics ()
2912
- if zeroCardinality := s .Init (relProps ); zeroCardinality {
2914
+ if zeroCardinality := s .Init (relProps , sb . minRowCount ); zeroCardinality {
2913
2915
// Short cut if cardinality is 0.
2914
2916
return
2915
2917
}
@@ -2944,7 +2946,7 @@ func (sb *statisticsBuilder) colStatVectorPartitionSearch(
2944
2946
2945
2947
func (sb * statisticsBuilder ) buildBarrier (barrier * BarrierExpr , relProps * props.Relational ) {
2946
2948
s := relProps .Statistics ()
2947
- if zeroCardinality := s .Init (relProps ); zeroCardinality {
2949
+ if zeroCardinality := s .Init (relProps , sb . minRowCount ); zeroCardinality {
2948
2950
// Short cut if cardinality is 0.
2949
2951
return
2950
2952
}
@@ -2978,7 +2980,7 @@ func (sb *statisticsBuilder) colStatBarrier(
2978
2980
2979
2981
func (sb * statisticsBuilder ) buildCall (call * CallExpr , relProps * props.Relational ) {
2980
2982
s := relProps .Statistics ()
2981
- if zeroCardinality := s .Init (relProps ); zeroCardinality {
2983
+ if zeroCardinality := s .Init (relProps , sb . minRowCount ); zeroCardinality {
2982
2984
// Short-cut if cardinality is 0.
2983
2985
return
2984
2986
}
0 commit comments