statistics: add test (#3727)

This commit is contained in:
Haibin Xie
2017-07-13 11:38:32 +08:00
committed by GitHub
parent 4b16708bd2
commit f9c62ee67e
2 changed files with 71 additions and 1 deletions

View File

@ -84,7 +84,7 @@ func (s *testStatsCacheSuite) TestDDLTable(c *C) {
statsTbl = h.GetTableStats(tableInfo.ID)
c.Assert(statsTbl.Pseudo, IsTrue)
testKit.MustExec("create table t1 (c1 int, c2 int)")
testKit.MustExec("create table t1 (c1 int, c2 int, index idx(c1))")
is = do.InfoSchema()
tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t1"))
c.Assert(err, IsNil)

View File

@ -14,6 +14,7 @@
package statistics
import (
"math"
"testing"
. "github.com/pingcap/check"
@ -180,6 +181,7 @@ func (s *testStatisticsSuite) TestBuild(c *C) {
c.Check(err, IsNil)
c.Check(int(count), Equals, 0)
s.pk.(*recordSet).cursor = 0
tblCount, col, err = BuildPK(ctx, bucketCount, 4, ast.RecordSet(s.pk))
c.Check(err, IsNil)
c.Check(int(tblCount), Equals, 100000)
@ -266,6 +268,10 @@ func (s *testStatisticsSuite) TestColumnRange(c *C) {
count, err = tbl.GetRowCountByColumnRanges(sc, 0, ran)
c.Assert(err, IsNil)
c.Assert(int(count), Equals, 2500)
ran[0].Low = ran[0].High
count, err = tbl.GetRowCountByColumnRanges(sc, 0, ran)
c.Assert(err, IsNil)
c.Assert(int(count), Equals, 100)
tbl.Columns[0] = col
ran[0].Low = types.Datum{}
@ -285,4 +291,68 @@ func (s *testStatisticsSuite) TestColumnRange(c *C) {
count, err = tbl.GetRowCountByColumnRanges(sc, 0, ran)
c.Assert(err, IsNil)
c.Assert(int(count), Equals, 9965)
ran[0].Low = ran[0].High
count, err = tbl.GetRowCountByColumnRanges(sc, 0, ran)
c.Assert(err, IsNil)
c.Assert(int(count), Equals, 1)
}
func (s *testStatisticsSuite) TestIntColumnRanges(c *C) {
bucketCount := int64(256)
ctx := mock.NewContext()
sc := ctx.GetSessionVars().StmtCtx
s.pk.(*recordSet).cursor = 0
rowCount, hg, err := build4SortedColumn(ctx, bucketCount, 0, s.pk, true)
c.Check(err, IsNil)
c.Check(rowCount, Equals, int64(100000))
col := &Column{Histogram: *hg}
tbl := &Table{
Count: int64(col.totalRowCount()),
Columns: make(map[int64]*Column),
}
ran := []types.IntColumnRange{{
LowVal: math.MinInt64,
HighVal: math.MaxInt64,
}}
count, err := tbl.GetRowCountByIntColumnRanges(sc, 0, ran)
c.Assert(err, IsNil)
c.Assert(int(count), Equals, 100000)
ran[0].LowVal = 1000
ran[0].HighVal = 2000
count, err = tbl.GetRowCountByIntColumnRanges(sc, 0, ran)
c.Assert(err, IsNil)
c.Assert(int(count), Equals, 1000)
ran[0].LowVal = 1001
ran[0].HighVal = 1999
count, err = tbl.GetRowCountByIntColumnRanges(sc, 0, ran)
c.Assert(err, IsNil)
c.Assert(int(count), Equals, 998)
ran[0].LowVal = 1000
ran[0].HighVal = 1000
count, err = tbl.GetRowCountByIntColumnRanges(sc, 0, ran)
c.Assert(err, IsNil)
c.Assert(int(count), Equals, 100)
tbl.Columns[0] = col
ran[0].LowVal = math.MinInt64
ran[0].HighVal = math.MaxInt64
count, err = tbl.GetRowCountByIntColumnRanges(sc, 0, ran)
c.Assert(err, IsNil)
c.Assert(int(count), Equals, 100000)
ran[0].LowVal = 1000
ran[0].HighVal = 2000
count, err = tbl.GetRowCountByIntColumnRanges(sc, 0, ran)
c.Assert(err, IsNil)
c.Assert(int(count), Equals, 1000)
ran[0].LowVal = 1001
ran[0].HighVal = 1999
count, err = tbl.GetRowCountByIntColumnRanges(sc, 0, ran)
c.Assert(err, IsNil)
c.Assert(int(count), Equals, 998)
ran[0].LowVal = 1000
ran[0].HighVal = 1000
count, err = tbl.GetRowCountByIntColumnRanges(sc, 0, ran)
c.Assert(err, IsNil)
c.Assert(int(count), Equals, 1)
}