fix mongo hasher
This commit is contained in:
parent
104e7d110d
commit
03798bc4fa
2 changed files with 27 additions and 23 deletions
|
|
@ -185,13 +185,13 @@ func (it *Iterator) Contains(v graph.Value) bool {
|
|||
case quad.Subject:
|
||||
offset = 0
|
||||
case quad.Predicate:
|
||||
offset = (it.qs.hasher.Size() * 2)
|
||||
offset = (it.qs.hasher_size * 2)
|
||||
case quad.Object:
|
||||
offset = (it.qs.hasher.Size() * 2) * 2
|
||||
offset = (it.qs.hasher_size * 2) * 2
|
||||
case quad.Label:
|
||||
offset = (it.qs.hasher.Size() * 2) * 3
|
||||
offset = (it.qs.hasher_size * 2) * 3
|
||||
}
|
||||
val := v.(string)[offset : it.qs.hasher.Size()*2+offset]
|
||||
val := v.(string)[offset : it.qs.hasher_size*2+offset]
|
||||
if val == it.hash {
|
||||
it.result = v
|
||||
return graph.ContainsLogOut(it, v, true)
|
||||
|
|
|
|||
|
|
@ -39,10 +39,11 @@ var _ graph.BulkLoader = (*TripleStore)(nil)
|
|||
const DefaultDBName = "cayley"
|
||||
|
||||
type TripleStore struct {
|
||||
session *mgo.Session
|
||||
db *mgo.Database
|
||||
hasher hash.Hash
|
||||
idCache *IDLru
|
||||
session *mgo.Session
|
||||
db *mgo.Database
|
||||
hasher_size int
|
||||
make_hasher func() hash.Hash
|
||||
idCache *IDLru
|
||||
}
|
||||
|
||||
func createNewMongoGraph(addr string, options graph.Options) error {
|
||||
|
|
@ -86,24 +87,26 @@ func newTripleStore(addr string, options graph.Options) (graph.TripleStore, erro
|
|||
}
|
||||
qs.db = conn.DB(dbName)
|
||||
qs.session = conn
|
||||
qs.hasher = sha1.New()
|
||||
qs.hasher_size = sha1.Size
|
||||
qs.make_hasher = func() hash.Hash { return sha1.New() }
|
||||
qs.idCache = NewIDLru(1 << 16)
|
||||
return &qs, nil
|
||||
}
|
||||
|
||||
func (qs *TripleStore) getIdForTriple(t quad.Quad) string {
|
||||
id := qs.ConvertStringToByteHash(t.Subject)
|
||||
id += qs.ConvertStringToByteHash(t.Predicate)
|
||||
id += qs.ConvertStringToByteHash(t.Object)
|
||||
id += qs.ConvertStringToByteHash(t.Label)
|
||||
hasher := qs.make_hasher()
|
||||
id := qs.convertStringToByteHash(t.Subject, hasher)
|
||||
id += qs.convertStringToByteHash(t.Predicate, hasher)
|
||||
id += qs.convertStringToByteHash(t.Object, hasher)
|
||||
id += qs.convertStringToByteHash(t.Label, hasher)
|
||||
return id
|
||||
}
|
||||
|
||||
func (qs *TripleStore) ConvertStringToByteHash(s string) string {
|
||||
qs.hasher.Reset()
|
||||
key := make([]byte, 0, qs.hasher.Size())
|
||||
qs.hasher.Write([]byte(s))
|
||||
key = qs.hasher.Sum(key)
|
||||
func (qs *TripleStore) convertStringToByteHash(s string, hasher hash.Hash) string {
|
||||
hasher.Reset()
|
||||
key := make([]byte, 0, qs.hasher_size)
|
||||
hasher.Write([]byte(s))
|
||||
key = hasher.Sum(key)
|
||||
return hex.EncodeToString(key)
|
||||
}
|
||||
|
||||
|
|
@ -243,7 +246,8 @@ func (qs *TripleStore) TriplesAllIterator() graph.Iterator {
|
|||
}
|
||||
|
||||
func (qs *TripleStore) ValueOf(s string) graph.Value {
|
||||
return qs.ConvertStringToByteHash(s)
|
||||
h := qs.make_hasher()
|
||||
return qs.convertStringToByteHash(s, h)
|
||||
}
|
||||
|
||||
func (qs *TripleStore) NameOf(v graph.Value) string {
|
||||
|
|
@ -288,13 +292,13 @@ func (qs *TripleStore) TripleDirection(in graph.Value, d quad.Direction) graph.V
|
|||
case quad.Subject:
|
||||
offset = 0
|
||||
case quad.Predicate:
|
||||
offset = (qs.hasher.Size() * 2)
|
||||
offset = (qs.hasher_size * 2)
|
||||
case quad.Object:
|
||||
offset = (qs.hasher.Size() * 2) * 2
|
||||
offset = (qs.hasher_size * 2) * 2
|
||||
case quad.Label:
|
||||
offset = (qs.hasher.Size() * 2) * 3
|
||||
offset = (qs.hasher_size * 2) * 3
|
||||
}
|
||||
val := in.(string)[offset : qs.hasher.Size()*2+offset]
|
||||
val := in.(string)[offset : qs.hasher_size*2+offset]
|
||||
return val
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue