Documentation ¶
Index ¶
- Constants
- type Datastore
- func (mds *Datastore) CheckRevision(ctx context.Context, revision datastore.Revision) error
- func (mds *Datastore) Close() error
- func (mds *Datastore) DeleteNamespace(ctx context.Context, nsName string) (datastore.Revision, error)
- func (mds *Datastore) DeleteRelationships(ctx context.Context, preconditions []*v1.Precondition, ...) (datastore.Revision, error)
- func (mds *Datastore) HeadRevision(ctx context.Context) (datastore.Revision, error)
- func (mds *Datastore) IsReady(ctx context.Context) (bool, error)
- func (mds *Datastore) ListNamespaces(ctx context.Context, revision datastore.Revision) ([]*core.NamespaceDefinition, error)
- func (mds *Datastore) NamespaceCacheKey(namespaceName string, revision datastore.Revision) (string, error)
- func (mds *Datastore) OptimizedRevision(ctx context.Context) (datastore.Revision, error)
- func (mds *Datastore) QueryTuples(ctx context.Context, filter *v1.RelationshipFilter, ...) (iter datastore.TupleIterator, err error)
- func (mds *Datastore) ReadNamespace(ctx context.Context, nsName string, revision datastore.Revision) (*core.NamespaceDefinition, datastore.Revision, error)
- func (mds *Datastore) ReverseQueryTuples(ctx context.Context, subjectFilter *v1.SubjectFilter, ...) (iter datastore.TupleIterator, err error)
- func (mds *Datastore) Statistics(ctx context.Context) (datastore.Stats, error)
- func (mds *Datastore) Watch(ctx context.Context, afterRevision datastore.Revision) (<-chan *datastore.RevisionChanges, <-chan error)
- func (mds *Datastore) WriteNamespace(ctx context.Context, newNamespace *core.NamespaceDefinition) (datastore.Revision, error)
- func (mds *Datastore) WriteTuples(ctx context.Context, preconditions []*v1.Precondition, ...) (datastore.Revision, error)
- type Option
- func ConnMaxIdleTime(idle time.Duration) Option
- func ConnMaxLifetime(lifetime time.Duration) Option
- func DebugAnalyzeBeforeStatistics() Option
- func GCInterval(interval time.Duration) Option
- func GCWindow(window time.Duration) Option
- func MaxOpenConns(conns int) Option
- func RevisionFuzzingTimedelta(delta time.Duration) Option
- func TablePrefix(prefix string) Option
- func WithEnablePrometheusStats(enablePrometheusStats bool) Option
- type QueryBuilder
Constants ¶
const (
Engine = "mysql"
)
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Datastore ¶
type Datastore struct { *QueryBuilder // contains filtered or unexported fields }
Datastore is a MySQL-based implementation of the datastore.Datastore interface
func NewMySQLDatastore ¶
NewMySQLDatastore creates a new mysql.Datastore value configured with the MySQL instance specified in through the URI parameter. Supports customization via the various options available in this package.
URI: [scheme://][user[:[password]]@]host[:port][/schema][?attribute1=value1&attribute2=value2... See https://dev.mysql.com/doc/refman/8.0/en/connecting-using-uri-or-key-value-pairs.html
func (*Datastore) CheckRevision ¶
func (*Datastore) DeleteNamespace ¶
func (*Datastore) DeleteRelationships ¶
func (mds *Datastore) DeleteRelationships(ctx context.Context, preconditions []*v1.Precondition, filter *v1.RelationshipFilter) (datastore.Revision, error)
func (*Datastore) HeadRevision ¶
func (*Datastore) IsReady ¶
IsReady returns whether the datastore is ready to accept data. Datastores that require database schema creation will return false until the migrations have been run to create the necessary tables.
fundamentally different from PSQL implementation:
- checking if the current migration version is compatible is implemented with IsHeadCompatible
- Database seeding is handled here, so that we can decouple schema migration from data migration and support skeema-based migrations.
func (*Datastore) ListNamespaces ¶
func (*Datastore) NamespaceCacheKey ¶
func (*Datastore) OptimizedRevision ¶
func (*Datastore) QueryTuples ¶
func (mds *Datastore) QueryTuples( ctx context.Context, filter *v1.RelationshipFilter, revision datastore.Revision, opts ...options.QueryOptionsOption, ) (iter datastore.TupleIterator, err error)
func (*Datastore) ReadNamespace ¶
func (*Datastore) ReverseQueryTuples ¶
func (mds *Datastore) ReverseQueryTuples( ctx context.Context, subjectFilter *v1.SubjectFilter, revision datastore.Revision, opts ...options.ReverseQueryOptionsOption, ) (iter datastore.TupleIterator, err error)
func (*Datastore) Statistics ¶
func (*Datastore) Watch ¶
func (mds *Datastore) Watch(ctx context.Context, afterRevision datastore.Revision) (<-chan *datastore.RevisionChanges, <-chan error)
Watch notifies the caller about all changes to tuples.
All events following afterRevision will be sent to the caller.
TODO (@vroldanbet) dupe from postgres datastore - need to refactor
func (*Datastore) WriteNamespace ¶
func (*Datastore) WriteTuples ¶
func (mds *Datastore) WriteTuples(ctx context.Context, preconditions []*v1.Precondition, mutations []*v1.RelationshipUpdate) (datastore.Revision, error)
WriteTuples takes a list of existing tuples that must exist, and a list of tuple mutations and applies it to the datastore for the specified namespace.
type Option ¶
type Option func(*mysqlOptions)
Option provides the facility to configure how clients within the MySQL datastore interact with the running MySQL database.
func ConnMaxIdleTime ¶
ConnMaxIdleTime is the duration after which an idle connection will be automatically closed. See https://pkg.go.dev/database/sql#DB.SetConnMaxIdleTime/
This value defaults to having no maximum.
func ConnMaxLifetime ¶
ConnMaxLifetime is the duration since creation after which a connection will be automatically closed. See https://pkg.go.dev/database/sql#DB.SetConnMaxLifetime
This value defaults to having no maximum.
func DebugAnalyzeBeforeStatistics ¶
func DebugAnalyzeBeforeStatistics() Option
DebugAnalyzeBeforeStatistics signals to the Statistics method that it should run Analyze Table on the relationships table before returning statistics. This should only be used for debug and testing.
Disabled by default.
func GCInterval ¶
GCInterval is the interval at which garbage collection will occur.
This value defaults to 3 minutes.
func GCWindow ¶
GCWindow is the maximum age of a passed revision that will be considered valid.
This value defaults to 24 hours.
func MaxOpenConns ¶
MaxOpenConns is the maximum size of the connection pool. See https://pkg.go.dev/database/sql#DB.SetMaxOpenConns
This value defaults to having no maximum.
func RevisionFuzzingTimedelta ¶
RevisionFuzzingTimedelta is the time bucket size to which advertised revisions will be rounded.
This value defaults to 5 seconds.
func TablePrefix ¶
TablePrefix allows defining a MySQL table name prefix.
No prefix is set by default
func WithEnablePrometheusStats ¶
WithEnablePrometheusStats marks whether Prometheus metrics provided by Go's database/sql package are enabled.
Prometheus metrics are disabled by default.
type QueryBuilder ¶
type QueryBuilder struct { GetLastRevision sq.SelectBuilder GetRevisionRange sq.SelectBuilder WriteNamespaceQuery sq.InsertBuilder ReadNamespaceQuery sq.SelectBuilder DeleteNamespaceQuery sq.UpdateBuilder DeleteNamespaceTuplesQuery sq.UpdateBuilder QueryTupleIdsQuery sq.SelectBuilder QueryTuplesQuery sq.SelectBuilder DeleteTupleQuery sq.UpdateBuilder QueryTupleExistsQuery sq.SelectBuilder WriteTupleQuery sq.InsertBuilder QueryChangedQuery sq.SelectBuilder }
QueryBuilder captures all parameterizable queries used by the MySQL datastore implementation
func NewQueryBuilder ¶
func NewQueryBuilder(driver *migrations.MySQLDriver) *QueryBuilder
NewQueryBuilder returns a new QueryBuilder instance. The migration driver is used to determine the names of the tables.