Documentation ¶
Index ¶
- Variables
- func ContainsLogIn(it Iterator, val Value)
- func ContainsLogOut(it Iterator, val Value, good bool) bool
- func Height(it Iterator, until Type) int
- func InitQuadStore(name, dbpath string, opts Options) error
- func IsPersistent(name string) bool
- func Next(it Iterator) bool
- func NextLogIn(it Iterator)
- func NextLogOut(it Iterator, val Value, ok bool) bool
- func QuadStores() []string
- func RegisterQuadStore(name string, register QuadStoreRegistration)
- func RegisterWriter(name string, newFunc NewQuadWriterFunc)
- func UpgradeQuadStore(name, dbpath string, opts Options) error
- func WriterMethods() []string
- type ApplyMorphism
- type BulkLoader
- type Delta
- type Description
- type FixedIterator
- type Handle
- type IgnoreOpts
- type InitStoreFunc
- type Iterator
- type IteratorStats
- type Linkage
- type NewQuadWriterFunc
- type NewStoreForRequestFunc
- type NewStoreFunc
- type Nexter
- type Options
- type PrimaryKey
- type Procedure
- type QuadStore
- type QuadStoreRegistration
- type QuadWriter
- type StatsContainer
- type Tagger
- type Transaction
- type Type
- type UpgradeStoreFunc
- type Value
Constants ¶
This section is empty.
Variables ¶
var ( ErrQuadExists = errors.New("quad exists") ErrQuadNotExist = errors.New("quad does not exist") )
var ( IgnoreDup = flag.Bool("ignoredup", false, "Don't stop loading on duplicated key on add") IgnoreMissing = flag.Bool("ignoremissing", false, "Don't stop loading on missing key on delete") )
var ErrCannotBulkLoad = errors.New("quadstore: cannot bulk load")
var ErrDatabaseExists = errors.New("quadstore: cannot init; database already exists")
Functions ¶
func ContainsLogIn ¶ added in v0.3.1
func Height ¶ added in v0.4.0
Height is a convienence function to measure the height of an iterator tree.
func InitQuadStore ¶ added in v0.4.1
func IsPersistent ¶ added in v0.4.0
func Next ¶ added in v0.3.1
Next is a convenience function that conditionally calls the Next method of an Iterator if it is a Nexter. If the Iterator is not a Nexter, Next returns false.
func QuadStores ¶ added in v0.4.1
func QuadStores() []string
func RegisterQuadStore ¶ added in v0.4.1
func RegisterQuadStore(name string, register QuadStoreRegistration)
func RegisterWriter ¶ added in v0.4.0
func RegisterWriter(name string, newFunc NewQuadWriterFunc)
func UpgradeQuadStore ¶ added in v0.5.0
func WriterMethods ¶ added in v0.4.0
func WriterMethods() []string
Types ¶
type ApplyMorphism ¶ added in v0.5.0
ApplyMorphism is a curried function that can generates a new iterator based on some prior iterator.
type BulkLoader ¶ added in v0.3.1
type BulkLoader interface { // BulkLoad loads Quads from a quad.Unmarshaler in bulk to the QuadStore. // It returns ErrCannotBulkLoad if bulk loading is not possible. For example if // you cannot load in bulk to a non-empty database, and the db is non-empty. BulkLoad(quad.Unmarshaler) error }
type Description ¶ added in v0.4.1
type Description struct { UID uint64 `json:",omitempty"` Name string `json:",omitempty"` Type Type `json:",omitempty"` Tags []string `json:",omitempty"` Size int64 `json:",omitempty"` Direction quad.Direction `json:",omitempty"` Iterator *Description `json:",omitempty"` Iterators []Description `json:",omitempty"` }
type FixedIterator ¶
FixedIterator wraps iterators that are modifiable by addition of fixed value sets.
type Handle ¶ added in v0.4.0
type Handle struct { QuadStore QuadWriter }
type IgnoreOpts ¶ added in v0.4.1
type IgnoreOpts struct {
IgnoreDup, IgnoreMissing bool
}
type InitStoreFunc ¶ added in v0.3.1
type Iterator ¶
type Iterator interface { Tagger() *Tagger // Fills a tag-to-result-value map. TagResults(map[string]Value) // Returns the current result. Result() Value // These methods are the heart and soul of the iterator, as they constitute // the iteration interface. // // To get the full results of iteration, do the following: // // for graph.Next(it) { // val := it.Result() // ... do things with val. // for it.NextPath() { // ... find other paths to iterate // } // } // // All of them should set iterator.Last to be the last returned value, to // make results work. // // NextPath() advances iterators that may have more than one valid result, // from the bottom up. NextPath() bool // Contains returns whether the value is within the set held by the iterator. Contains(Value) bool // Err returns any error that was encountered by the Iterator. Err() error // Start iteration from the beginning Reset() // Create a new iterator just like this one Clone() Iterator // These methods relate to choosing the right iterator, or optimizing an // iterator tree // // Stats() returns the relative costs of calling the iteration methods for // this iterator, as well as the size. Roughly, it will take NextCost * Size // "cost units" to get everything out of the iterator. This is a wibbly-wobbly // thing, and not exact, but a useful heuristic. Stats() IteratorStats // Helpful accessor for the number of things in the iterator. The first return // value is the size, and the second return value is whether that number is exact, // or a conservative estimate. Size() (int64, bool) // Returns a string relating to what the function of the iterator is. By // knowing the names of the iterators, we can devise optimization strategies. Type() Type // Optimizes an iterator. Can replace the iterator, or merely move things // around internally. if it chooses to replace it with a better iterator, // returns (the new iterator, true), if not, it returns (self, false). Optimize() (Iterator, bool) // Return a slice of the subiterators for this iterator. SubIterators() []Iterator // Return a string representation of the iterator. Describe() Description // Close the iterator and do internal cleanup. Close() error // UID returns the unique identifier of the iterator. UID() uint64 }
type IteratorStats ¶
type Linkage ¶ added in v0.4.1
Linkage is a union type representing a set of values established for a given quad direction.
type NewQuadWriterFunc ¶ added in v0.4.0
type NewQuadWriterFunc func(QuadStore, Options) (QuadWriter, error)
type NewStoreForRequestFunc ¶ added in v0.4.1
type Nexter ¶ added in v0.3.1
type Nexter interface { // Next advances the iterator to the next value, which will then be available through // the Result method. It returns false if no further advancement is possible, or if an // error was encountered during iteration. Err should be consulted to distinguish // between the two cases. Next() bool Iterator }
type PrimaryKey ¶ added in v0.4.1
type PrimaryKey struct {
// contains filtered or unexported fields
}
func NewSequentialKey ¶ added in v0.4.1
func NewSequentialKey(horizon int64) PrimaryKey
func NewUniqueKey ¶ added in v0.4.1
func NewUniqueKey(horizon string) PrimaryKey
func (*PrimaryKey) Int ¶ added in v0.4.1
func (p *PrimaryKey) Int() int64
func (PrimaryKey) MarshalJSON ¶ added in v0.4.1
func (p PrimaryKey) MarshalJSON() ([]byte, error)
func (*PrimaryKey) Next ¶ added in v0.4.1
func (p *PrimaryKey) Next() PrimaryKey
func (*PrimaryKey) String ¶ added in v0.4.1
func (p *PrimaryKey) String() string
func (*PrimaryKey) UnmarshalJSON ¶ added in v0.4.1
func (p *PrimaryKey) UnmarshalJSON(bytes []byte) error
type QuadStore ¶ added in v0.4.1
type QuadStore interface { // The only way in is through building a transaction, which // is done by a replication strategy. ApplyDeltas([]Delta, IgnoreOpts) error // Given an opaque token, returns the quad for that token from the store. Quad(Value) quad.Quad // Given a direction and a token, creates an iterator of links which have // that node token in that directional field. QuadIterator(quad.Direction, Value) Iterator // Returns an iterator enumerating all nodes in the graph. NodesAllIterator() Iterator // Returns an iterator enumerating all links in the graph. QuadsAllIterator() Iterator // Given a node ID, return the opaque token used by the QuadStore // to represent that id. ValueOf(string) Value // Given an opaque token, return the node that it represents. NameOf(Value) string // Returns the number of quads currently stored. Size() int64 // The last replicated transaction ID that this quadstore has verified. Horizon() PrimaryKey // Creates a fixed iterator which can compare Values FixedIterator() FixedIterator // Optimize an iterator in the context of the quad store. // Suppose we have a better index for the passed tree; this // gives the QuadStore the opportunity to replace it // with a more efficient iterator. OptimizeIterator(it Iterator) (Iterator, bool) // Close the quad store and clean up. (Flush to disk, cleanly // sever connections, etc) Close() // Convenience function for speed. Given a quad token and a direction // return the node token for that direction. Sometimes, a QuadStore // can do this without going all the way to the backing store, and // gives the QuadStore the opportunity to make this optimization. // // Iterators will call this. At worst, a valid implementation is // // qs.ValueOf(qs.Quad(id).Get(dir)) // QuadDirection(id Value, d quad.Direction) Value // Get the type of QuadStore //TODO replace this using reflection Type() string }
func NewQuadStore ¶ added in v0.4.1
type QuadStoreRegistration ¶ added in v0.5.0
type QuadStoreRegistration struct { NewFunc NewStoreFunc NewForRequestFunc NewStoreForRequestFunc UpgradeFunc UpgradeStoreFunc InitFunc InitStoreFunc IsPersistent bool }
type QuadWriter ¶ added in v0.4.0
type QuadWriter interface { // Add a quad to the store. AddQuad(quad.Quad) error // TODO(barakmich): Deprecate in favor of transaction. // Add a set of quads to the store, atomically if possible. AddQuadSet([]quad.Quad) error // Removes a quad matching the given one from the database, // if it exists. Does nothing otherwise. RemoveQuad(quad.Quad) error // Apply a set of quad changes ApplyTransaction(*Transaction) error // Cleans up replication and closes the writing aspect of the database. Close() error }
func NewQuadWriter ¶ added in v0.4.0
func NewQuadWriter(name string, qs QuadStore, opts Options) (QuadWriter, error)
type StatsContainer ¶ added in v0.4.0
type StatsContainer struct { UID uint64 Type Type IteratorStats SubIts []StatsContainer }
func DumpStats ¶ added in v0.4.0
func DumpStats(it Iterator) StatsContainer
type Tagger ¶ added in v0.3.1
type Tagger struct {
// contains filtered or unexported fields
}
func (*Tagger) CopyFromTagger ¶ added in v0.5.0
type Transaction ¶ added in v0.5.0
type Transaction struct { // Deltas stores the deltas in the right order Deltas []Delta // contains filtered or unexported fields }
Transaction stores a bunch of Deltas to apply atomatically on the database.
func NewTransaction ¶ added in v0.5.0
func NewTransaction() *Transaction
NewTransaction initialize a new transaction.
func (*Transaction) AddQuad ¶ added in v0.5.0
func (t *Transaction) AddQuad(q quad.Quad)
AddQuad adds a new quad to the transaction if it is not already present in it. If there is a 'remove' delta for that quad, it will remove that delta from the transaction instead of actually addind the quad.
func (*Transaction) RemoveQuad ¶ added in v0.5.0
func (t *Transaction) RemoveQuad(q quad.Quad)
RemoveQuad adds a quad to remove to the transaction. The quad will be removed from the database if it is not present in the transaction, otherwise it simply remove it from the transaction.
type Type ¶ added in v0.3.1
type Type int
Type enumerates the set of Iterator types.
const ( Invalid Type = iota All And Or HasA LinksTo Comparison Null Fixed Not Optional Materialize Unique )
These are the iterator types, defined as constants
func RegisterIterator ¶ added in v0.3.1
RegisterIterator adds a new iterator type to the set of acceptable types, returning the registered Type. Calls to Register are idempotent and must be made prior to use of the iterator. The conventional approach for use is to include a call to Register in a package init() function, saving the Type to a private package var.
func (*Type) MarshalText ¶ added in v0.4.1
func (*Type) UnmarshalText ¶ added in v0.4.1
type UpgradeStoreFunc ¶ added in v0.5.0
type Value ¶ added in v0.3.1
type Value interface{}
Value defines an opaque "quad store value" type. However the backend wishes to implement it, a Value is merely a token to a quad or a node that the backing store itself understands, and the base iterators pass around.
For example, in a very traditional, graphd-style graph, these are int64s (guids of the primitives). In a very direct sort of graph, these could be pointers to structs, or merely quads, or whatever works best for the backing store.
These must be comparable, or implement a `Key() interface{}` function so that they may be stored in maps.