port 117 fix to bolt
This commit is contained in:
parent
5d3a4a4a8f
commit
6b02f1a997
2 changed files with 36 additions and 32 deletions
|
|
@ -212,45 +212,45 @@ func PositionOf(tok *Token, d quad.Direction, qs *QuadStore) int {
|
||||||
case quad.Subject:
|
case quad.Subject:
|
||||||
return 0
|
return 0
|
||||||
case quad.Predicate:
|
case quad.Predicate:
|
||||||
return qs.hasher.Size()
|
return qs.hasherSize
|
||||||
case quad.Object:
|
case quad.Object:
|
||||||
return 2 * qs.hasher.Size()
|
return 2 * qs.hasherSize
|
||||||
case quad.Label:
|
case quad.Label:
|
||||||
return 3 * qs.hasher.Size()
|
return 3 * qs.hasherSize
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if bytes.Equal(tok.bucket, posBucket) {
|
if bytes.Equal(tok.bucket, posBucket) {
|
||||||
switch d {
|
switch d {
|
||||||
case quad.Subject:
|
case quad.Subject:
|
||||||
return 2 * qs.hasher.Size()
|
return 2 * qs.hasherSize
|
||||||
case quad.Predicate:
|
case quad.Predicate:
|
||||||
return 0
|
return 0
|
||||||
case quad.Object:
|
case quad.Object:
|
||||||
return qs.hasher.Size()
|
return qs.hasherSize
|
||||||
case quad.Label:
|
case quad.Label:
|
||||||
return 3 * qs.hasher.Size()
|
return 3 * qs.hasherSize
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if bytes.Equal(tok.bucket, ospBucket) {
|
if bytes.Equal(tok.bucket, ospBucket) {
|
||||||
switch d {
|
switch d {
|
||||||
case quad.Subject:
|
case quad.Subject:
|
||||||
return qs.hasher.Size()
|
return qs.hasherSize
|
||||||
case quad.Predicate:
|
case quad.Predicate:
|
||||||
return 2 * qs.hasher.Size()
|
return 2 * qs.hasherSize
|
||||||
case quad.Object:
|
case quad.Object:
|
||||||
return 0
|
return 0
|
||||||
case quad.Label:
|
case quad.Label:
|
||||||
return 3 * qs.hasher.Size()
|
return 3 * qs.hasherSize
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if bytes.Equal(tok.bucket, cpsBucket) {
|
if bytes.Equal(tok.bucket, cpsBucket) {
|
||||||
switch d {
|
switch d {
|
||||||
case quad.Subject:
|
case quad.Subject:
|
||||||
return 2 * qs.hasher.Size()
|
return 2 * qs.hasherSize
|
||||||
case quad.Predicate:
|
case quad.Predicate:
|
||||||
return qs.hasher.Size()
|
return qs.hasherSize
|
||||||
case quad.Object:
|
case quad.Object:
|
||||||
return 3 * qs.hasher.Size()
|
return 3 * qs.hasherSize
|
||||||
case quad.Label:
|
case quad.Label:
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -44,12 +44,13 @@ func (t *Token) Key() interface{} {
|
||||||
}
|
}
|
||||||
|
|
||||||
type QuadStore struct {
|
type QuadStore struct {
|
||||||
db *bolt.DB
|
db *bolt.DB
|
||||||
path string
|
path string
|
||||||
open bool
|
open bool
|
||||||
size int64
|
size int64
|
||||||
horizon int64
|
horizon int64
|
||||||
hasher hash.Hash
|
makeHasher func() hash.Hash
|
||||||
|
hasherSize int
|
||||||
}
|
}
|
||||||
|
|
||||||
func createNewBolt(path string, _ graph.Options) error {
|
func createNewBolt(path string, _ graph.Options) error {
|
||||||
|
|
@ -72,7 +73,8 @@ func createNewBolt(path string, _ graph.Options) error {
|
||||||
func newQuadStore(path string, options graph.Options) (graph.TripleStore, error) {
|
func newQuadStore(path string, options graph.Options) (graph.TripleStore, error) {
|
||||||
var qs QuadStore
|
var qs QuadStore
|
||||||
var err error
|
var err error
|
||||||
qs.hasher = sha1.New()
|
qs.hasherSize = sha1.Size
|
||||||
|
qs.makeHasher = sha1.New
|
||||||
db, err := bolt.Open(path, 0600, nil)
|
db, err := bolt.Open(path, 0600, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Errorln("Error, couldn't open! ", err)
|
glog.Errorln("Error, couldn't open! ", err)
|
||||||
|
|
@ -128,17 +130,19 @@ func bucketFor(d [4]quad.Direction) []byte {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (qs *QuadStore) createKeyFor(d [4]quad.Direction, triple quad.Quad) []byte {
|
func (qs *QuadStore) createKeyFor(d [4]quad.Direction, triple quad.Quad) []byte {
|
||||||
key := make([]byte, 0, (qs.hasher.Size() * 4))
|
hasher := qs.makeHasher()
|
||||||
key = append(key, qs.convertStringToByteHash(triple.Get(d[0]))...)
|
key := make([]byte, 0, (qs.hasherSize * 4))
|
||||||
key = append(key, qs.convertStringToByteHash(triple.Get(d[1]))...)
|
key = append(key, qs.convertStringToByteHash(triple.Get(d[0]), hasher)...)
|
||||||
key = append(key, qs.convertStringToByteHash(triple.Get(d[2]))...)
|
key = append(key, qs.convertStringToByteHash(triple.Get(d[1]), hasher)...)
|
||||||
key = append(key, qs.convertStringToByteHash(triple.Get(d[3]))...)
|
key = append(key, qs.convertStringToByteHash(triple.Get(d[2]), hasher)...)
|
||||||
|
key = append(key, qs.convertStringToByteHash(triple.Get(d[3]), hasher)...)
|
||||||
return key
|
return key
|
||||||
}
|
}
|
||||||
|
|
||||||
func (qs *QuadStore) createValueKeyFor(s string) []byte {
|
func (qs *QuadStore) createValueKeyFor(s string) []byte {
|
||||||
key := make([]byte, 0, qs.hasher.Size())
|
hasher := qs.makeHasher()
|
||||||
key = append(key, qs.convertStringToByteHash(s)...)
|
key := make([]byte, 0, qs.hasherSize)
|
||||||
|
key = append(key, qs.convertStringToByteHash(s, hasher)...)
|
||||||
return key
|
return key
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -354,11 +358,11 @@ func (qs *QuadStore) Quad(k graph.Value) quad.Quad {
|
||||||
return q
|
return q
|
||||||
}
|
}
|
||||||
|
|
||||||
func (qs *QuadStore) convertStringToByteHash(s string) []byte {
|
func (qs *QuadStore) convertStringToByteHash(s string, hasher hash.Hash) []byte {
|
||||||
qs.hasher.Reset()
|
hasher.Reset()
|
||||||
key := make([]byte, 0, qs.hasher.Size())
|
key := make([]byte, 0, qs.hasherSize)
|
||||||
qs.hasher.Write([]byte(s))
|
hasher.Write([]byte(s))
|
||||||
key = qs.hasher.Sum(key)
|
key = hasher.Sum(key)
|
||||||
return key
|
return key
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -463,7 +467,7 @@ func (qs *QuadStore) TripleDirection(val graph.Value, d quad.Direction) graph.Va
|
||||||
if offset != -1 {
|
if offset != -1 {
|
||||||
return &Token{
|
return &Token{
|
||||||
bucket: nodeBucket,
|
bucket: nodeBucket,
|
||||||
key: v.key[offset : offset+qs.hasher.Size()],
|
key: v.key[offset : offset+qs.hasherSize],
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return qs.ValueOf(qs.Quad(v).Get(d))
|
return qs.ValueOf(qs.Quad(v).Get(d))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue