memory

package
v0.8.0 Latest Latest
Warning

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

Go to latest
Published: Feb 1, 2021 License: Apache-2.0 Imports: 10 Imported by: 53

Documentation

Index

Constants

View Source
const IndexDriverId = "MemoryIndexDriver"

Variables

This section is empty.

Functions

This section is empty.

Types

type AscendIndexLookup

type AscendIndexLookup struct {
	Gte   []interface{}
	Lt    []interface{}
	Index ExpressionsIndex
	// contains filtered or unexported fields
}

func (*AscendIndexLookup) EvalExpression

func (l *AscendIndexLookup) EvalExpression() sql.Expression

func (*AscendIndexLookup) ID

func (l *AscendIndexLookup) ID() string

func (*AscendIndexLookup) Indexes

func (l *AscendIndexLookup) Indexes() []string

func (*AscendIndexLookup) Intersection

func (l *AscendIndexLookup) Intersection(lookups ...sql.IndexLookup) (sql.IndexLookup, error)

func (*AscendIndexLookup) IsMergeable

func (l *AscendIndexLookup) IsMergeable(lookup sql.IndexLookup) bool

func (*AscendIndexLookup) String

func (l *AscendIndexLookup) String() string

func (*AscendIndexLookup) Union

func (l *AscendIndexLookup) Union(lookups ...sql.IndexLookup) (sql.IndexLookup, error)

func (*AscendIndexLookup) Values

type Database

type Database struct {
	// contains filtered or unexported fields
}

Database is an in-memory database.

func NewDatabase

func NewDatabase(name string) *Database

NewDatabase creates a new database with the given name.

func (*Database) AddTable

func (d *Database) AddTable(name string, t sql.Table)

AddTable adds a new table to the database.

func (*Database) CreateTable

func (d *Database) CreateTable(ctx *sql.Context, name string, schema sql.Schema) error

CreateTable creates a table with the given name and schema

func (*Database) CreateTrigger

func (d *Database) CreateTrigger(ctx *sql.Context, definition sql.TriggerDefinition) error

func (*Database) DropTable

func (d *Database) DropTable(ctx *sql.Context, name string) error

DropTable drops the table with the given name

func (*Database) DropTrigger

func (d *Database) DropTrigger(ctx *sql.Context, name string) error

func (*Database) EnablePrimaryKeyIndexes

func (d *Database) EnablePrimaryKeyIndexes()

EnablePrimaryKeyIndexes causes every table created in this database to use an index on its primary keys

func (*Database) GetTableInsensitive

func (d *Database) GetTableInsensitive(ctx *sql.Context, tblName string) (sql.Table, bool, error)

func (*Database) GetTableNames

func (d *Database) GetTableNames(ctx *sql.Context) ([]string, error)

func (*Database) GetTriggers

func (d *Database) GetTriggers(ctx *sql.Context) ([]sql.TriggerDefinition, error)

func (*Database) Name

func (d *Database) Name() string

Name returns the database name.

func (*Database) RenameTable

func (d *Database) RenameTable(ctx *sql.Context, oldName, newName string) error

func (*Database) Tables

func (d *Database) Tables() map[string]sql.Table

Tables returns all tables in the database.

type DescendIndexLookup

type DescendIndexLookup struct {
	Gt    []interface{}
	Lte   []interface{}
	Index ExpressionsIndex
	// contains filtered or unexported fields
}

func (*DescendIndexLookup) EvalExpression

func (l *DescendIndexLookup) EvalExpression() sql.Expression

func (*DescendIndexLookup) ID

func (l *DescendIndexLookup) ID() string

func (*DescendIndexLookup) Indexes

func (l *DescendIndexLookup) Indexes() []string

func (*DescendIndexLookup) Intersection

func (l *DescendIndexLookup) Intersection(lookups ...sql.IndexLookup) (sql.IndexLookup, error)

func (*DescendIndexLookup) IsMergeable

func (l *DescendIndexLookup) IsMergeable(lookup sql.IndexLookup) bool

func (*DescendIndexLookup) String

func (l *DescendIndexLookup) String() string

func (*DescendIndexLookup) Union

func (l *DescendIndexLookup) Union(lookups ...sql.IndexLookup) (sql.IndexLookup, error)

func (*DescendIndexLookup) Values

type ExpressionsIndex

type ExpressionsIndex interface {
	MemTable() *Table
	ColumnExpressions() []sql.Expression
}

ExpressionsIndex is an index made out of one or more expressions (usually field expressions), linked to a Table.

type HistoryDatabase

type HistoryDatabase struct {
	Database
	Revisions map[string]map[interface{}]sql.Table
	// contains filtered or unexported fields
}

HistoryDatabase is a test-only VersionedDatabase implementation. It only supports exact lookups, not AS OF queries between two revisions. It's constructed just like its non-versioned sibling, but it can receive updates to particular tables via the AddTableAsOf method. Consecutive calls to AddTableAsOf with the same table must install new versions of the named table each time, with ascending version identifiers, for this to work.

func NewHistoryDatabase

func NewHistoryDatabase(name string) *HistoryDatabase

func (*HistoryDatabase) AddTableAsOf

func (db *HistoryDatabase) AddTableAsOf(name string, t sql.Table, asOf interface{})

Adds a table with an asOf revision key. The table given becomes the current version for the name given.

func (*HistoryDatabase) GetTableInsensitiveAsOf

func (db *HistoryDatabase) GetTableInsensitiveAsOf(ctx *sql.Context, tblName string, time interface{}) (sql.Table, bool, error)

func (*HistoryDatabase) GetTableNamesAsOf

func (db *HistoryDatabase) GetTableNamesAsOf(ctx *sql.Context, time interface{}) ([]string, error)

type MergeableIndex

type MergeableIndex struct {
	DB         string // required for engine tests with driver
	DriverName string // required for engine tests with driver
	Tbl        *Table // required for engine tests with driver
	TableName  string
	Exprs      []sql.Expression
	Name       string
	Unique     bool
	CommentStr string
}

func (*MergeableIndex) AscendGreaterOrEqual

func (i *MergeableIndex) AscendGreaterOrEqual(keys ...interface{}) (sql.IndexLookup, error)

func (*MergeableIndex) AscendLessThan

func (i *MergeableIndex) AscendLessThan(keys ...interface{}) (sql.IndexLookup, error)

func (*MergeableIndex) AscendRange

func (i *MergeableIndex) AscendRange(greaterOrEqual, lessThan []interface{}) (sql.IndexLookup, error)

func (*MergeableIndex) ColumnExpressions

func (i *MergeableIndex) ColumnExpressions() []sql.Expression

func (*MergeableIndex) Comment

func (i *MergeableIndex) Comment() string

func (*MergeableIndex) Database

func (i *MergeableIndex) Database() string

func (*MergeableIndex) DescendGreater

func (i *MergeableIndex) DescendGreater(keys ...interface{}) (sql.IndexLookup, error)

func (*MergeableIndex) DescendLessOrEqual

func (i *MergeableIndex) DescendLessOrEqual(keys ...interface{}) (sql.IndexLookup, error)

func (*MergeableIndex) DescendRange

func (i *MergeableIndex) DescendRange(lessOrEqual, greaterThan []interface{}) (sql.IndexLookup, error)

func (*MergeableIndex) Driver

func (i *MergeableIndex) Driver() string

func (*MergeableIndex) Expressions

func (i *MergeableIndex) Expressions() []string

func (*MergeableIndex) Get

func (i *MergeableIndex) Get(key ...interface{}) (sql.IndexLookup, error)

func (*MergeableIndex) Has

func (i *MergeableIndex) Has(sql.Partition, ...interface{}) (bool, error)

func (*MergeableIndex) ID

func (i *MergeableIndex) ID() string

func (*MergeableIndex) IndexType

func (i *MergeableIndex) IndexType() string

func (*MergeableIndex) IsUnique

func (i *MergeableIndex) IsUnique() bool

func (*MergeableIndex) MemTable

func (i *MergeableIndex) MemTable() *Table

func (*MergeableIndex) Not

func (i *MergeableIndex) Not(keys ...interface{}) (sql.IndexLookup, error)

func (*MergeableIndex) Table

func (i *MergeableIndex) Table() string

type MergeableIndexLookup

type MergeableIndexLookup struct {
	Key   []interface{}
	Index ExpressionsIndex
}

MergeableIndexLookup is a lookup linked to an ExpressionsIndex. It can be merged with any other MergeableIndexLookup. All lookups in this package are Merge

func (*MergeableIndexLookup) EvalExpression

func (i *MergeableIndexLookup) EvalExpression() sql.Expression

func (*MergeableIndexLookup) ID

func (i *MergeableIndexLookup) ID() string

func (*MergeableIndexLookup) Indexes

func (i *MergeableIndexLookup) Indexes() []string

func (*MergeableIndexLookup) Intersection

func (i *MergeableIndexLookup) Intersection(lookups ...sql.IndexLookup) (sql.IndexLookup, error)

func (*MergeableIndexLookup) IsMergeable

func (i *MergeableIndexLookup) IsMergeable(lookup sql.IndexLookup) bool

func (*MergeableIndexLookup) String

func (i *MergeableIndexLookup) String() string

func (*MergeableIndexLookup) Union

func (i *MergeableIndexLookup) Union(lookups ...sql.IndexLookup) (sql.IndexLookup, error)

func (*MergeableIndexLookup) Values

type MergeableLookup

type MergeableLookup interface {
	ID() string
}

All lookups in this package, except for UnmergeableLookup, are MergeableLookups. The IDs are mostly for testing / verification purposes.

type MergedIndexLookup

type MergedIndexLookup struct {
	Unions        []sql.IndexLookup
	Intersections []sql.IndexLookup
	Index         ExpressionsIndex
}

MergedIndexLookup is an index lookup that has been merged with another. Exactly one of the Unions or Intersections fields should be set, and correspond to a logical AND or OR operation, respectively.

func (*MergedIndexLookup) EvalExpression

func (m *MergedIndexLookup) EvalExpression() sql.Expression

func (*MergedIndexLookup) ID

func (m *MergedIndexLookup) ID() string

func (*MergedIndexLookup) Indexes

func (m *MergedIndexLookup) Indexes() []string

func (*MergedIndexLookup) Intersection

func (m *MergedIndexLookup) Intersection(lookups ...sql.IndexLookup) (sql.IndexLookup, error)

func (*MergedIndexLookup) IsMergeable

func (m *MergedIndexLookup) IsMergeable(lookup sql.IndexLookup) bool

func (*MergedIndexLookup) String

func (m *MergedIndexLookup) String() string

func (*MergedIndexLookup) Union

func (m *MergedIndexLookup) Union(lookups ...sql.IndexLookup) (sql.IndexLookup, error)

func (*MergedIndexLookup) Values

type NegateIndexLookup

type NegateIndexLookup struct {
	Lookup MergeableLookup
	Index  ExpressionsIndex
}

func (*NegateIndexLookup) EvalExpression

func (l *NegateIndexLookup) EvalExpression() sql.Expression

func (*NegateIndexLookup) ID

func (l *NegateIndexLookup) ID() string

func (*NegateIndexLookup) Indexes

func (l *NegateIndexLookup) Indexes() []string

func (*NegateIndexLookup) Intersection

func (l *NegateIndexLookup) Intersection(indexes ...sql.IndexLookup) (sql.IndexLookup, error)

func (*NegateIndexLookup) IsMergeable

func (*NegateIndexLookup) IsMergeable(lookup sql.IndexLookup) bool

func (*NegateIndexLookup) String

func (l *NegateIndexLookup) String() string

func (*NegateIndexLookup) Union

func (l *NegateIndexLookup) Union(lookups ...sql.IndexLookup) (sql.IndexLookup, error)

func (*NegateIndexLookup) Values

type PushdownTable

type PushdownTable struct {
	Table
	// contains filtered or unexported fields
}

PushdownTable is an extension to Table that implements sql.FilteredTable and sql.ProjectedTable. This is mostly just for demonstration and testing purposes -- these new interfaces do not significantly speed up query execution. The implementation is kept separate since it affects the optimization of query plans by the analyzer, and most integrators won't implement these two interfaces.

func NewPartitionedPushdownTable

func NewPartitionedPushdownTable(name string, schema sql.Schema, numPartitions int) *PushdownTable

NewPartitionedPushdownTable creates a new PushdownTable with the given name, schema and number of partitions.

func NewPushdownTable

func NewPushdownTable(name string, schema sql.Schema) *PushdownTable

NewPushdownTable creates a new PushdownTable with the given name and schema

func (*PushdownTable) DebugString

func (t *PushdownTable) DebugString() string

func (*PushdownTable) Filters

func (t *PushdownTable) Filters() []sql.Expression

