diff --git a/statistics/builder.go b/statistics/builder.go index 362fc05f7482c..b63388e266c48 100644 --- a/statistics/builder.go +++ b/statistics/builder.go @@ -138,8 +138,13 @@ func BuildColumn(ctx context.Context, numBuckets, id int64, collector *SampleCol } bucketIdx := 0 var lastCount int64 - hg.Buckets[0].LowerBound = samples[0] - for i := int64(0); i < int64(len(samples)); i++ { + hg.Buckets[0] = Bucket{ + LowerBound: samples[0], + UpperBound: samples[0], + Count: int64(sampleFactor), + Repeats: int64(ndvFactor), + } + for i := int64(1); i < int64(len(samples)); i++ { cmp, err := hg.Buckets[bucketIdx].UpperBound.CompareDatum(sc, &samples[i]) if err != nil { return nil, errors.Trace(err) diff --git a/statistics/statistics_test.go b/statistics/statistics_test.go index ce990c5ffd439..078bbed0cffc0 100644 --- a/statistics/statistics_test.go +++ b/statistics/statistics_test.go @@ -26,6 +26,7 @@ import ( "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" + "github.com/pingcap/tidb/types/json" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/codec" "github.com/pingcap/tidb/util/mock" @@ -46,11 +47,6 @@ type testStatisticsSuite struct { pk ast.RecordSet } -type dataTable struct { - count int64 - samples []types.Datum -} - type recordSet struct { data []types.Datum count int64 @@ -328,6 +324,19 @@ func (s *testStatisticsSuite) TestBuild(c *C) { count, err = col.lessRowCount(sc, types.NewIntDatum(99999)) c.Check(err, IsNil) c.Check(int(count), Equals, 99999) + + datum := types.Datum{} + datum.SetMysqlJSON(json.BinaryJSON{TypeCode: json.TypeCodeLiteral}) + collector = &SampleCollector{ + Count: 1, + NullCount: 0, + Samples: []types.Datum{datum}, + FMSketch: sketch, + } + col, err = BuildColumn(ctx, bucketCount, 2, collector) + c.Assert(err, IsNil) + c.Assert(len(col.Buckets), Equals, 1) + c.Assert(col.Buckets[0].LowerBound, DeepEquals, col.Buckets[0].UpperBound) } func (s *testStatisticsSuite) TestHistogramProtoConversion(c *C) {