memory

package
v0.6.1 Latest Latest
Warning

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

Go to latest
Published: Jun 12, 2020 License: Apache-2.0 Imports: 9 Imported by: 0

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) Difference

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

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

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) DropTable

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

DropTable drops the table with the given name

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) 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) Difference

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

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

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
}

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) 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) 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) Difference

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

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

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) Difference

func (m *MergedIndexLookup) Difference(...sql.IndexLookup) sql.IndexLookup

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

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

func (*MergedIndexLookup) Values

type NegateIndexLookup

type NegateIndexLookup struct {
	Lookup MergeableLookup
	Index  ExpressionsIndex
}

func (*NegateIndexLookup) Difference

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

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

func (*NegateIndexLookup) Values

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) 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) Deleter

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

func (*Table) DropColumn

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

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) Filters

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

Filters implements the sql.FilteredTable interface.

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) Projection

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

Projection implements the sql.ProjectedTable 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 inteface.

func (*Table) Updater

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

func (*Table) WithFilters

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

WithFilters implements the sql.FilteredTable interface.

func (*Table) WithIndexLookup

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

WithIndexLookup implements the sql.IndexAddressableTable interface.

func (*Table) WithProjection

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

WithProjection implements the sql.ProjectedTable 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 {
	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
}

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) Database

func (u *UnmergeableIndex) Database() string

func (*UnmergeableIndex) Driver

func (u *UnmergeableIndex) Driver() string

func (*UnmergeableIndex) Expressions

func (u *UnmergeableIndex) Expressions() []string

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) ID

func (u *UnmergeableIndex) ID() string

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) String

func (u *UnmergeableIndexLookup) String() string

func (*UnmergeableIndexLookup) Values

Jump to

Keyboard shortcuts

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