Filters implements the sql.FilteredTable interface.

func (*PushdownTable) PartitionRows

func (t *PushdownTable) PartitionRows(ctx *sql.Context, partition sql.Partition) (sql.RowIter, error)

func (*PushdownTable) Projection

func (t *PushdownTable) Projection() []string

Projection implements the sql.ProjectedTable interface.

func (*PushdownTable) String

func (t *PushdownTable) String() string

String implements the sql.Table interface.

func (*PushdownTable) WithFilters

func (t *PushdownTable) WithFilters(filters []sql.Expression) sql.Table

WithFilters implements the sql.FilteredTable interface.

func (*PushdownTable) WithIndexLookup

func (t *PushdownTable) WithIndexLookup(lookup sql.IndexLookup) sql.Table

WithIndexLookup implements the sql.IndexAddressableTable interface.

func (*PushdownTable) WithProjection

func (t *PushdownTable) WithProjection(colNames []string) sql.Table

WithProjection implements the sql.ProjectedTable interface.

type Table

type Table struct {
	// contains filtered or unexported fields
}

Table represents an in-memory database table.

func NewPartitionedTable

func NewPartitionedTable(name string, schema sql.Schema, numPartitions int) *Table

NewPartitionedTable creates a new Table with the given name, schema and number of partitions.

func NewTable

func NewTable(name string, schema sql.Schema) *Table

NewTable creates a new Table with the given name and schema.

func (*Table) AddColumn

func (t *Table) AddColumn(ctx *sql.Context, column *sql.Column, order *sql.ColumnOrder) error

func (*Table) AutoIncrementSetter

func (t *Table) AutoIncrementSetter(*sql.Context) sql.AutoIncrementSetter

func (*Table) CreateForeignKey

func (t *Table) CreateForeignKey(_ *sql.Context, fkName string, columns []string, referencedTable string, referencedColumns []string, onUpdate, onDelete sql.ForeignKeyReferenceOption) error

CreateForeignKey implements sql.ForeignKeyAlterableTable. Foreign keys are not enforced on update / delete.

func (*Table) CreateIndex

func (t *Table) CreateIndex(ctx *sql.Context, indexName string, using sql.IndexUsing, constraint sql.IndexConstraint, columns []sql.IndexColumn, comment string) error

CreateIndex implements sql.IndexAlterableTable

func (*Table) DebugString

func (t *Table) DebugString() string

func (*Table) Deleter

func (t *Table) Deleter(*sql.Context) sql.RowDeleter

func (*Table) DropColumn

func (t *Table) DropColumn(ctx *sql.Context, columnName string) error

func (*Table) DropForeignKey

func (t *Table) DropForeignKey(ctx *sql.Context, fkName string) error

DropForeignKey implements sql.ForeignKeyAlterableTable.

func (*Table) DropIndex

func (t *Table) DropIndex(ctx *sql.Context, indexName string) error

DropIndex implements sql.IndexAlterableTable

func (*Table) EnablePrimaryKeyIndexes

func (t *Table) EnablePrimaryKeyIndexes()

EnablePrimaryKeyIndexes enables the use of primary key indexes on this table.

func (*Table) GetAutoIncrementValue

func (t *Table) GetAutoIncrementValue(*sql.Context) (interface{}, error)

GetAutoIncrementValue gets the last AUTO_INCREMENT value

func (*Table) GetForeignKeys

func (t *Table) GetForeignKeys(_ *sql.Context) ([]sql.ForeignKeyConstraint, error)

GetForeignKeys implements sql.ForeignKeyTable

func (*Table) GetIndexes

func (t *Table) GetIndexes(ctx *sql.Context) ([]sql.Index, error)

GetIndexes implements sql.IndexedTable

func (*Table) HandledFilters

func (t *Table) HandledFilters(filters []sql.Expression) []sql.Expression

HandledFilters implements the sql.FilteredTable interface.

func (*Table) IndexKeyValues

func (t *Table) IndexKeyValues(
	ctx *sql.Context,
	colNames []string,
) (sql.PartitionIndexKeyValueIter, error)

IndexKeyValues implements the sql.IndexableTable interface.

func (*Table) Insert

func (t *Table) Insert(ctx *sql.Context, row sql.Row) error

Convenience method to avoid having to create an inserter in test setup

func (*Table) Inserter

