inspectkv: rename GetIndexHandles to GetIndexData and update test

This commit is contained in:
xia
2015-12-09 17:59:46 +08:00
parent c120ba8dab
commit 35cdb5cdcf
2 changed files with 19 additions and 35 deletions

View File

@ -63,52 +63,32 @@ func GetDDLInfo(txn kv.Transaction) (*DDLInfo, error) {
return info, nil
}
// GetIndexVals returns index values.
func GetIndexVals(table table.Table, txn kv.Transaction, indexInfo model.IndexInfo, handle int64) ([]interface{}, error) {
vals := make([]interface{}, len(indexInfo.Columns))
cols := table.Cols()
for i, col := range indexInfo.Columns {
key := table.RecordKey(handle, cols[col.Offset])
data, err := txn.Get(key)
if err != nil {
return nil, errors.Trace(err)
}
val, err := table.DecodeValue(data, cols[col.Offset])
if err != nil {
return nil, errors.Trace(err)
}
vals[i] = val
}
return vals, nil
}
// GetIndexHandles returns index handles.
func GetIndexHandles(table table.Table, txn kv.Transaction, idx *column.IndexedCol) ([]int64, error) {
// GetIndexData returns index handles and index values.
func GetIndexData(table table.Table, txn kv.Transaction, idx *column.IndexedCol) ([]int64, []interface{}, error) {
var handles []int64
var vals []interface{}
kvIndex := kv.NewKVIndex(table.IndexPrefix(), idx.Name.L, idx.ID, idx.Unique)
it, err := kvIndex.SeekFirst(txn)
if err != nil {
return nil, errors.Trace(err)
return nil, nil, errors.Trace(err)
}
for {
_, h, err := it.Next()
val, h, err := it.Next()
if terror.ErrorEqual(err, io.EOF) {
break
} else if err != nil {
return nil, errors.Trace(err)
return nil, nil, errors.Trace(err)
}
handles = append(handles, h)
vals = append(vals, val)
}
return handles, nil
return handles, vals, nil
}
// GetTableData gets table row handles and column values.
// If there is no special iterator, it will be nil.
func GetTableData(table table.Table, retriever kv.Retriever) ([]int64, []interface{}, error) {
var handles []int64
var data []interface{}

View File

@ -137,14 +137,18 @@ func (s *testInspectSuite) TestInspect(c *C) {
c.Assert(d.(int64), Equals, int64(20))
}
handles, err = GetIndexHandles(tb, txn, indices[0])
handles, vals, err := GetIndexData(tb, txn, indices[0])
c.Assert(err, IsNil)
c.Assert(handles, HasLen, 2)
vals, err := GetIndexVals(tb, txn, indices[0].IndexInfo, handles[0])
c.Assert(err, IsNil)
c.Assert(vals, HasLen, 1)
c.Assert(vals[0], Equals, int64(10))
c.Assert(handles[0], Equals, int64(1))
c.Assert(handles[1], Equals, int64(2))
c.Assert(vals, HasLen, 2)
for _, d := range data[0].([]interface{}) {
c.Assert(d.(int64), Equals, int64(10))
}
for _, d := range data[1].([]interface{}) {
c.Assert(d.(int64), Equals, int64(20))
}
}
// mockContext represents mocked context.Context.