Documentation ¶
Index ¶
- Constants
- Variables
- func CanNext(it Iterator) bool
- 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 string, dbpath string, opts Options) error
- func IsInvalidAction(err error) bool
- func IsPersistent(name string) bool
- func IsQuadExist(err error) bool
- func IsQuadNotExist(err error) bool
- func IsRegistered(name string) bool
- func NewQuadStoreReader(qs QuadStore) quad.ReadSkipCloser
- func NewResultReader(qs QuadStore, it Iterator) quad.ReadSkipCloser
- func NewTxWriter(tx *Transaction, p Procedure) quad.Writer
- func NextLogIn(it Iterator)
- func NextLogOut(it Iterator, ok bool) bool
- func QuadStores() []string
- func RegisterQuadStore(name string, register QuadStoreRegistration)
- func RegisterWriter(name string, newFunc NewQuadWriterFunc)
- func ToKey(v Value) interface{}
- func UpgradeQuadStore(name string, dbpath string, opts Options) error
- func ValuesOf(ctx context.Context, qs QuadStore, vals []Value) ([]quad.Value, error)
- func WriterMethods() []string
- type ApplyMorphism
- type BatchQuadStore
- type BatchWriter
- type BulkLoader
- type Delta
- type DeltaError
- type Description
- type FixedIterator
- type Handle
- type IgnoreOpts
- type InitStoreFunc
- type IterateChain
- func (c *IterateChain) All() ([]Value, error)
- func (c *IterateChain) AllValues(qs QuadStore) ([]quad.Value, error)
- func (c *IterateChain) Count() (int64, error)
- func (c *IterateChain) Each(fnc func(Value)) error
- func (c *IterateChain) EachValue(qs QuadStore, fnc func(quad.Value)) error
- func (c *IterateChain) EachValuePair(qs QuadStore, fnc func(Value, quad.Value)) error
- func (c *IterateChain) First() (Value, error)
- func (c *IterateChain) FirstValue(qs QuadStore) (quad.Value, error)
- func (c *IterateChain) Limit(n int) *IterateChain
- func (c *IterateChain) On(qs QuadStore) *IterateChain
- func (c *IterateChain) Paths(enable bool) *IterateChain
- func (c *IterateChain) Send(out chan<- Value) error
- func (c *IterateChain) SendValues(qs QuadStore, out chan<- quad.Value) error
- func (c *IterateChain) TagEach(fnc func(map[string]Value)) error
- func (c *IterateChain) TagValues(qs QuadStore, fnc func(map[string]quad.Value)) error
- func (c *IterateChain) UnOptimized() *IterateChain
- type Iterator
- type IteratorStats
- type Keyerdeprecated
- type Linkage
- type NewQuadWriterFunc
- type NewStoreFunc
- type NoNext
- type Options
- type PreFetchedValue
- type Procedure
- type QuadHash
- type QuadStore
- type QuadStoreRegistration
- type QuadWriter
- type StatsContainer
- type Tagger
- func (t *Tagger) Add(tag ...string)
- func (t *Tagger) AddFixed(tag string, value Value)
- func (t *Tagger) CopyFrom(src Iterator)
- func (t *Tagger) CopyFromTagger(st *Tagger)
- func (t *Tagger) Fixed() map[string]Value
- func (t *Tagger) TagResult(dst map[string]Value, v Value)
- func (t *Tagger) Tags() []string
- type Transaction
- type Type
- type UpgradeStoreFunc
- type Value
- type ValueHash
Constants ¶
const ( Invalid = Type("") All = Type("all") And = Type("and") Or = Type("or") HasA = Type("hasa") LinksTo = Type("linksto") Comparison = Type("comparison") Null = Type("null") Err = Type("error") Fixed = Type("fixed") Not = Type("not") Optional = Type("optional") Materialize = Type("materialize") Unique = Type("unique") Limit = Type("limit") Skip = Type("skip") Regex = Type("regexp") Count = Type("count") Recursive = Type("recursive") )
These are the iterator types, defined as constants
Variables ¶
var ( ErrDatabaseExists = errors.New("quadstore: cannot init; database already exists") ErrNotInitialized = errors.New("quadstore: not initialized") )
var ( ErrQuadExists = errors.New("quad exists") ErrQuadNotExist = errors.New("quad does not exist") ErrInvalidAction = errors.New("invalid action") ErrNodeNotExists = errors.New("node does not exist") )
var ( // IgnoreDuplicates specifies whether duplicate quads // cause an error during loading or are ignored. IgnoreDuplicates = true // IgnoreMissing specifies whether missing quads // cause an error during deletion or are ignored. IgnoreMissing = false )
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 IsInvalidAction ¶ added in v0.6.0
IsInvalidAction returns whether an error is a DeltaError with the Err field equal to ErrInvalidAction.
func IsPersistent ¶ added in v0.4.0
func IsQuadExist ¶ added in v0.6.0
IsQuadExist returns whether an error is a DeltaError with the Err field equal to ErrQuadExists.
func IsQuadNotExist ¶ added in v0.6.0
IsQuadNotExist returns whether an error is a DeltaError with the Err field equal to ErrQuadNotExist.
func IsRegistered ¶ added in v0.7.0
func NewQuadStoreReader ¶ added in v0.6.1
func NewQuadStoreReader(qs QuadStore) quad.ReadSkipCloser
NewResultReader creates a quad reader for a given QuadStore.
func NewResultReader ¶ added in v0.6.1
func NewResultReader(qs QuadStore, it Iterator) quad.ReadSkipCloser
NewResultReader creates a quad reader for a given QuadStore and iterator. If iterator is nil QuadsAllIterator will be used.
Only quads returned by iterator's Result will be used.
Iterator will be closed with the reader.
func NewTxWriter ¶ added in v0.7.0
func NewTxWriter(tx *Transaction, p Procedure) quad.Writer
NewTxWriter creates a writer that applies a given procedures for all quads in stream. If procedure is zero, Add operation will be used.
func NextLogOut ¶
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 ToKey ¶ added in v0.6.0
func ToKey(v Value) interface{}
ToKey prepares Value to be stored inside maps, calling Key() if necessary.
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 BatchQuadStore ¶ added in v0.7.0
type BatchWriter ¶ added in v0.6.1
type BatchWriter interface { quad.WriteCloser quad.BatchWriter Flush() error }
func NewRemover ¶ added in v0.6.1
func NewRemover(qs QuadWriter) BatchWriter
NewRemover creates a quad writer for a given QuadStore which removes quads instead of adding them.
func NewWriter ¶ added in v0.6.1
func NewWriter(qs QuadWriter) BatchWriter
NewWriter creates a quad writer for a given QuadStore.
Caller must call Flush or Close to flush an internal buffer.
type BulkLoader ¶ added in v0.3.1
type DeltaError ¶ added in v0.6.0
DeltaError records an error and the delta that caused it.
func (*DeltaError) Error ¶ added in v0.6.0
func (e *DeltaError) Error() string
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"` Exact bool `json:",omitempty"` Iterators []Description `json:",omitempty"` }
func DescribeIterator ¶ added in v0.7.0
func DescribeIterator(it Iterator) Description
DescribeIterator returns a description of the iterator tree.
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 IterateChain ¶ added in v0.6.0
type IterateChain struct {
// contains filtered or unexported fields
}
IterateChain is a chain-enabled helper to setup iterator execution.
func Iterate ¶ added in v0.6.0
func Iterate(ctx context.Context, it Iterator) *IterateChain
Iterate is a set of helpers for iteration. Context may be used to cancel execution. Iterator will be optimized and closed after execution.
By default, iteration has no limit and includes sub-paths.
func (*IterateChain) All ¶ added in v0.6.0
func (c *IterateChain) All() ([]Value, error)
All will return all results of an iterator.
func (*IterateChain) AllValues ¶ added in v0.6.0
func (c *IterateChain) AllValues(qs QuadStore) ([]quad.Value, error)
AllValues is an analog of All, but it will additionally call NameOf for each graph.Value before returning the results slice.
func (*IterateChain) Count ¶ added in v0.7.0
func (c *IterateChain) Count() (int64, error)
All will return all results of an iterator.
func (*IterateChain) Each ¶ added in v0.6.0
func (c *IterateChain) Each(fnc func(Value)) error
Each will run a provided callback for each result of the iterator.
func (*IterateChain) EachValue ¶ added in v0.6.0
func (c *IterateChain) EachValue(qs QuadStore, fnc func(quad.Value)) error
EachValue is an analog of Each, but it will additionally call NameOf for each graph.Value before passing it to a callback.
func (*IterateChain) EachValuePair ¶ added in v0.6.1
EachValuePair is an analog of Each, but it will additionally call NameOf for each graph.Value before passing it to a callback. Original value will be passed as well.
func (*IterateChain) First ¶ added in v0.7.0
func (c *IterateChain) First() (Value, error)
First will return a first result of an iterator. It returns nil if iterator is empty.
func (*IterateChain) FirstValue ¶ added in v0.7.0
func (c *IterateChain) FirstValue(qs QuadStore) (quad.Value, error)
FirstValue is an analog of First, but it does lookup of a value in QuadStore.
func (*IterateChain) Limit ¶ added in v0.6.0
func (c *IterateChain) Limit(n int) *IterateChain
Limit limits a total number of results returned.
func (*IterateChain) On ¶ added in v0.6.0
func (c *IterateChain) On(qs QuadStore) *IterateChain
On sets a default quad store for iteration. If qs was set, it may be omitted in other functions.
func (*IterateChain) Paths ¶ added in v0.6.0
func (c *IterateChain) Paths(enable bool) *IterateChain
Paths switches iteration over sub-paths (with it.NextPath). Defaults to true.
func (*IterateChain) Send ¶ added in v0.6.0
func (c *IterateChain) Send(out chan<- Value) error
Send will send each result of the iterator to the provided channel.
Channel will NOT be closed when function returns.
func (*IterateChain) SendValues ¶ added in v0.6.0
func (c *IterateChain) SendValues(qs QuadStore, out chan<- quad.Value) error
SendValues is an analog of Send, but it will additionally call NameOf for each graph.Value before sending it to a channel.
func (*IterateChain) TagEach ¶ added in v0.6.0
func (c *IterateChain) TagEach(fnc func(map[string]Value)) error
TagEach will run a provided tag map callback for each result of the iterator.
func (*IterateChain) TagValues ¶ added in v0.6.0
TagValues is an analog of TagEach, but it will additionally call NameOf for each graph.Value before passing the map to a callback.
func (*IterateChain) UnOptimized ¶ added in v0.6.0
func (c *IterateChain) UnOptimized() *IterateChain
UnOptimized disables iterator optimization.
type Iterator ¶
type Iterator interface { // String returns a short textual representation of an iterator. String() string Tagger() *Tagger // Fills a tag-to-result-value map. TagResults(map[string]Value) // Returns the current result. Result() Value // 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(ctx context.Context) bool // 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.result 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(ctx context.Context) bool // Contains returns whether the value is within the set held by the iterator. Contains(ctx context.Context, v 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 // Close the iterator and do internal cleanup. Close() error // UID returns the unique identifier of the iterator. UID() uint64 }
type IteratorStats ¶
type Keyer
deprecated
added in
v0.6.0
type Keyer interface {
Key() interface{}
}
Keyer provides a method for comparing types that are not otherwise comparable. The Key method must return a dynamic type that is comparable according to the Go language specification. The returned value must be unique for each receiver value.
Deprecated: Value contains the same method now.
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 NoNext ¶ added in v0.6.0
type NoNext interface {
NoNext()
}
NoNext is an optional interface to signal that iterator should be Contain()'ed instead of Next()'ing if possible.
type Options ¶ added in v0.3.1
type Options map[string]interface{}
type PreFetchedValue ¶ added in v0.6.0
PreFetchedValue is an optional interface for graph.Value to indicate that quadstore has already loaded a value into memory.
func PreFetched ¶ added in v0.7.0
func PreFetched(v quad.Value) PreFetchedValue
type Procedure ¶ added in v0.4.0
type Procedure int8
The different types of actions a transaction can do.
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(in []Delta, opts 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(quad.Value) Value // Given an opaque token, return the node that it represents. NameOf(Value) quad.Value // Returns the number of quads currently stored. Size() int64 // 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() error // 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 }
func NewQuadStore ¶ added in v0.4.1
type QuadStoreRegistration ¶ added in v0.5.0
type QuadStoreRegistration struct { NewFunc NewStoreFunc UpgradeFunc UpgradeStoreFunc InitFunc InitStoreFunc IsPersistent bool }
type QuadWriter ¶ added in v0.4.0
type QuadWriter interface { // AddQuad adds a quad to the store. AddQuad(quad.Quad) error // TODO(barakmich): Deprecate in favor of transaction. // AddQuadSet adds a set of quads to the store, atomically if possible. AddQuadSet([]quad.Quad) error // RemoveQuad removes a quad matching the given one from the database, // if it exists. Does nothing otherwise. RemoveQuad(quad.Quad) error // ApplyTransaction applies a set of quad changes. ApplyTransaction(*Transaction) error // RemoveNode removes all quads which have the given node as subject, predicate, object, or label. // // It returns ErrNodeNotExists if node is missing. RemoveNode(quad.Value) error // Close 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
func (*Tagger) Fixed ¶ added in v0.3.1
Fixed returns the fixed tags held in the tagger. The returned value must not be mutated.
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 together in an atomic step on the database.
func NewTransaction ¶ added in v0.5.0
func NewTransaction() *Transaction
NewTransaction initialize a new transaction.
func NewTransactionN ¶ added in v0.7.4
func NewTransactionN(n int) *Transaction
NewTransactionN initialize a new transaction with a predefined capacity.
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 adding 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 UpgradeStoreFunc ¶ added in v0.5.0
type Value ¶ added in v0.3.1
type Value interface {
Key() 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 return a comparable version on Key.