Rename triple entities were relevant
This commit is contained in:
parent
ddf8849e60
commit
443a091b72
62 changed files with 664 additions and 664 deletions
|
|
@ -34,12 +34,12 @@ type AllIterator struct {
|
|||
dir quad.Direction
|
||||
open bool
|
||||
iter ldbit.Iterator
|
||||
ts *TripleStore
|
||||
qs *QuadStore
|
||||
ro *opt.ReadOptions
|
||||
result graph.Value
|
||||
}
|
||||
|
||||
func NewAllIterator(prefix string, d quad.Direction, ts *TripleStore) *AllIterator {
|
||||
func NewAllIterator(prefix string, d quad.Direction, qs *QuadStore) *AllIterator {
|
||||
opts := &opt.ReadOptions{
|
||||
DontFillCache: true,
|
||||
}
|
||||
|
|
@ -47,11 +47,11 @@ func NewAllIterator(prefix string, d quad.Direction, ts *TripleStore) *AllIterat
|
|||
it := AllIterator{
|
||||
uid: iterator.NextUID(),
|
||||
ro: opts,
|
||||
iter: ts.db.NewIterator(nil, opts),
|
||||
iter: qs.db.NewIterator(nil, opts),
|
||||
prefix: []byte(prefix),
|
||||
dir: d,
|
||||
open: true,
|
||||
ts: ts,
|
||||
qs: qs,
|
||||
}
|
||||
|
||||
it.iter.Seek(it.prefix)
|
||||
|
|
@ -71,7 +71,7 @@ func (it *AllIterator) UID() uint64 {
|
|||
|
||||
func (it *AllIterator) Reset() {
|
||||
if !it.open {
|
||||
it.iter = it.ts.db.NewIterator(nil, it.ro)
|
||||
it.iter = it.qs.db.NewIterator(nil, it.ro)
|
||||
it.open = true
|
||||
}
|
||||
it.iter.Seek(it.prefix)
|
||||
|
|
@ -96,7 +96,7 @@ func (it *AllIterator) TagResults(dst map[string]graph.Value) {
|
|||
}
|
||||
|
||||
func (it *AllIterator) Clone() graph.Iterator {
|
||||
out := NewAllIterator(string(it.prefix), it.dir, it.ts)
|
||||
out := NewAllIterator(string(it.prefix), it.dir, it.qs)
|
||||
out.tags.CopyFrom(it)
|
||||
return out
|
||||
}
|
||||
|
|
@ -151,7 +151,7 @@ func (it *AllIterator) Close() {
|
|||
}
|
||||
|
||||
func (it *AllIterator) Size() (int64, bool) {
|
||||
size, err := it.ts.SizeOfPrefix(it.prefix)
|
||||
size, err := it.qs.SizeOfPrefix(it.prefix)
|
||||
if err == nil {
|
||||
return size, false
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,13 +37,13 @@ type Iterator struct {
|
|||
dir quad.Direction
|
||||
open bool
|
||||
iter ldbit.Iterator
|
||||
qs *TripleStore
|
||||
qs *QuadStore
|
||||
ro *opt.ReadOptions
|
||||
originalPrefix string
|
||||
result graph.Value
|
||||
}
|
||||
|
||||
func NewIterator(prefix string, d quad.Direction, value graph.Value, qs *TripleStore) *Iterator {
|
||||
func NewIterator(prefix string, d quad.Direction, value graph.Value, qs *QuadStore) *Iterator {
|
||||
vb := value.(Token)
|
||||
p := make([]byte, 0, 2+hashSize)
|
||||
p = append(p, []byte(prefix)...)
|
||||
|
|
@ -173,7 +173,7 @@ func (it *Iterator) SubIterators() []graph.Iterator {
|
|||
return nil
|
||||
}
|
||||
|
||||
func PositionOf(prefix []byte, d quad.Direction, qs *TripleStore) int {
|
||||
func PositionOf(prefix []byte, d quad.Direction, qs *QuadStore) int {
|
||||
if bytes.Equal(prefix, []byte("sp")) {
|
||||
switch d {
|
||||
case quad.Subject:
|
||||
|
|
@ -232,7 +232,7 @@ func (it *Iterator) Contains(v graph.Value) bool {
|
|||
}
|
||||
offset := PositionOf(val[0:2], it.dir, it.qs)
|
||||
if bytes.HasPrefix(val[offset:], it.checkId[1:]) {
|
||||
// You may ask, why don't we check to see if it's a valid (not deleted) triple
|
||||
// You may ask, why don't we check to see if it's a valid (not deleted) quad
|
||||
// again?
|
||||
//
|
||||
// We've already done that -- in order to get the graph.Value token in the
|
||||
|
|
|
|||
|
|
@ -27,8 +27,8 @@ import (
|
|||
"github.com/google/cayley/writer"
|
||||
)
|
||||
|
||||
func makeTripleSet() []quad.Quad {
|
||||
tripleSet := []quad.Quad{
|
||||
func makeQuadSet() []quad.Quad {
|
||||
quadSet := []quad.Quad{
|
||||
{"A", "follows", "B", ""},
|
||||
{"C", "follows", "B", ""},
|
||||
{"C", "follows", "D", ""},
|
||||
|
|
@ -41,10 +41,10 @@ func makeTripleSet() []quad.Quad {
|
|||
{"D", "status", "cool", "status_graph"},
|
||||
{"G", "status", "cool", "status_graph"},
|
||||
}
|
||||
return tripleSet
|
||||
return quadSet
|
||||
}
|
||||
|
||||
func iteratedTriples(qs graph.TripleStore, it graph.Iterator) []quad.Quad {
|
||||
func iteratedQuads(qs graph.QuadStore, it graph.Iterator) []quad.Quad {
|
||||
var res ordered
|
||||
for graph.Next(it) {
|
||||
res = append(res, qs.Quad(it.Result()))
|
||||
|
|
@ -80,7 +80,7 @@ func (o ordered) Less(i, j int) bool {
|
|||
}
|
||||
func (o ordered) Swap(i, j int) { o[i], o[j] = o[j], o[i] }
|
||||
|
||||
func iteratedNames(qs graph.TripleStore, it graph.Iterator) []string {
|
||||
func iteratedNames(qs graph.QuadStore, it graph.Iterator) []string {
|
||||
var res []string
|
||||
for graph.Next(it) {
|
||||
res = append(res, qs.NameOf(it.Result()))
|
||||
|
|
@ -101,9 +101,9 @@ func TestCreateDatabase(t *testing.T) {
|
|||
t.Fatal("Failed to create LevelDB database.")
|
||||
}
|
||||
|
||||
qs, err := newTripleStore(tmpDir, nil)
|
||||
qs, err := newQuadStore(tmpDir, nil)
|
||||
if qs == nil || err != nil {
|
||||
t.Error("Failed to create leveldb TripleStore.")
|
||||
t.Error("Failed to create leveldb QuadStore.")
|
||||
}
|
||||
if s := qs.Size(); s != 0 {
|
||||
t.Errorf("Unexpected size, got:%d expected:0", s)
|
||||
|
|
@ -131,9 +131,9 @@ func TestLoadDatabase(t *testing.T) {
|
|||
t.Fatal("Failed to create LevelDB database.")
|
||||
}
|
||||
|
||||
qs, err := newTripleStore(tmpDir, nil)
|
||||
qs, err := newQuadStore(tmpDir, nil)
|
||||
if qs == nil || err != nil {
|
||||
t.Error("Failed to create leveldb TripleStore.")
|
||||
t.Error("Failed to create leveldb QuadStore.")
|
||||
}
|
||||
|
||||
w, _ := writer.NewSingleReplication(qs, nil)
|
||||
|
|
@ -144,7 +144,7 @@ func TestLoadDatabase(t *testing.T) {
|
|||
}
|
||||
}
|
||||
if s := qs.Size(); s != 1 {
|
||||
t.Errorf("Unexpected triplestore size, got:%d expect:1", s)
|
||||
t.Errorf("Unexpected quadstore size, got:%d expect:1", s)
|
||||
}
|
||||
qs.Close()
|
||||
|
||||
|
|
@ -152,31 +152,31 @@ func TestLoadDatabase(t *testing.T) {
|
|||
if err != nil {
|
||||
t.Fatal("Failed to create LevelDB database.")
|
||||
}
|
||||
qs, err = newTripleStore(tmpDir, nil)
|
||||
qs, err = newQuadStore(tmpDir, nil)
|
||||
if qs == nil || err != nil {
|
||||
t.Error("Failed to create leveldb TripleStore.")
|
||||
t.Error("Failed to create leveldb QuadStore.")
|
||||
}
|
||||
w, _ = writer.NewSingleReplication(qs, nil)
|
||||
|
||||
ts2, didConvert := qs.(*TripleStore)
|
||||
ts2, didConvert := qs.(*QuadStore)
|
||||
if !didConvert {
|
||||
t.Errorf("Could not convert from generic to LevelDB TripleStore")
|
||||
t.Errorf("Could not convert from generic to LevelDB QuadStore")
|
||||
}
|
||||
|
||||
w.AddQuadSet(makeTripleSet())
|
||||
w.AddQuadSet(makeQuadSet())
|
||||
if s := qs.Size(); s != 11 {
|
||||
t.Errorf("Unexpected triplestore size, got:%d expect:11", s)
|
||||
t.Errorf("Unexpected quadstore size, got:%d expect:11", s)
|
||||
}
|
||||
if s := ts2.SizeOf(qs.ValueOf("B")); s != 5 {
|
||||
t.Errorf("Unexpected triplestore size, got:%d expect:5", s)
|
||||
t.Errorf("Unexpected quadstore size, got:%d expect:5", s)
|
||||
}
|
||||
|
||||
w.RemoveQuad(quad.Quad{"A", "follows", "B", ""})
|
||||
if s := qs.Size(); s != 10 {
|
||||
t.Errorf("Unexpected triplestore size after RemoveTriple, got:%d expect:10", s)
|
||||
t.Errorf("Unexpected quadstore size after RemoveQuad, got:%d expect:10", s)
|
||||
}
|
||||
if s := ts2.SizeOf(qs.ValueOf("B")); s != 4 {
|
||||
t.Errorf("Unexpected triplestore size, got:%d expect:4", s)
|
||||
t.Errorf("Unexpected quadstore size, got:%d expect:4", s)
|
||||
}
|
||||
|
||||
qs.Close()
|
||||
|
|
@ -195,13 +195,13 @@ func TestIterator(t *testing.T) {
|
|||
t.Fatal("Failed to create LevelDB database.")
|
||||
}
|
||||
|
||||
qs, err := newTripleStore(tmpDir, nil)
|
||||
qs, err := newQuadStore(tmpDir, nil)
|
||||
if qs == nil || err != nil {
|
||||
t.Error("Failed to create leveldb TripleStore.")
|
||||
t.Error("Failed to create leveldb QuadStore.")
|
||||
}
|
||||
|
||||
w, _ := writer.NewSingleReplication(qs, nil)
|
||||
w.AddQuadSet(makeTripleSet())
|
||||
w.AddQuadSet(makeQuadSet())
|
||||
var it graph.Iterator
|
||||
|
||||
it = qs.NodesAllIterator()
|
||||
|
|
@ -262,19 +262,19 @@ func TestIterator(t *testing.T) {
|
|||
*/
|
||||
it.Reset()
|
||||
|
||||
it = qs.TriplesAllIterator()
|
||||
it = qs.QuadsAllIterator()
|
||||
graph.Next(it)
|
||||
triple := qs.Quad(it.Result())
|
||||
set := makeTripleSet()
|
||||
q := qs.Quad(it.Result())
|
||||
set := makeQuadSet()
|
||||
var ok bool
|
||||
for _, t := range set {
|
||||
if t.String() == triple.String() {
|
||||
if t.String() == q.String() {
|
||||
ok = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !ok {
|
||||
t.Errorf("Failed to find %q during iteration, got:%q", triple, set)
|
||||
t.Errorf("Failed to find %q during iteration, got:%q", q, set)
|
||||
}
|
||||
|
||||
qs.Close()
|
||||
|
|
@ -290,14 +290,14 @@ func TestSetIterator(t *testing.T) {
|
|||
t.Fatalf("Failed to create working directory")
|
||||
}
|
||||
|
||||
qs, err := newTripleStore(tmpDir, nil)
|
||||
qs, err := newQuadStore(tmpDir, nil)
|
||||
if qs == nil || err != nil {
|
||||
t.Error("Failed to create leveldb TripleStore.")
|
||||
t.Error("Failed to create leveldb QuadStore.")
|
||||
}
|
||||
defer qs.Close()
|
||||
|
||||
w, _ := writer.NewSingleReplication(qs, nil)
|
||||
w.AddQuadSet(makeTripleSet())
|
||||
w.AddQuadSet(makeQuadSet())
|
||||
|
||||
expect := []quad.Quad{
|
||||
{"C", "follows", "B", ""},
|
||||
|
|
@ -306,46 +306,46 @@ func TestSetIterator(t *testing.T) {
|
|||
sort.Sort(ordered(expect))
|
||||
|
||||
// Subject iterator.
|
||||
it := qs.TripleIterator(quad.Subject, qs.ValueOf("C"))
|
||||
it := qs.QuadIterator(quad.Subject, qs.ValueOf("C"))
|
||||
|
||||
if got := iteratedTriples(qs, it); !reflect.DeepEqual(got, expect) {
|
||||
if got := iteratedQuads(qs, it); !reflect.DeepEqual(got, expect) {
|
||||
t.Errorf("Failed to get expected results, got:%v expect:%v", got, expect)
|
||||
}
|
||||
it.Reset()
|
||||
|
||||
and := iterator.NewAnd()
|
||||
and.AddSubIterator(qs.TriplesAllIterator())
|
||||
and.AddSubIterator(qs.QuadsAllIterator())
|
||||
and.AddSubIterator(it)
|
||||
|
||||
if got := iteratedTriples(qs, and); !reflect.DeepEqual(got, expect) {
|
||||
if got := iteratedQuads(qs, and); !reflect.DeepEqual(got, expect) {
|
||||
t.Errorf("Failed to get confirm expected results, got:%v expect:%v", got, expect)
|
||||
}
|
||||
|
||||
// Object iterator.
|
||||
it = qs.TripleIterator(quad.Object, qs.ValueOf("F"))
|
||||
it = qs.QuadIterator(quad.Object, qs.ValueOf("F"))
|
||||
|
||||
expect = []quad.Quad{
|
||||
{"B", "follows", "F", ""},
|
||||
{"E", "follows", "F", ""},
|
||||
}
|
||||
sort.Sort(ordered(expect))
|
||||
if got := iteratedTriples(qs, it); !reflect.DeepEqual(got, expect) {
|
||||
if got := iteratedQuads(qs, it); !reflect.DeepEqual(got, expect) {
|
||||
t.Errorf("Failed to get expected results, got:%v expect:%v", got, expect)
|
||||
}
|
||||
|
||||
and = iterator.NewAnd()
|
||||
and.AddSubIterator(qs.TripleIterator(quad.Subject, qs.ValueOf("B")))
|
||||
and.AddSubIterator(qs.QuadIterator(quad.Subject, qs.ValueOf("B")))
|
||||
and.AddSubIterator(it)
|
||||
|
||||
expect = []quad.Quad{
|
||||
{"B", "follows", "F", ""},
|
||||
}
|
||||
if got := iteratedTriples(qs, and); !reflect.DeepEqual(got, expect) {
|
||||
if got := iteratedQuads(qs, and); !reflect.DeepEqual(got, expect) {
|
||||
t.Errorf("Failed to get confirm expected results, got:%v expect:%v", got, expect)
|
||||
}
|
||||
|
||||
// Predicate iterator.
|
||||
it = qs.TripleIterator(quad.Predicate, qs.ValueOf("status"))
|
||||
it = qs.QuadIterator(quad.Predicate, qs.ValueOf("status"))
|
||||
|
||||
expect = []quad.Quad{
|
||||
{"B", "status", "cool", "status_graph"},
|
||||
|
|
@ -353,12 +353,12 @@ func TestSetIterator(t *testing.T) {
|
|||
{"G", "status", "cool", "status_graph"},
|
||||
}
|
||||
sort.Sort(ordered(expect))
|
||||
if got := iteratedTriples(qs, it); !reflect.DeepEqual(got, expect) {
|
||||
if got := iteratedQuads(qs, it); !reflect.DeepEqual(got, expect) {
|
||||
t.Errorf("Failed to get expected results from predicate iterator, got:%v expect:%v", got, expect)
|
||||
}
|
||||
|
||||
// Label iterator.
|
||||
it = qs.TripleIterator(quad.Label, qs.ValueOf("status_graph"))
|
||||
it = qs.QuadIterator(quad.Label, qs.ValueOf("status_graph"))
|
||||
|
||||
expect = []quad.Quad{
|
||||
{"B", "status", "cool", "status_graph"},
|
||||
|
|
@ -366,20 +366,20 @@ func TestSetIterator(t *testing.T) {
|
|||
{"G", "status", "cool", "status_graph"},
|
||||
}
|
||||
sort.Sort(ordered(expect))
|
||||
if got := iteratedTriples(qs, it); !reflect.DeepEqual(got, expect) {
|
||||
if got := iteratedQuads(qs, it); !reflect.DeepEqual(got, expect) {
|
||||
t.Errorf("Failed to get expected results from predicate iterator, got:%v expect:%v", got, expect)
|
||||
}
|
||||
it.Reset()
|
||||
|
||||
// Order is important
|
||||
and = iterator.NewAnd()
|
||||
and.AddSubIterator(qs.TripleIterator(quad.Subject, qs.ValueOf("B")))
|
||||
and.AddSubIterator(qs.QuadIterator(quad.Subject, qs.ValueOf("B")))
|
||||
and.AddSubIterator(it)
|
||||
|
||||
expect = []quad.Quad{
|
||||
{"B", "status", "cool", "status_graph"},
|
||||
}
|
||||
if got := iteratedTriples(qs, and); !reflect.DeepEqual(got, expect) {
|
||||
if got := iteratedQuads(qs, and); !reflect.DeepEqual(got, expect) {
|
||||
t.Errorf("Failed to get confirm expected results, got:%v expect:%v", got, expect)
|
||||
}
|
||||
it.Reset()
|
||||
|
|
@ -387,12 +387,12 @@ func TestSetIterator(t *testing.T) {
|
|||
// Order is important
|
||||
and = iterator.NewAnd()
|
||||
and.AddSubIterator(it)
|
||||
and.AddSubIterator(qs.TripleIterator(quad.Subject, qs.ValueOf("B")))
|
||||
and.AddSubIterator(qs.QuadIterator(quad.Subject, qs.ValueOf("B")))
|
||||
|
||||
expect = []quad.Quad{
|
||||
{"B", "status", "cool", "status_graph"},
|
||||
}
|
||||
if got := iteratedTriples(qs, and); !reflect.DeepEqual(got, expect) {
|
||||
if got := iteratedQuads(qs, and); !reflect.DeepEqual(got, expect) {
|
||||
t.Errorf("Failed to get confirm expected results, got:%v expect:%v", got, expect)
|
||||
}
|
||||
}
|
||||
|
|
@ -405,13 +405,13 @@ func TestOptimize(t *testing.T) {
|
|||
if err != nil {
|
||||
t.Fatalf("Failed to create working directory")
|
||||
}
|
||||
qs, err := newTripleStore(tmpDir, nil)
|
||||
qs, err := newQuadStore(tmpDir, nil)
|
||||
if qs == nil || err != nil {
|
||||
t.Error("Failed to create leveldb TripleStore.")
|
||||
t.Error("Failed to create leveldb QuadStore.")
|
||||
}
|
||||
|
||||
w, _ := writer.NewSingleReplication(qs, nil)
|
||||
w.AddQuadSet(makeTripleSet())
|
||||
w.AddQuadSet(makeQuadSet())
|
||||
|
||||
// With an linksto-fixed pair
|
||||
fixed := qs.FixedIterator()
|
||||
|
|
@ -428,9 +428,9 @@ func TestOptimize(t *testing.T) {
|
|||
t.Errorf("Optimized iterator type does not match original, got:%v expect:%v", newIt.Type(), Type())
|
||||
}
|
||||
|
||||
newTriples := iteratedTriples(qs, newIt)
|
||||
oldTriples := iteratedTriples(qs, oldIt)
|
||||
if !reflect.DeepEqual(newTriples, oldTriples) {
|
||||
newQuads := iteratedQuads(qs, newIt)
|
||||
oldQuads := iteratedQuads(qs, oldIt)
|
||||
if !reflect.DeepEqual(newQuads, oldQuads) {
|
||||
t.Errorf("Optimized iteration does not match original")
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ import (
|
|||
)
|
||||
|
||||
func init() {
|
||||
graph.RegisterTripleStore("leveldb", true, newTripleStore, createNewLevelDB)
|
||||
graph.RegisterQuadStore("leveldb", true, newQuadStore, createNewLevelDB)
|
||||
}
|
||||
|
||||
const (
|
||||
|
|
@ -57,7 +57,7 @@ func (t Token) Key() interface{} {
|
|||
return string(t)
|
||||
}
|
||||
|
||||
type TripleStore struct {
|
||||
type QuadStore struct {
|
||||
dbOpts *opt.Options
|
||||
db *leveldb.DB
|
||||
path string
|
||||
|
|
@ -76,7 +76,7 @@ func createNewLevelDB(path string, _ graph.Options) error {
|
|||
return err
|
||||
}
|
||||
defer db.Close()
|
||||
qs := &TripleStore{}
|
||||
qs := &QuadStore{}
|
||||
qs.db = db
|
||||
qs.writeopts = &opt.WriteOptions{
|
||||
Sync: true,
|
||||
|
|
@ -85,8 +85,8 @@ func createNewLevelDB(path string, _ graph.Options) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func newTripleStore(path string, options graph.Options) (graph.TripleStore, error) {
|
||||
var qs TripleStore
|
||||
func newQuadStore(path string, options graph.Options) (graph.QuadStore, error) {
|
||||
var qs QuadStore
|
||||
var err error
|
||||
qs.path = path
|
||||
cache_size := DefaultCacheSize
|
||||
|
|
@ -121,7 +121,7 @@ func newTripleStore(path string, options graph.Options) (graph.TripleStore, erro
|
|||
return &qs, nil
|
||||
}
|
||||
|
||||
func (qs *TripleStore) GetStats() string {
|
||||
func (qs *QuadStore) GetStats() string {
|
||||
out := ""
|
||||
stats, err := qs.db.GetProperty("leveldb.stats")
|
||||
if err == nil {
|
||||
|
|
@ -131,33 +131,33 @@ func (qs *TripleStore) GetStats() string {
|
|||
return out
|
||||
}
|
||||
|
||||
func (qs *TripleStore) Size() int64 {
|
||||
func (qs *QuadStore) Size() int64 {
|
||||
return qs.size
|
||||
}
|
||||
|
||||
func (qs *TripleStore) Horizon() int64 {
|
||||
func (qs *QuadStore) Horizon() int64 {
|
||||
return qs.horizon
|
||||
}
|
||||
|
||||
func (qa *TripleStore) createDeltaKeyFor(d graph.Delta) []byte {
|
||||
func (qa *QuadStore) createDeltaKeyFor(d graph.Delta) []byte {
|
||||
key := make([]byte, 0, 19)
|
||||
key = append(key, 'd')
|
||||
key = append(key, []byte(fmt.Sprintf("%018x", d.ID))...)
|
||||
return key
|
||||
}
|
||||
|
||||
func (qs *TripleStore) createKeyFor(d [4]quad.Direction, triple quad.Quad) []byte {
|
||||
func (qs *QuadStore) createKeyFor(d [4]quad.Direction, q quad.Quad) []byte {
|
||||
key := make([]byte, 0, 2+(hashSize*3))
|
||||
// TODO(kortschak) Remove dependence on String() method.
|
||||
key = append(key, []byte{d[0].Prefix(), d[1].Prefix()}...)
|
||||
key = append(key, qs.convertStringToByteHash(triple.Get(d[0]))...)
|
||||
key = append(key, qs.convertStringToByteHash(triple.Get(d[1]))...)
|
||||
key = append(key, qs.convertStringToByteHash(triple.Get(d[2]))...)
|
||||
key = append(key, qs.convertStringToByteHash(triple.Get(d[3]))...)
|
||||
key = append(key, qs.convertStringToByteHash(q.Get(d[0]))...)
|
||||
key = append(key, qs.convertStringToByteHash(q.Get(d[1]))...)
|
||||
key = append(key, qs.convertStringToByteHash(q.Get(d[2]))...)
|
||||
key = append(key, qs.convertStringToByteHash(q.Get(d[3]))...)
|
||||
return key
|
||||
}
|
||||
|
||||
func (qs *TripleStore) createValueKeyFor(s string) []byte {
|
||||
func (qs *QuadStore) createValueKeyFor(s string) []byte {
|
||||
key := make([]byte, 0, 1+hashSize)
|
||||
key = append(key, []byte("z")...)
|
||||
key = append(key, qs.convertStringToByteHash(s)...)
|
||||
|
|
@ -177,7 +177,7 @@ var (
|
|||
cps = [4]quad.Direction{quad.Label, quad.Predicate, quad.Subject, quad.Object}
|
||||
)
|
||||
|
||||
func (qs *TripleStore) ApplyDeltas(deltas []graph.Delta) error {
|
||||
func (qs *QuadStore) ApplyDeltas(deltas []graph.Delta) error {
|
||||
batch := &leveldb.Batch{}
|
||||
resizeMap := make(map[string]int64)
|
||||
size_change := int64(0)
|
||||
|
|
@ -214,14 +214,14 @@ func (qs *TripleStore) ApplyDeltas(deltas []graph.Delta) error {
|
|||
}
|
||||
err := qs.db.Write(batch, qs.writeopts)
|
||||
if err != nil {
|
||||
glog.Error("Couldn't write to DB for tripleset.")
|
||||
glog.Error("Couldn't write to DB for quadset.")
|
||||
return err
|
||||
}
|
||||
qs.size += size_change
|
||||
return nil
|
||||
}
|
||||
|
||||
func (qs *TripleStore) buildQuadWrite(batch *leveldb.Batch, q quad.Quad, id int64, isAdd bool) error {
|
||||
func (qs *QuadStore) buildQuadWrite(batch *leveldb.Batch, q quad.Quad, id int64, isAdd bool) error {
|
||||
var entry IndexEntry
|
||||
data, err := qs.db.Get(qs.createKeyFor(spo, q), qs.readopts)
|
||||
if err != nil && err != leveldb.ErrNotFound {
|
||||
|
|
@ -263,7 +263,7 @@ type ValueData struct {
|
|||
Size int64
|
||||
}
|
||||
|
||||
func (qs *TripleStore) UpdateValueKeyBy(name string, amount int64, batch *leveldb.Batch) error {
|
||||
func (qs *QuadStore) UpdateValueKeyBy(name string, amount int64, batch *leveldb.Batch) error {
|
||||
value := &ValueData{name, amount}
|
||||
key := qs.createValueKeyFor(name)
|
||||
b, err := qs.db.Get(key, qs.readopts)
|
||||
|
|
@ -303,7 +303,7 @@ func (qs *TripleStore) UpdateValueKeyBy(name string, amount int64, batch *leveld
|
|||
return nil
|
||||
}
|
||||
|
||||
func (qs *TripleStore) Close() {
|
||||
func (qs *QuadStore) Close() {
|
||||
buf := new(bytes.Buffer)
|
||||
err := binary.Write(buf, binary.LittleEndian, qs.size)
|
||||
if err == nil {
|
||||
|
|
@ -328,26 +328,26 @@ func (qs *TripleStore) Close() {
|
|||
qs.open = false
|
||||
}
|
||||
|
||||
func (qs *TripleStore) Quad(k graph.Value) quad.Quad {
|
||||
var triple quad.Quad
|
||||
func (qs *QuadStore) Quad(k graph.Value) quad.Quad {
|
||||
var q quad.Quad
|
||||
b, err := qs.db.Get(k.(Token), qs.readopts)
|
||||
if err != nil && err != leveldb.ErrNotFound {
|
||||
glog.Error("Error: couldn't get triple from DB.")
|
||||
glog.Error("Error: couldn't get quad from DB.")
|
||||
return quad.Quad{}
|
||||
}
|
||||
if err == leveldb.ErrNotFound {
|
||||
// No harm, no foul.
|
||||
return quad.Quad{}
|
||||
}
|
||||
err = json.Unmarshal(b, &triple)
|
||||
err = json.Unmarshal(b, &q)
|
||||
if err != nil {
|
||||
glog.Error("Error: couldn't reconstruct triple.")
|
||||
glog.Error("Error: couldn't reconstruct quad.")
|
||||
return quad.Quad{}
|
||||
}
|
||||
return triple
|
||||
return q
|
||||
}
|
||||
|
||||
func (qs *TripleStore) convertStringToByteHash(s string) []byte {
|
||||
func (qs *QuadStore) convertStringToByteHash(s string) []byte {
|
||||
h := hashPool.Get().(hash.Hash)
|
||||
h.Reset()
|
||||
defer hashPool.Put(h)
|
||||
|
|
@ -357,11 +357,11 @@ func (qs *TripleStore) convertStringToByteHash(s string) []byte {
|
|||
return key
|
||||
}
|
||||
|
||||
func (qs *TripleStore) ValueOf(s string) graph.Value {
|
||||
func (qs *QuadStore) ValueOf(s string) graph.Value {
|
||||
return Token(qs.createValueKeyFor(s))
|
||||
}
|
||||
|
||||
func (qs *TripleStore) valueData(value_key []byte) ValueData {
|
||||
func (qs *QuadStore) valueData(value_key []byte) ValueData {
|
||||
var out ValueData
|
||||
if glog.V(3) {
|
||||
glog.V(3).Infof("%s %v", string(value_key[0]), value_key)
|
||||
|
|
@ -381,7 +381,7 @@ func (qs *TripleStore) valueData(value_key []byte) ValueData {
|
|||
return out
|
||||
}
|
||||
|
||||
func (qs *TripleStore) NameOf(k graph.Value) string {
|
||||
func (qs *QuadStore) NameOf(k graph.Value) string {
|
||||
if k == nil {
|
||||
glog.V(2).Info("k was nil")
|
||||
return ""
|
||||
|
|
@ -389,14 +389,14 @@ func (qs *TripleStore) NameOf(k graph.Value) string {
|
|||
return qs.valueData(k.(Token)).Name
|
||||
}
|
||||
|
||||
func (qs *TripleStore) SizeOf(k graph.Value) int64 {
|
||||
func (qs *QuadStore) SizeOf(k graph.Value) int64 {
|
||||
if k == nil {
|
||||
return 0
|
||||
}
|
||||
return int64(qs.valueData(k.(Token)).Size)
|
||||
}
|
||||
|
||||
func (qs *TripleStore) getInt64ForKey(key string, empty int64) (int64, error) {
|
||||
func (qs *QuadStore) getInt64ForKey(key string, empty int64) (int64, error) {
|
||||
var out int64
|
||||
b, err := qs.db.Get([]byte(key), qs.readopts)
|
||||
if err != nil && err != leveldb.ErrNotFound {
|
||||
|
|
@ -416,7 +416,7 @@ func (qs *TripleStore) getInt64ForKey(key string, empty int64) (int64, error) {
|
|||
return out, nil
|
||||
}
|
||||
|
||||
func (qs *TripleStore) getMetadata() error {
|
||||
func (qs *QuadStore) getMetadata() error {
|
||||
var err error
|
||||
qs.size, err = qs.getInt64ForKey("__size", 0)
|
||||
if err != nil {
|
||||
|
|
@ -426,7 +426,7 @@ func (qs *TripleStore) getMetadata() error {
|
|||
return err
|
||||
}
|
||||
|
||||
func (qs *TripleStore) SizeOfPrefix(pre []byte) (int64, error) {
|
||||
func (qs *QuadStore) SizeOfPrefix(pre []byte) (int64, error) {
|
||||
limit := make([]byte, len(pre))
|
||||
copy(limit, pre)
|
||||
end := len(limit) - 1
|
||||
|
|
@ -441,7 +441,7 @@ func (qs *TripleStore) SizeOfPrefix(pre []byte) (int64, error) {
|
|||
return 0, nil
|
||||
}
|
||||
|
||||
func (qs *TripleStore) TripleIterator(d quad.Direction, val graph.Value) graph.Iterator {
|
||||
func (qs *QuadStore) QuadIterator(d quad.Direction, val graph.Value) graph.Iterator {
|
||||
var prefix string
|
||||
switch d {
|
||||
case quad.Subject:
|
||||
|
|
@ -458,15 +458,15 @@ func (qs *TripleStore) TripleIterator(d quad.Direction, val graph.Value) graph.I
|
|||
return NewIterator(prefix, d, val, qs)
|
||||
}
|
||||
|
||||
func (qs *TripleStore) NodesAllIterator() graph.Iterator {
|
||||
func (qs *QuadStore) NodesAllIterator() graph.Iterator {
|
||||
return NewAllIterator("z", quad.Any, qs)
|
||||
}
|
||||
|
||||
func (qs *TripleStore) TriplesAllIterator() graph.Iterator {
|
||||
func (qs *QuadStore) QuadsAllIterator() graph.Iterator {
|
||||
return NewAllIterator("po", quad.Predicate, qs)
|
||||
}
|
||||
|
||||
func (qs *TripleStore) TripleDirection(val graph.Value, d quad.Direction) graph.Value {
|
||||
func (qs *QuadStore) QuadDirection(val graph.Value, d quad.Direction) graph.Value {
|
||||
v := val.(Token)
|
||||
offset := PositionOf(v[0:2], d, qs)
|
||||
if offset != -1 {
|
||||
|
|
@ -480,6 +480,6 @@ func compareBytes(a, b graph.Value) bool {
|
|||
return bytes.Equal(a.(Token), b.(Token))
|
||||
}
|
||||
|
||||
func (qs *TripleStore) FixedIterator() graph.FixedIterator {
|
||||
func (qs *QuadStore) FixedIterator() graph.FixedIterator {
|
||||
return iterator.NewFixedIteratorWithCompare(compareBytes)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,16 +19,16 @@ import (
|
|||
"github.com/google/cayley/graph/iterator"
|
||||
)
|
||||
|
||||
func (ts *TripleStore) OptimizeIterator(it graph.Iterator) (graph.Iterator, bool) {
|
||||
func (qs *QuadStore) OptimizeIterator(it graph.Iterator) (graph.Iterator, bool) {
|
||||
switch it.Type() {
|
||||
case graph.LinksTo:
|
||||
return ts.optimizeLinksTo(it.(*iterator.LinksTo))
|
||||
return qs.optimizeLinksTo(it.(*iterator.LinksTo))
|
||||
|
||||
}
|
||||
return it, false
|
||||
}
|
||||
|
||||
func (ts *TripleStore) optimizeLinksTo(it *iterator.LinksTo) (graph.Iterator, bool) {
|
||||
func (qs *QuadStore) optimizeLinksTo(it *iterator.LinksTo) (graph.Iterator, bool) {
|
||||
subs := it.SubIterators()
|
||||
if len(subs) != 1 {
|
||||
return it, false
|
||||
|
|
@ -41,7 +41,7 @@ func (ts *TripleStore) optimizeLinksTo(it *iterator.LinksTo) (graph.Iterator, bo
|
|||
panic("unexpected size during optimize")
|
||||
}
|
||||
val := primary.Result()
|
||||
newIt := ts.TripleIterator(it.Direction(), val)
|
||||
newIt := qs.QuadIterator(it.Direction(), val)
|
||||
nt := newIt.Tagger()
|
||||
nt.CopyFrom(it)
|
||||
for _, tag := range primary.Tagger().Tags() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue