Documentation ¶
Index ¶
- Variables
- func InitQuadStore(ctx context.Context, 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(ctx context.Context, qs QuadStore) quad.ReadSkipCloser
- func NewResultReader(ctx context.Context, qs QuadStore, it iterator.Scanner) quad.ReadSkipCloser
- func NewTxWriter(tx *Transaction, p Procedure) quad.Writer
- func QuadStores() []string
- func RegisterQuadStore(name string, register QuadStoreRegistration)
- func RegisterWriter(name string, newFunc NewQuadWriterFunc)
- func UpgradeQuadStore(ctx context.Context, name string, dbpath string, opts Options) error
- func ValuesOf(ctx context.Context, qs refs.Namer, vals []Ref) ([]quad.Value, error)
- func WriterMethods() []string
- type BatchWriter
- type Delta
- type DeltaError
- type Handle
- type HasA
- func (it *HasA) Direction() quad.Direction
- func (it *HasA) Iterate(ctx context.Context) iterator.Scanner
- func (it *HasA) Lookup(ctx context.Context) iterator.Index
- func (it *HasA) Optimize(ctx context.Context) (iterator.Shape, bool, error)
- func (it *HasA) Stats(ctx context.Context) (iterator.Costs, error)
- func (it *HasA) String() string
- func (it *HasA) SubIterators() []iterator.Shape
- type IgnoreOpts
- type InitStoreFunc
- type LinksTo
- func (it *LinksTo) Direction() quad.Direction
- func (it *LinksTo) Iterate(ctx context.Context) iterator.Scanner
- func (it *LinksTo) Lookup(ctx context.Context) iterator.Index
- func (it *LinksTo) Optimize(ctx context.Context) (iterator.Shape, bool, error)
- func (it *LinksTo) Stats(ctx context.Context) (iterator.Costs, error)
- func (it *LinksTo) String() string
- func (it *LinksTo) SubIterators() []iterator.Shape
- type NewQuadWriterFunc
- type NewStoreFunc
- type Options
- type Procedure
- type QuadIndexer
- type QuadStore
- type QuadStoreRegistration
- type QuadWriter
- type Ref
- type Stats
- type Transaction
- type UpgradeStoreFunc
Constants ¶
This section is empty.
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 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(ctx context.Context, qs QuadStore) quad.ReadSkipCloser
NewQuadStoreReader creates a quad reader for a given QuadStore.
func NewResultReader ¶ added in v0.6.1
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 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 BatchWriter ¶ added in v0.6.1
type BatchWriter interface { quad.WriteCloser Flush(ctx context.Context) 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 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 Handle ¶ added in v0.4.0
type Handle struct { QuadStore QuadWriter }
type HasA ¶ added in v0.3.1
type HasA struct {
// contains filtered or unexported fields
}
A HasA consists of a reference back to the graph.QuadStore that it references, a primary subiterator, a direction in which the quads for that subiterator point, and a temporary holder for the iterator generated on Contains().
func NewHasA ¶ added in v0.9.0
NewHasA construct a new HasA iterator, given the quad subiterator, and the quad direction for which it stands.
func (*HasA) Optimize ¶ added in v0.9.0
Optimize pass the Optimize() call along to the subiterator. If it becomes Null, then the HasA becomes Null (there are no quads that have any directions).
func (*HasA) Stats ¶ added in v0.9.0
Stats returns the statistics on the HasA iterator. This is curious. Next cost is easy, it's an extra call or so on top of the subiterator Next cost. ContainsCost involves going to the graph.QuadStore, iterating out values, and hoping one sticks -- potentially expensive, depending on fanout. Size, however, is potentially smaller. we know at worst it's the size of the subiterator, but if there are many repeated values, it could be much smaller in totality.
func (*HasA) SubIterators ¶ added in v0.9.0
SubIterators returns our sole subiterator.
type IgnoreOpts ¶ added in v0.4.1
type IgnoreOpts struct {
IgnoreDup, IgnoreMissing bool
}
type InitStoreFunc ¶ added in v0.3.1
type LinksTo ¶ added in v0.3.1
type LinksTo struct {
// contains filtered or unexported fields
}
A LinksTo has a reference back to the graph.QuadStore (to create the iterators for each node) the subiterator, and the direction the iterator comes from. `next_it` is the tempoarary iterator held per result in `primary_it`.
func NewLinksTo ¶ added in v0.9.0
NewLinksTo construct a new LinksTo iterator around a direction and a subiterator of nodes.
func (*LinksTo) Stats ¶ added in v0.9.0
Stats returns a guess as to how big or costly it is to next the iterator.
func (*LinksTo) SubIterators ¶ added in v0.9.0
SubIterators returns a list containing only our subiterator.
type NewQuadWriterFunc ¶ added in v0.4.0
type NewQuadWriterFunc func(QuadStore, Options) (QuadWriter, error)
type NewStoreFunc ¶ added in v0.3.1
type Options ¶ added in v0.3.1
type Options map[string]interface{}
type Procedure ¶ added in v0.4.0
type Procedure int8
The different types of actions a transaction can do.
type QuadIndexer ¶ added in v0.9.0
type QuadIndexer interface { // Given an opaque token, returns the quad for that token from the store. Quad(context.Context, Ref) (quad.Quad, error) // Given a direction and a token, creates an iterator of links which have // that node token in that directional field. QuadIterator(context.Context, quad.Direction, Ref) iterator.Shape // QuadIteratorSize returns an estimated size of an iterator. QuadIteratorSize(ctx context.Context, d quad.Direction, v Ref) (refs.Size, 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(ctx context.Context, id Ref, d quad.Direction) (Ref, error) // Stats returns the number of nodes and quads currently stored. // Exact flag controls the correctness of the value. It can be an estimation, or a precise calculation. // The quadstore may have a fast way of retrieving the precise stats, in this case it may ignore 'exact' // flag and always return correct stats (with an appropriate flags set in the output). Stats(ctx context.Context, exact bool) (Stats, error) }
type QuadStore ¶ added in v0.4.1
type QuadStore interface { refs.Namer QuadIndexer // The only way in is through building a transaction, which // is done by a replication strategy. ApplyDeltas(ctx context.Context, in []Delta, opts IgnoreOpts) error // NewQuadWriter starts a batch quad import process. // The order of changes is not guaranteed, neither is the order and result of concurrent ApplyDeltas. NewQuadWriter(ctx context.Context) (quad.WriteCloser, error) // Returns an iterator enumerating all nodes in the graph. NodesAllIterator(ctx context.Context) iterator.Shape // Returns an iterator enumerating all links in the graph. QuadsAllIterator(ctx context.Context) iterator.Shape // Closes the quad store and cleans up. Close() error }
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(context.Context, quad.Quad) error // TODO(barakmich): Deprecate in favor of transaction. // AddQuadSet adds a set of quads to the store, atomically if possible. AddQuadSet(context.Context, []quad.Quad) error // RemoveQuad removes a quad from the database, if it exists. // If not found, returns ErrQuadNotExist. RemoveQuad(context.Context, quad.Quad) error // ApplyTransaction applies a set of quad changes. ApplyTransaction(context.Context, *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(context.Context, 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 Ref ¶ added in v0.9.0
Ref defines an opaque "quad store reference" type. However the backend wishes to implement it, a Ref 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.
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.