Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

kv, table: use minimal kv interfaces #739

Merged
merged 2 commits into from
Dec 17, 2015
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
kv, table: use minimal kv interfaces
  • Loading branch information
disksing committed Dec 16, 2015
commit a90413a656e974a82a005c9df3f4491f58ad524e
12 changes: 6 additions & 6 deletions kv/index_iter.go
Original file line number Diff line number Diff line change
Expand Up @@ -173,12 +173,12 @@ func (c *kvIndex) Create(rm RetrieverMutator, indexedValues []interface{}, h int
}

// Delete removes the entry for handle h and indexdValues from KV index.
func (c *kvIndex) Delete(rm RetrieverMutator, indexedValues []interface{}, h int64) error {
func (c *kvIndex) Delete(m Mutator, indexedValues []interface{}, h int64) error {
key, _, err := c.GenIndexKey(indexedValues, h)
if err != nil {
return errors.Trace(err)
}
err = rm.Delete(key)
err = m.Delete(key)
return errors.Trace(err)
}

Expand Down Expand Up @@ -209,12 +209,12 @@ func (c *kvIndex) Drop(rm RetrieverMutator) error {
}

// Seek searches KV index for the entry with indexedValues.
func (c *kvIndex) Seek(rm RetrieverMutator, indexedValues []interface{}) (iter IndexIterator, hit bool, err error) {
func (c *kvIndex) Seek(r Retriever, indexedValues []interface{}) (iter IndexIterator, hit bool, err error) {
key, _, err := c.GenIndexKey(indexedValues, 0)
if err != nil {
return nil, false, errors.Trace(err)
}
it, err := rm.Seek(key)
it, err := r.Seek(key)
if err != nil {
return nil, false, errors.Trace(err)
}
Expand All @@ -227,9 +227,9 @@ func (c *kvIndex) Seek(rm RetrieverMutator, indexedValues []interface{}) (iter I
}

// SeekFirst returns an iterator which points to the first entry of the KV index.
func (c *kvIndex) SeekFirst(rm RetrieverMutator) (iter IndexIterator, err error) {
func (c *kvIndex) SeekFirst(r Retriever) (iter IndexIterator, err error) {
prefix := []byte(c.prefix)
it, err := rm.Seek(prefix)
it, err := r.Seek(prefix)
if err != nil {
return nil, errors.Trace(err)
}
Expand Down
12 changes: 6 additions & 6 deletions kv/kv.go
Original file line number Diff line number Diff line change
Expand Up @@ -252,17 +252,17 @@ type IndexIterator interface {
// Index is the interface for index data on KV store.
type Index interface {
// Create supports insert into statement.
Create(rw RetrieverMutator, indexedValues []interface{}, h int64) error
Create(rm RetrieverMutator, indexedValues []interface{}, h int64) error
// Delete supports delete from statement.
Delete(rw RetrieverMutator, indexedValues []interface{}, h int64) error
Delete(m Mutator, indexedValues []interface{}, h int64) error
// Drop supports drop table, drop index statements.
Drop(rw RetrieverMutator) error
Drop(rm RetrieverMutator) error
// Exist supports check index exists or not.
Exist(rw RetrieverMutator, indexedValues []interface{}, h int64) (bool, int64, error)
Exist(rm RetrieverMutator, indexedValues []interface{}, h int64) (bool, int64, error)
// GenIndexKey generates an index key.
GenIndexKey(indexedValues []interface{}, h int64) (key []byte, distinct bool, err error)
// Seek supports where clause.
Seek(rw RetrieverMutator, indexedValues []interface{}) (iter IndexIterator, hit bool, err error)
Seek(r Retriever, indexedValues []interface{}) (iter IndexIterator, hit bool, err error)
// SeekFirst supports aggregate min and ascend order by.
SeekFirst(rw RetrieverMutator) (iter IndexIterator, err error)
SeekFirst(r Retriever) (iter IndexIterator, err error)
}
7 changes: 6 additions & 1 deletion stmt/stmts/truncate.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
package stmts

import (
"github.com/juju/errors"
"github.com/pingcap/tidb/context"
"github.com/pingcap/tidb/rset"
"github.com/pingcap/tidb/stmt"
Expand Down Expand Up @@ -61,5 +62,9 @@ func (s *TruncateTableStmt) Exec(ctx context.Context) (rset.Recordset, error) {
if err != nil {
return nil, err
}
return nil, t.Truncate(ctx)
txn, err := ctx.GetTxn(false)
if err != nil {
return nil, errors.Trace(err)
}
return nil, t.Truncate(txn)
}
2 changes: 1 addition & 1 deletion table/table.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ type Table interface {
RecordKey(h int64, col *column.Col) []byte

// Truncate truncates the table.
Truncate(ctx context.Context) (err error)
Truncate(rm kv.RetrieverMutator) (err error)

// AddRecord inserts a row into the table. Is h is 0, it will alloc an unique id inside.
AddRecord(ctx context.Context, r []interface{}, h int64) (recordID int64, err error)
Expand Down
6 changes: 3 additions & 3 deletions table/tables/tables.go
Original file line number Diff line number Diff line change
Expand Up @@ -282,12 +282,12 @@ func (t *Table) FindIndexByColName(name string) *column.IndexedCol {
}

// Truncate implements table.Table Truncate interface.
func (t *Table) Truncate(ctx context.Context) error {
err := util.DelKeyWithPrefix(ctx, t.KeyPrefix())
func (t *Table) Truncate(rm kv.RetrieverMutator) error {
err := util.DelKeyWithPrefix(rm, t.KeyPrefix())
if err != nil {
return errors.Trace(err)
}
return util.DelKeyWithPrefix(ctx, t.IndexPrefix())
return util.DelKeyWithPrefix(rm, t.IndexPrefix())
}

// UpdateRecord implements table.Table UpdateRecord interface.
Expand Down
2 changes: 1 addition & 1 deletion table/tables/tables_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ func (ts *testSuite) TestBasic(c *C) {
c.Assert(err, IsNil)
c.Assert(indexCnt(), Greater, 0)
// Make sure index data is also removed after tb.Truncate().
c.Assert(tb.Truncate(ctx), IsNil)
c.Assert(tb.Truncate(txn), IsNil)
c.Assert(indexCnt(), Equals, 0)

_, err = ts.se.Execute("drop table test.t")
Expand Down
16 changes: 5 additions & 11 deletions util/prefix_helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,12 @@ import (
"strings"

"github.com/juju/errors"
"github.com/pingcap/tidb/context"
"github.com/pingcap/tidb/kv"
)

// ScanMetaWithPrefix scans metadata with the prefix.
func ScanMetaWithPrefix(txn kv.Transaction, prefix string, filter func([]byte, []byte) bool) error {
iter, err := txn.Seek([]byte(prefix))
func ScanMetaWithPrefix(retriever kv.Retriever, prefix string, filter func([]byte, []byte) bool) error {
iter, err := retriever.Seek([]byte(prefix))
if err != nil {
return errors.Trace(err)
}
Expand Down Expand Up @@ -56,14 +55,9 @@ func ScanMetaWithPrefix(txn kv.Transaction, prefix string, filter func([]byte, [
}

// DelKeyWithPrefix deletes keys with prefix.
func DelKeyWithPrefix(ctx context.Context, prefix string) error {
txn, err := ctx.GetTxn(false)
if err != nil {
return errors.Trace(err)
}

func DelKeyWithPrefix(rm kv.RetrieverMutator, prefix string) error {
var keys []string
iter, err := txn.Seek([]byte(prefix))
iter, err := rm.Seek([]byte(prefix))
if err != nil {
return errors.Trace(err)
}
Expand All @@ -86,7 +80,7 @@ func DelKeyWithPrefix(ctx context.Context, prefix string) error {
}

for _, key := range keys {
err := txn.Delete([]byte(key))
err := rm.Delete([]byte(key))
if err != nil {
return errors.Trace(err)
}
Expand Down
6 changes: 4 additions & 2 deletions util/prefix_helper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -120,12 +120,14 @@ func (c *MockContext) FinishTxn(rollback bool) error {
func (s *testPrefixSuite) TestPrefix(c *C) {
ctx := &MockContext{10000000, make(map[fmt.Stringer]interface{}), s.s, nil}
ctx.fillTxn()
err := DelKeyWithPrefix(ctx, string(encodeInt(ctx.prefix)))
txn, err := ctx.GetTxn(false)
c.Assert(err, IsNil)
err = DelKeyWithPrefix(txn, string(encodeInt(ctx.prefix)))
c.Assert(err, IsNil)
err = ctx.FinishTxn(false)
c.Assert(err, IsNil)

txn, err := s.s.Begin()
txn, err = s.s.Begin()
c.Assert(err, IsNil)
str := "key100jfowi878230"
err = txn.Set([]byte(str), []byte("val32dfaskli384757^*&%^"))
Expand Down