Test list queries and iavl implementation
This commit is contained in:
parent
37b5d16b73
commit
744d035d95
|
@ -1,5 +1,5 @@
|
||||||
hash: 8c438edb7d269da439141e62f3e0c931fa9efaee54b13ce1e7330dc99179fddd
|
hash: 2848c30b31fb205f846dd7dfca14ebed8a3249cbc5aaa759066b2bab3e4bbf42
|
||||||
updated: 2017-07-20T15:39:36.659717024+02:00
|
updated: 2017-07-26T15:18:56.353872835-04:00
|
||||||
imports:
|
imports:
|
||||||
- name: github.com/bgentry/speakeasy
|
- name: github.com/bgentry/speakeasy
|
||||||
version: 4aabc24848ce5fd31929f7d1e4ea74d3709c14cd
|
version: 4aabc24848ce5fd31929f7d1e4ea74d3709c14cd
|
||||||
|
@ -105,7 +105,7 @@ imports:
|
||||||
- leveldb/table
|
- leveldb/table
|
||||||
- leveldb/util
|
- leveldb/util
|
||||||
- name: github.com/tendermint/abci
|
- name: github.com/tendermint/abci
|
||||||
version: 7f5f48b6b9ec3964de4b07b6c3cd05d7c91aeee5
|
version: 864d1f80b36b440bde030a5c18d8ac3aa8c2949d
|
||||||
subpackages:
|
subpackages:
|
||||||
- client
|
- client
|
||||||
- example/dummy
|
- example/dummy
|
||||||
|
@ -133,16 +133,15 @@ imports:
|
||||||
- data
|
- data
|
||||||
- data/base58
|
- data/base58
|
||||||
- name: github.com/tendermint/light-client
|
- name: github.com/tendermint/light-client
|
||||||
version: d63415027075bc5d74a98a718393b59b5c4279a5
|
version: fcf4e411583135a1900157b8b0274c41e20ea3a1
|
||||||
subpackages:
|
subpackages:
|
||||||
- certifiers
|
- certifiers
|
||||||
- certifiers/client
|
- certifiers/client
|
||||||
- certifiers/files
|
- certifiers/files
|
||||||
- proofs
|
- proofs
|
||||||
- name: github.com/tendermint/merkleeyes
|
- name: github.com/tendermint/merkleeyes
|
||||||
version: 102aaf5a8ffda1846413fb22805a94def2045b9f
|
version: fef0a1fc729f5b50c58a2dce04b4525aa06c2247
|
||||||
subpackages:
|
subpackages:
|
||||||
- app
|
|
||||||
- client
|
- client
|
||||||
- iavl
|
- iavl
|
||||||
- name: github.com/tendermint/tendermint
|
- name: github.com/tendermint/tendermint
|
||||||
|
@ -172,7 +171,7 @@ imports:
|
||||||
- types
|
- types
|
||||||
- version
|
- version
|
||||||
- name: github.com/tendermint/tmlibs
|
- name: github.com/tendermint/tmlibs
|
||||||
version: efb56aaea7517220bb3f42ff87b8004d554a17ff
|
version: 2f6f3e6aa70bb19b70a6e73210273fa127041070
|
||||||
subpackages:
|
subpackages:
|
||||||
- autofile
|
- autofile
|
||||||
- cli
|
- cli
|
||||||
|
|
|
@ -29,7 +29,7 @@ import:
|
||||||
- certifiers/client
|
- certifiers/client
|
||||||
- certifiers/files
|
- certifiers/files
|
||||||
- package: github.com/tendermint/merkleeyes
|
- package: github.com/tendermint/merkleeyes
|
||||||
version: develop
|
version: unstable
|
||||||
subpackages:
|
subpackages:
|
||||||
- client
|
- client
|
||||||
- iavl
|
- iavl
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
package merkle
|
package state
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
|
|
||||||
"github.com/tendermint/basecoin/state"
|
|
||||||
"github.com/tendermint/merkleeyes/iavl"
|
"github.com/tendermint/merkleeyes/iavl"
|
||||||
"github.com/tendermint/tmlibs/merkle"
|
"github.com/tendermint/tmlibs/merkle"
|
||||||
)
|
)
|
||||||
|
@ -79,7 +78,7 @@ type Bonsai struct {
|
||||||
merkle.Tree
|
merkle.Tree
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ state.SimpleDB = &Bonsai{}
|
var _ SimpleDB = &Bonsai{}
|
||||||
|
|
||||||
func NewBonsai(tree merkle.Tree) *Bonsai {
|
func NewBonsai(tree merkle.Tree) *Bonsai {
|
||||||
return &Bonsai{
|
return &Bonsai{
|
||||||
|
@ -104,38 +103,39 @@ func (b *Bonsai) Remove(key []byte) (value []byte) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Bonsai) List(start, end []byte, limit int) []state.Model {
|
func (b *Bonsai) List(start, end []byte, limit int) []Model {
|
||||||
var res []state.Model
|
res := []Model{}
|
||||||
stopAtCount := func(key []byte, value []byte) (stop bool) {
|
stopAtCount := func(key []byte, value []byte) (stop bool) {
|
||||||
m := state.Model{key, value}
|
m := Model{key, value}
|
||||||
res = append(res, m)
|
res = append(res, m)
|
||||||
return len(res) >= limit
|
// return false
|
||||||
|
return limit > 0 && len(res) >= limit
|
||||||
}
|
}
|
||||||
b.Tree.IterateRange(start, end, true, stopAtCount)
|
b.Tree.IterateRange(start, end, true, stopAtCount)
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Bonsai) First(start, end []byte) state.Model {
|
func (b *Bonsai) First(start, end []byte) Model {
|
||||||
var m state.Model
|
var m Model
|
||||||
stopAtFirst := func(key []byte, value []byte) (stop bool) {
|
stopAtFirst := func(key []byte, value []byte) (stop bool) {
|
||||||
m = state.Model{key, value}
|
m = Model{key, value}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
b.Tree.IterateRange(start, end, true, stopAtFirst)
|
b.Tree.IterateRange(start, end, true, stopAtFirst)
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Bonsai) Last(start, end []byte) state.Model {
|
func (b *Bonsai) Last(start, end []byte) Model {
|
||||||
var m state.Model
|
var m Model
|
||||||
stopAtFirst := func(key []byte, value []byte) (stop bool) {
|
stopAtFirst := func(key []byte, value []byte) (stop bool) {
|
||||||
m = state.Model{key, value}
|
m = Model{key, value}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
b.Tree.IterateRange(start, end, false, stopAtFirst)
|
b.Tree.IterateRange(start, end, false, stopAtFirst)
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Bonsai) Checkpoint() state.SimpleDB {
|
func (b *Bonsai) Checkpoint() SimpleDB {
|
||||||
return &Bonsai{
|
return &Bonsai{
|
||||||
id: b.id,
|
id: b.id,
|
||||||
Tree: b.Tree.Copy(),
|
Tree: b.Tree.Copy(),
|
||||||
|
@ -145,7 +145,7 @@ func (b *Bonsai) Checkpoint() state.SimpleDB {
|
||||||
// Commit will take all changes from the checkpoint and write
|
// Commit will take all changes from the checkpoint and write
|
||||||
// them to the parent.
|
// them to the parent.
|
||||||
// Returns an error if this is not a child of this one
|
// Returns an error if this is not a child of this one
|
||||||
func (b *Bonsai) Commit(sub state.SimpleDB) error {
|
func (b *Bonsai) Commit(sub SimpleDB) error {
|
||||||
bb, ok := sub.(*Bonsai)
|
bb, ok := sub.(*Bonsai)
|
||||||
if !ok || (b.id != bb.id) {
|
if !ok || (b.id != bb.id) {
|
||||||
return errors.New("Not a sub-transaction")
|
return errors.New("Not a sub-transaction")
|
|
@ -4,11 +4,13 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
"github.com/tendermint/merkleeyes/iavl"
|
||||||
)
|
)
|
||||||
|
|
||||||
func GetDBs() []SimpleDB {
|
func GetDBs() []SimpleDB {
|
||||||
return []SimpleDB{
|
return []SimpleDB{
|
||||||
NewMemKVStore(),
|
NewMemKVStore(),
|
||||||
|
NewBonsai(iavl.NewIAVLTree(0, nil)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue