Skip to content

Commit

Permalink
admin: remove reflect deepEqual
Browse files Browse the repository at this point in the history
  • Loading branch information
crazycs520 committed Oct 15, 2018
1 parent 3bb6889 commit 1dec0c7
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 12 deletions.
38 changes: 38 additions & 0 deletions types/datum_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
package types

import (
"reflect"
"testing"
"time"

. "github.com/pingcap/check"
Expand Down Expand Up @@ -362,3 +364,39 @@ func (ts *testDatumSuite) TestCopyDatum(c *C) {
}
}
}

func prepareCompareDatums() ([]Datum, []Datum) {
vals := make([]Datum, 0, 5)
vals = append(vals, NewIntDatum(1))
vals = append(vals, NewFloat64Datum(1.23))
vals = append(vals, NewStringDatum("abcde"))
vals = append(vals, NewDecimalDatum(NewDecFromStringForTest("1.2345")))
vals = append(vals, NewTimeDatum(Time{Time: FromGoTime(time.Date(2018, 3, 8, 16, 1, 0, 315313000, time.UTC)), Fsp: 6, Type: mysql.TypeTimestamp}))

vals1 := make([]Datum, 0, 5)
vals1 = append(vals1, NewIntDatum(1))
vals1 = append(vals1, NewFloat64Datum(1.23))
vals1 = append(vals1, NewStringDatum("abcde"))
vals1 = append(vals1, NewDecimalDatum(NewDecFromStringForTest("1.2345")))
vals1 = append(vals1, NewTimeDatum(Time{Time: FromGoTime(time.Date(2018, 3, 8, 16, 1, 0, 315313000, time.UTC)), Fsp: 6, Type: mysql.TypeTimestamp}))
return vals, vals1
}

func BenchmarkCompareDatum(b *testing.B) {
vals, vals1 := prepareCompareDatums()
sc := new(stmtctx.StatementContext)
b.ResetTimer()
for i := 0; i < b.N; i++ {
for j, v := range vals {
v.CompareDatum(sc, &vals1[j])
}
}
}

func BenchmarkCompareDatumByReflect(b *testing.B) {
vals, vals1 := prepareCompareDatums()
b.ResetTimer()
for i := 0; i < b.N; i++ {
reflect.DeepEqual(vals, vals1)
}
}
17 changes: 5 additions & 12 deletions util/admin/admin.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ package admin
import (
"fmt"
"io"
"reflect"
"sort"

"github.com/pingcap/tidb/expression"
Expand Down Expand Up @@ -391,16 +390,9 @@ func compareDatumSlice(sc *stmtctx.StatementContext, val1s, val2s []types.Datum)
return false
}
for i, v := range val1s {
switch v.Kind() {
case types.KindMysqlDecimal, types.KindBytes:
res, err := v.CompareDatum(sc, &val2s[i])
if err != nil || res != 0 {
return false
}
default:
if !reflect.DeepEqual(v, val2s[i]) {
return false
}
res, err := v.CompareDatum(sc, &val2s[i])
if err != nil || res != 0 {
return false
}
}
return true
Expand Down Expand Up @@ -524,6 +516,7 @@ func CompareTableRecord(sessCtx sessionctx.Context, txn kv.Transaction, t table.
}

startKey := t.RecordKey(0)
sc := new(stmtctx.StatementContext)
filterFunc := func(h int64, vals []types.Datum, cols []*table.Column) (bool, error) {
vals2, ok := m[h]
if !ok {
Expand All @@ -535,7 +528,7 @@ func CompareTableRecord(sessCtx sessionctx.Context, txn kv.Transaction, t table.
return true, nil
}

if !reflect.DeepEqual(vals, vals2) {
if !compareDatumSlice(sc, vals, vals2) {
record1 := &RecordData{Handle: h, Values: vals2}
record2 := &RecordData{Handle: h, Values: vals}
return false, ErrDataInConsistent.GenWithStack("data:%#v != record:%#v", record1, record2)
Expand Down

0 comments on commit 1dec0c7

Please sign in to comment.