Remove terminal newline from quad.Quad stringer

This is the conventional implementation of a fmt.Stringer.

Also went through and fixed up some lint.
This commit is contained in:
kortschak 2014-07-31 11:43:20 +09:30
parent a81005ba21
commit b17334ea36
6 changed files with 37 additions and 39 deletions

View file

@ -22,7 +22,7 @@ import (
) )
func Open(cfg *config.Config) (graph.TripleStore, error) { func Open(cfg *config.Config) (graph.TripleStore, error) {
glog.Infof("Opening database \"%s\" at %s", cfg.DatabaseType, cfg.DatabasePath) glog.Infof("Opening database %q at %s", cfg.DatabaseType, cfg.DatabasePath)
ts, err := graph.NewTripleStore(cfg.DatabaseType, cfg.DatabasePath, cfg.DatabaseOptions) ts, err := graph.NewTripleStore(cfg.DatabaseType, cfg.DatabasePath, cfg.DatabaseOptions)
if err != nil { if err != nil {
return nil, err return nil, err

View file

@ -33,6 +33,10 @@ import (
"github.com/google/cayley/quad" "github.com/google/cayley/quad"
) )
func init() {
graph.RegisterTripleStore("leveldb", newTripleStore, createNewLevelDB)
}
const ( const (
DefaultCacheSize = 2 DefaultCacheSize = 2
DefaultWriteBufferSize = 20 DefaultWriteBufferSize = 20
@ -53,7 +57,7 @@ func createNewLevelDB(path string, _ graph.Options) error {
opts := &opt.Options{} opts := &opt.Options{}
db, err := leveldb.OpenFile(path, opts) db, err := leveldb.OpenFile(path, opts)
if err != nil { if err != nil {
glog.Errorln("Error: couldn't create database: ", err) glog.Errorf("Error: couldn't create database: %v", err)
return err return err
} }
defer db.Close() defer db.Close()
@ -145,7 +149,7 @@ func (qs *TripleStore) AddTriple(t *quad.Quad) {
qs.buildWrite(batch, t) qs.buildWrite(batch, t)
err := qs.db.Write(batch, qs.writeopts) err := qs.db.Write(batch, qs.writeopts)
if err != nil { if err != nil {
glog.Errorf("Couldn't write to DB for triple %s", t) glog.Errorf("Couldn't write to DB for triple %s.", t)
return return
} }
qs.size++ qs.size++
@ -162,7 +166,7 @@ var (
func (qs *TripleStore) RemoveTriple(t *quad.Quad) { func (qs *TripleStore) RemoveTriple(t *quad.Quad) {
_, err := qs.db.Get(qs.createKeyFor(spo, t), qs.readopts) _, err := qs.db.Get(qs.createKeyFor(spo, t), qs.readopts)
if err != nil && err != leveldb.ErrNotFound { if err != nil && err != leveldb.ErrNotFound {
glog.Errorf("Couldn't access DB to confirm deletion") glog.Error("Couldn't access DB to confirm deletion")
return return
} }
if err == leveldb.ErrNotFound { if err == leveldb.ErrNotFound {
@ -182,7 +186,7 @@ func (qs *TripleStore) RemoveTriple(t *quad.Quad) {
} }
err = qs.db.Write(batch, nil) err = qs.db.Write(batch, nil)
if err != nil { if err != nil {
glog.Errorf("Couldn't delete triple %s", t) glog.Errorf("Couldn't delete triple %s.", t)
return return
} }
qs.size-- qs.size--
@ -191,7 +195,7 @@ func (qs *TripleStore) RemoveTriple(t *quad.Quad) {
func (qs *TripleStore) buildTripleWrite(batch *leveldb.Batch, t *quad.Quad) { func (qs *TripleStore) buildTripleWrite(batch *leveldb.Batch, t *quad.Quad) {
bytes, err := json.Marshal(*t) bytes, err := json.Marshal(*t)
if err != nil { if err != nil {
glog.Errorf("Couldn't write to buffer for triple %s\n %s\n", t, err) glog.Errorf("Couldn't write to buffer for triple %s: %s", t, err)
return return
} }
batch.Put(qs.createKeyFor(spo, t), bytes) batch.Put(qs.createKeyFor(spo, t), bytes)
@ -224,7 +228,7 @@ func (qs *TripleStore) UpdateValueKeyBy(name string, amount int, batch *leveldb.
// Error getting the node from the database. // Error getting the node from the database.
if err != nil && err != leveldb.ErrNotFound { if err != nil && err != leveldb.ErrNotFound {
glog.Errorf("Error reading Value %s from the DB\n", name) glog.Errorf("Error reading Value %s from the DB.", name)
return return
} }
@ -232,7 +236,7 @@ func (qs *TripleStore) UpdateValueKeyBy(name string, amount int, batch *leveldb.
if b != nil && err != leveldb.ErrNotFound { if b != nil && err != leveldb.ErrNotFound {
err = json.Unmarshal(b, value) err = json.Unmarshal(b, value)
if err != nil { if err != nil {
glog.Errorln("Error: couldn't reconstruct value ", err) glog.Errorf("Error: couldn't reconstruct value: %v", err)
return return
} }
value.Size += int64(amount) value.Size += int64(amount)
@ -253,7 +257,7 @@ func (qs *TripleStore) UpdateValueKeyBy(name string, amount int, batch *leveldb.
// Repackage and rewrite. // Repackage and rewrite.
bytes, err := json.Marshal(&value) bytes, err := json.Marshal(&value)
if err != nil { if err != nil {
glog.Errorf("Couldn't write to buffer for value %s\n %s", name, err) glog.Errorf("Couldn't write to buffer for value %s: %s", name, err)
return return
} }
if batch == nil { if batch == nil {
@ -281,7 +285,7 @@ func (qs *TripleStore) AddTripleSet(t_s []*quad.Quad) {
} }
err := qs.db.Write(batch, qs.writeopts) err := qs.db.Write(batch, qs.writeopts)
if err != nil { if err != nil {
glog.Errorf("Couldn't write to DB for tripleset") glog.Error("Couldn't write to DB for tripleset.")
return return
} }
qs.size += int64(newTs) qs.size += int64(newTs)
@ -293,7 +297,7 @@ func (qs *TripleStore) Close() {
if err == nil { if err == nil {
werr := qs.db.Put([]byte("__size"), buf.Bytes(), qs.writeopts) werr := qs.db.Put([]byte("__size"), buf.Bytes(), qs.writeopts)
if werr != nil { if werr != nil {
glog.Errorf("Couldn't write size before closing!") glog.Error("Couldn't write size before closing!")
} }
} else { } else {
glog.Errorf("Couldn't convert size before closing!") glog.Errorf("Couldn't convert size before closing!")
@ -306,7 +310,7 @@ func (qs *TripleStore) Quad(k graph.Value) *quad.Quad {
var triple quad.Quad var triple quad.Quad
b, err := qs.db.Get(k.([]byte), qs.readopts) b, err := qs.db.Get(k.([]byte), qs.readopts)
if err != nil && err != leveldb.ErrNotFound { if err != nil && err != leveldb.ErrNotFound {
glog.Errorln("Error: couldn't get triple from DB") glog.Error("Error: couldn't get triple from DB.")
return &quad.Quad{} return &quad.Quad{}
} }
if err == leveldb.ErrNotFound { if err == leveldb.ErrNotFound {
@ -315,7 +319,7 @@ func (qs *TripleStore) Quad(k graph.Value) *quad.Quad {
} }
err = json.Unmarshal(b, &triple) err = json.Unmarshal(b, &triple)
if err != nil { if err != nil {
glog.Errorln("Error: couldn't reconstruct triple") glog.Error("Error: couldn't reconstruct triple.")
return &quad.Quad{} return &quad.Quad{}
} }
return &triple return &triple
@ -336,7 +340,7 @@ func (qs *TripleStore) ValueOf(s string) graph.Value {
func (qs *TripleStore) valueData(value_key []byte) ValueData { func (qs *TripleStore) valueData(value_key []byte) ValueData {
var out ValueData var out ValueData
if glog.V(3) { if glog.V(3) {
glog.V(3).Infof("%s %v\n", string(value_key[0]), value_key) glog.V(3).Infof("%s %v", string(value_key[0]), value_key)
} }
b, err := qs.db.Get(value_key, qs.readopts) b, err := qs.db.Get(value_key, qs.readopts)
if err != nil && err != leveldb.ErrNotFound { if err != nil && err != leveldb.ErrNotFound {
@ -355,7 +359,7 @@ func (qs *TripleStore) valueData(value_key []byte) ValueData {
func (qs *TripleStore) NameOf(k graph.Value) string { func (qs *TripleStore) NameOf(k graph.Value) string {
if k == nil { if k == nil {
glog.V(2).Infoln("k was nil") glog.V(2).Info("k was nil")
return "" return ""
} }
return qs.valueData(k.([]byte)).Name return qs.valueData(k.([]byte)).Name
@ -444,7 +448,3 @@ func compareBytes(a, b graph.Value) bool {
func (qs *TripleStore) FixedIterator() graph.FixedIterator { func (qs *TripleStore) FixedIterator() graph.FixedIterator {
return iterator.NewFixedIteratorWithCompare(compareBytes) return iterator.NewFixedIteratorWithCompare(compareBytes)
} }
func init() {
graph.RegisterTripleStore("leveldb", newTripleStore, createNewLevelDB)
}

View file

@ -25,6 +25,12 @@ import (
"github.com/petar/GoLLRB/llrb" "github.com/petar/GoLLRB/llrb"
) )
func init() {
graph.RegisterTripleStore("memstore", func(string, graph.Options) (graph.TripleStore, error) {
return newTripleStore(), nil
}, nil)
}
type TripleDirectionIndex struct { type TripleDirectionIndex struct {
subject map[int64]*llrb.LLRB subject map[int64]*llrb.LLRB
predicate map[int64]*llrb.LLRB predicate map[int64]*llrb.LLRB
@ -240,7 +246,7 @@ func (ts *TripleStore) DebugPrint() {
if i == 0 { if i == 0 {
continue continue
} }
glog.V(2).Infoln("%d: %s", i, t) glog.V(2).Infof("%d: %s", i, t)
} }
} }
@ -269,9 +275,3 @@ func (ts *TripleStore) NodesAllIterator() graph.Iterator {
return NewMemstoreAllIterator(ts) return NewMemstoreAllIterator(ts)
} }
func (ts *TripleStore) Close() {} func (ts *TripleStore) Close() {}
func init() {
graph.RegisterTripleStore("memstore", func(string, graph.Options) (graph.TripleStore, error) {
return newTripleStore(), nil
}, nil)
}

View file

@ -19,7 +19,6 @@ import (
"encoding/hex" "encoding/hex"
"hash" "hash"
"io" "io"
"log"
"gopkg.in/mgo.v2" "gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson" "gopkg.in/mgo.v2/bson"
@ -125,7 +124,7 @@ func (qs *TripleStore) updateNodeBy(node_name string, inc int) {
size.Name = node_name size.Name = node_name
size.Size = inc size.Size = inc
} else { } else {
glog.Error("Error:", err) glog.Errorf("Error: %v", err)
return return
} }
} else { } else {
@ -139,7 +138,7 @@ func (qs *TripleStore) updateNodeBy(node_name string, inc int) {
if size.Size <= 0 { if size.Size <= 0 {
err := qs.db.C("nodes").RemoveId(node) err := qs.db.C("nodes").RemoveId(node)
if err != nil { if err != nil {
glog.Error("Error: ", err, " while removing node ", node_name) glog.Errorf("Error: %v while removing node %s", err, node_name)
return return
} }
} }
@ -147,7 +146,7 @@ func (qs *TripleStore) updateNodeBy(node_name string, inc int) {
_, err2 := qs.db.C("nodes").UpsertId(node, size) _, err2 := qs.db.C("nodes").UpsertId(node, size)
if err2 != nil { if err2 != nil {
glog.Error("Error: ", err) glog.Errorf("Error: %v", err)
} }
} }
@ -165,7 +164,7 @@ func (qs *TripleStore) writeTriple(t *quad.Quad) bool {
if err.(*mgo.LastError).Code == 11000 { if err.(*mgo.LastError).Code == 11000 {
return false return false
} }
glog.Error("Error: ", err) glog.Errorf("Error: %v", err)
return false return false
} }
return true return true
@ -206,7 +205,7 @@ func (qs *TripleStore) RemoveTriple(t *quad.Quad) {
if err == mgo.ErrNotFound { if err == mgo.ErrNotFound {
return return
} else if err != nil { } else if err != nil {
log.Println("Error: ", err, " while removing triple ", t) glog.Errorf("Error: %v while removing triple %v", err, t)
return return
} }
qs.updateNodeBy(t.Subject, -1) qs.updateNodeBy(t.Subject, -1)
@ -221,7 +220,7 @@ func (qs *TripleStore) Quad(val graph.Value) *quad.Quad {
var bsonDoc bson.M var bsonDoc bson.M
err := qs.db.C("triples").FindId(val.(string)).One(&bsonDoc) err := qs.db.C("triples").FindId(val.(string)).One(&bsonDoc)
if err != nil { if err != nil {
log.Println("Error: Couldn't retrieve triple", val.(string), err) glog.Errorf("Error: Couldn't retrieve triple %s %v", val, err)
} }
return &quad.Quad{ return &quad.Quad{
bsonDoc["Subject"].(string), bsonDoc["Subject"].(string),
@ -255,7 +254,7 @@ func (qs *TripleStore) NameOf(v graph.Value) string {
var node MongoNode var node MongoNode
err := qs.db.C("nodes").FindId(v.(string)).One(&node) err := qs.db.C("nodes").FindId(v.(string)).One(&node)
if err != nil { if err != nil {
log.Println("Error: Couldn't retrieve node", v.(string), err) glog.Errorf("Error: Couldn't retrieve node %s %v", v, err)
} }
qs.idCache.Put(v.(string), node.Name) qs.idCache.Put(v.(string), node.Name)
return node.Name return node.Name
@ -264,7 +263,7 @@ func (qs *TripleStore) NameOf(v graph.Value) string {
func (qs *TripleStore) Size() int64 { func (qs *TripleStore) Size() int64 {
count, err := qs.db.C("triples").Count() count, err := qs.db.C("triples").Count()
if err != nil { if err != nil {
glog.Error("Error: ", err) glog.Errorf("Error: %v", err)
return 0 return 0
} }
return int64(count) return int64(count)

View file

@ -26,7 +26,7 @@ func TestSingleIterator(t *testing.T) {
result := StringResultTreeEvaluator(all) result := StringResultTreeEvaluator(all)
expected := "(1)\n(2)\n(3)\n" expected := "(1)\n(2)\n(3)\n"
if expected != result { if expected != result {
t.Errorf("Expected \"%s\" got \"%s\"", expected, result) t.Errorf("Expected %q got %q", expected, result)
} }
} }
@ -40,6 +40,6 @@ func TestAndIterator(t *testing.T) {
result := StringResultTreeEvaluator(and) result := StringResultTreeEvaluator(and)
expected := "(3 (3) (3))\n" expected := "(3 (3) (3))\n"
if expected != result { if expected != result {
t.Errorf("Expected \"%s\" got \"%s\"", expected, result) t.Errorf("Expected %q got %q", expected, result)
} }
} }

View file

@ -125,8 +125,7 @@ func (q *Quad) Equals(o *Quad) bool {
// Pretty-prints a triple. // Pretty-prints a triple.
func (q *Quad) String() string { func (q *Quad) String() string {
// TODO(kortschak) String methods should generally not terminate in '\n'. return fmt.Sprintf("%s -- %s -> %s", q.Subject, q.Predicate, q.Object)
return fmt.Sprintf("%s -- %s -> %s\n", q.Subject, q.Predicate, q.Object)
} }
func (q *Quad) IsValid() bool { func (q *Quad) IsValid() bool {