func (t *Table) Inserter(*sql.Context) sql.RowInserter

func (*Table) ModifyColumn

func (t *Table) ModifyColumn(ctx *sql.Context, columnName string, column *sql.Column, order *sql.ColumnOrder) error

func (*Table) Name

func (t *Table) Name() string

Name implements the sql.Table interface.

func (*Table) PartitionCount

func (t *Table) PartitionCount(ctx *sql.Context) (int64, error)

PartitionCount implements the sql.PartitionCounter interface.

func (*Table) PartitionRows

func (t *Table) PartitionRows(ctx *sql.Context, partition sql.Partition) (sql.RowIter, error)

PartitionRows implements the sql.PartitionRows interface.

func (*Table) Partitions

func (t *Table) Partitions(ctx *sql.Context) (sql.PartitionIter, error)

Partitions implements the sql.Table interface.

func (*Table) RenameIndex

func (t *Table) RenameIndex(ctx *sql.Context, fromIndexName string, toIndexName string) error

RenameIndex implements sql.IndexAlterableTable

func (*Table) Replacer

func (t *Table) Replacer(*sql.Context) sql.RowReplacer

func (*Table) Schema

func (t *Table) Schema() sql.Schema

Schema implements the sql.Table interface.

func (*Table) String

func (t *Table) String() string

String implements the sql.Table interface.

func (*Table) Truncate

func (t *Table) Truncate(ctx *sql.Context) (int, error)

func (*Table) Updater

func (t *Table) Updater(*sql.Context) sql.RowUpdater

func (*Table) WithIndexLookup

func (t *Table) WithIndexLookup(lookup sql.IndexLookup) sql.Table

WithIndexLookup implements the sql.IndexAddressableTable interface.

type TestIndexDriver

type TestIndexDriver struct {
	// contains filtered or unexported fields
}

TestIndexDriver is a non-performant index driver meant to aid in verification of engine correctness. It can not create or delete indexes, but will use the index types defined in this package to alter how queries are executed, retrieving values from the indexes rather than from the tables directly.

func NewIndexDriver

func NewIndexDriver(db string, indexes map[string][]sql.DriverIndex) *TestIndexDriver

NewIndexDriver returns a new index driver for database and the indexes given, keyed by the table name.

func (*TestIndexDriver) Create

func (d *TestIndexDriver) Create(db, table, id string, expressions []sql.Expression, config map[string]string) (sql.DriverIndex, error)

func (*TestIndexDriver) Delete

func (*TestIndexDriver) ID

func (d *TestIndexDriver) ID() string

func (*TestIndexDriver) LoadAll

func (d *TestIndexDriver) LoadAll(ctx *sql.Context, db, table string) ([]sql.DriverIndex, error)

func (*TestIndexDriver) Save

type UnmergeableIndex

type UnmergeableIndex struct {
	MergeableIndex
}

A very dumb index that iterates over the rows of a table, evaluates its matching expressions against each row, and stores those values to be later retrieved. Only here to test the functionality of indexed queries. This kind of index cannot be merged with any other index.

func (*UnmergeableIndex) Get

func (u *UnmergeableIndex) Get(key ...interface{}) (sql.IndexLookup, error)

func (*UnmergeableIndex) Has

func (u *UnmergeableIndex) Has(partition sql.Partition, key ...interface{}) (bool, error)

func (*UnmergeableIndex) Table

func (u *UnmergeableIndex) Table() string

type UnmergeableIndexLookup

type UnmergeableIndexLookup struct {
	// contains filtered or unexported fields
}

UnmergeableIndexLookup is the only IndexLookup in this package that doesn't implement Mergeable, and therefore can't be merged with other lookups.

func (*UnmergeableIndexLookup) Indexes

func (u *UnmergeableIndexLookup) Indexes() []string

func (*UnmergeableIndexLookup) Intersection

func (u *UnmergeableIndexLookup) Intersection(_ ...sql.IndexLookup) (sql.IndexLookup, error)

func (*UnmergeableIndexLookup) IsMergeable

func (u *UnmergeableIndexLookup) IsMergeable(_ sql.IndexLookup) bool

func (*UnmergeableIndexLookup) String

func (u *UnmergeableIndexLookup) String() string

func (*UnmergeableIndexLookup) Union

func (*UnmergeableIndexLookup) Values

Jump to

Keyboard shortcuts

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