mysql

package
v1.17.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 22, 2023 License: Apache-2.0 Imports: 34 Imported by: 0

Documentation

Index

Constants

View Source
const (
	Engine = "mysql"
)

Variables

This section is empty.

Functions

func NewMySQLDatastore

func NewMySQLDatastore(uri string, options ...Option) (datastore.Datastore, error)

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

Types

type Datastore

type Datastore struct {
	*QueryBuilder
	*revisions.CachedOptimizedRevisions
	revision.DecimalDecoder
	// contains filtered or unexported fields
}

Datastore is a MySQL-based implementation of the datastore.Datastore interface

func (*Datastore) CheckRevision

func (mds *Datastore) CheckRevision(ctx context.Context, revisionRaw datastore.Revision) error

func (*Datastore) Close

func (mds *Datastore) Close() error

Close closes the data store.

func (*Datastore) DeleteBeforeTx added in v1.10.0

func (mds *Datastore) DeleteBeforeTx(
	ctx context.Context,
	txID datastore.Revision,
) (removed common.DeletionCounts, err error)

TODO (@vroldanbet) dupe from postgres datastore - need to refactor - implementation misses metrics

func (*Datastore) Features added in v1.11.0

func (mds *Datastore) Features(ctx context.Context) (*datastore.Features, error)

func (*Datastore) HeadRevision

func (mds *Datastore) HeadRevision(ctx context.Context) (datastore.Revision, error)

func (*Datastore) IsReady

func (mds *Datastore) IsReady(ctx context.Context) (bool, error)

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) Now added in v1.10.0

func (mds *Datastore) Now(ctx context.Context) (time.Time, error)

TODO (@vroldanbet) dupe from postgres datastore - need to refactor

func (*Datastore) ReadWriteTx added in v1.8.0

func (mds *Datastore) ReadWriteTx(
	ctx context.Context,
	fn datastore.TxUserFunc,
) (datastore.Revision, error)

TODO (@vroldanbet) dupe from postgres datastore - need to refactor ReadWriteTx starts a read/write transaction, which will be committed if no error is returned and rolled back if an error is returned.

func (*Datastore) SnapshotReader added in v1.8.0

func (mds *Datastore) SnapshotReader(revisionRaw datastore.Revision) datastore.Reader

TODO (@vroldanbet) dupe from postgres datastore - need to refactor

func (*Datastore) Statistics

func (mds *Datastore) Statistics(ctx context.Context) (datastore.Stats, error)

func (*Datastore) TxIDBefore added in v1.10.0

func (mds *Datastore) TxIDBefore(ctx context.Context, before time.Time) (datastore.Revision, error)

TODO (@vroldanbet) dupe from postgres datastore - need to refactor - main difference is how the PSQL driver handles null values

func (*Datastore) Watch

func (mds *Datastore) Watch(ctx context.Context, afterRevisionRaw 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

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

func ConnMaxIdleTime(idle time.Duration) Option

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

func ConnMaxLifetime(lifetime time.Duration) Option

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 GCEnabled added in v1.13.0

func GCEnabled(isGCEnabled bool) Option

GCEnabled indicates whether garbage collection is enabled.

GC is enabled by default.

func GCInterval

func GCInterval(interval time.Duration) Option

GCInterval is the interval at which garbage collection will occur.

This value defaults to 3 minutes.

func GCMaxOperationTime added in v1.13.0

func GCMaxOperationTime(time time.Duration) Option

GCMaxOperationTime is the maximum operation time of a garbage collection pass before it times out.

This value defaults to 1 minute.

func GCWindow

func GCWindow(window time.Duration) Option

GCWindow is the maximum age of a passed revision that will be considered valid.

This value defaults to 24 hours.

func MaxOpenConns

func MaxOpenConns(conns int) Option

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 MaxRetries added in v1.8.0

func MaxRetries(maxRetries uint8) Option

MaxRetries is the maximum number of times a retriable transaction will be client-side retried.

Default: 10

func MaxRevisionStalenessPercent added in v1.8.0

func MaxRevisionStalenessPercent(stalenessPercent float64) Option

MaxRevisionStalenessPercent is the amount of time, expressed as a percentage of the revision quantization window, that a previously computed rounded revision can still be advertised after the next rounded revision would otherwise be ready.

This value defaults to 0.1 (10%).

func OverrideLockWaitTimeout added in v1.8.0

func OverrideLockWaitTimeout(seconds uint8) Option

OverrideLockWaitTimeout sets the lock wait timeout on each new connection established with the databases. As an OLTP service, the default of 50s is unbearably long to block a write for our service, so we suggest setting this value to the minimum of 1 second.

Uses server default by default.

func RevisionQuantization added in v1.8.0

func RevisionQuantization(quantization time.Duration) Option

RevisionQuantization is the time bucket size to which advertised revisions will be rounded.

This value defaults to 5 seconds.

func SplitAtUsersetCount added in v1.13.0

func SplitAtUsersetCount(splitAtUsersetCount uint16) Option

SplitAtUsersetCount is the batch size for which userset queries will be split into smaller queries.

This defaults to 1024.

func TablePrefix

func TablePrefix(prefix string) Option

TablePrefix allows defining a MySQL table name prefix.

No prefix is set by default

func WatchBufferLength added in v1.8.0

func WatchBufferLength(watchBufferLength uint16) Option

WatchBufferLength is the number of entries that can be stored in the watch buffer while awaiting read by the client.

This value defaults to 128.

func WithEnablePrometheusStats

func WithEnablePrometheusStats(enablePrometheusStats bool) Option

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
	CountTupleQuery       sq.SelectBuilder

	WriteCaveatQuery  sq.InsertBuilder
	ReadCaveatQuery   sq.SelectBuilder
	ListCaveatsQuery  sq.SelectBuilder
	DeleteCaveatQuery sq.UpdateBuilder
}

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.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL