semantics

package
v0.15.10 Latest Latest
Warning

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

Go to latest
Published: Jul 31, 2024 License: Apache-2.0 Imports: 18 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrNotSingleTable refers to an error happening when something should be used only for single tables
	ErrNotSingleTable = vterrors.Errorf(vtrpcpb.Code_INTERNAL, "[BUG] should only be used for single tables")
)

Functions

func GetSubqueryAndOtherSide

func GetSubqueryAndOtherSide(node *sqlparser.ComparisonExpr) (*sqlparser.Subquery, sqlparser.Expr)

GetSubqueryAndOtherSide returns the subquery and other side of a comparison, iff one of the sides is a SubQuery

func RewriteDerivedTableExpression

func RewriteDerivedTableExpression(expr sqlparser.Expr, vt TableInfo) sqlparser.Expr

RewriteDerivedTableExpression rewrites all the ColName instances in the supplied expression with the expressions behind the column definition of the derived table SELECT foo FROM (SELECT id+42 as foo FROM user) as t We need `foo` to be translated to `id+42` on the inside of the derived table

func ValidAsMapKey

func ValidAsMapKey(s sqlparser.SQLNode) bool

Types

type AmbiguousColumnError

type AmbiguousColumnError struct{ Column string }

func (*AmbiguousColumnError) Error

func (e *AmbiguousColumnError) Error() string

AmbiguousColumnError

func (*AmbiguousColumnError) ErrorCode

func (e *AmbiguousColumnError) ErrorCode() vtrpcpb.Code

func (*AmbiguousColumnError) ErrorState

func (e *AmbiguousColumnError) ErrorState() vterrors.State

type BuggyError

type BuggyError struct{ Msg string }

func (*BuggyError) Error

func (e *BuggyError) Error() string

BuggyError is used for checking conditions that should never occur

type CantGroupOn

type CantGroupOn struct{ Column string }

func (*CantGroupOn) Error

func (e *CantGroupOn) Error() string

CantGroupOn

func (*CantGroupOn) ErrorCode

func (*CantGroupOn) ErrorCode() vtrpcpb.Code

func (*CantGroupOn) ErrorState

func (e *CantGroupOn) ErrorState() vterrors.State

type CantUseMultipleVindexHints

type CantUseMultipleVindexHints struct{ Table string }

func (*CantUseMultipleVindexHints) Error

CantUseMultipleVindexHints

func (*CantUseMultipleVindexHints) ErrorCode

func (c *CantUseMultipleVindexHints) ErrorCode() vtrpcpb.Code

type CantUseOptionHereError

type CantUseOptionHereError struct{ Msg string }

func (*CantUseOptionHereError) Error

func (e *CantUseOptionHereError) Error() string

CantUseOptionHereError

func (*CantUseOptionHereError) ErrorCode

func (e *CantUseOptionHereError) ErrorCode() vtrpcpb.Code

func (*CantUseOptionHereError) ErrorState

func (e *CantUseOptionHereError) ErrorState() vterrors.State

type ColumnInfo

type ColumnInfo struct {
	Name      string
	Type      evalengine.Type
	Invisible bool
}

ColumnInfo contains information about columns

type ColumnNotFoundClauseError

type ColumnNotFoundClauseError struct {
	Column string
	Clause string
}

func (*ColumnNotFoundClauseError) Error

func (e *ColumnNotFoundClauseError) Error() string

ColumnNotFoundInGroupByError

func (*ColumnNotFoundClauseError) ErrorCode

func (*ColumnNotFoundClauseError) ErrorCode() vtrpcpb.Code

func (*ColumnNotFoundClauseError) ErrorState

func (e *ColumnNotFoundClauseError) ErrorState() vterrors.State

type ColumnNotFoundError

type ColumnNotFoundError struct {
	Column *sqlparser.ColName
	Table  *sqlparser.TableName
}

func (ColumnNotFoundError) Error

func (e ColumnNotFoundError) Error() string

ColumnNotFoundError

func (ColumnNotFoundError) ErrorCode

func (e ColumnNotFoundError) ErrorCode() vtrpcpb.Code

func (ColumnNotFoundError) ErrorState

func (e ColumnNotFoundError) ErrorState() vterrors.State

type ColumnsMissingInSchemaError

type ColumnsMissingInSchemaError struct{}

func (*ColumnsMissingInSchemaError) Error

ColumnsMissingInSchemaError

func (*ColumnsMissingInSchemaError) ErrorCode

func (e *ColumnsMissingInSchemaError) ErrorCode() vtrpcpb.Code

type DerivedTable

type DerivedTable struct {
	ASTNode *sqlparser.AliasedTableExpr
	// contains filtered or unexported fields
}

DerivedTable contains the information about the projection, tables involved in derived table.

func (*DerivedTable) GetAliasedTableExpr

func (dt *DerivedTable) GetAliasedTableExpr() *sqlparser.AliasedTableExpr

func (*DerivedTable) GetVindexTable

func (dt *DerivedTable) GetVindexTable() *vindexes.Table

GetVindexTable implements the TableInfo interface

func (*DerivedTable) IsInfSchema

func (dt *DerivedTable) IsInfSchema() bool

IsInfSchema implements the TableInfo interface

func (*DerivedTable) Name

func (dt *DerivedTable) Name() (sqlparser.TableName, error)

Name implements the TableInfo interface

type ExprDependencies

type ExprDependencies map[sqlparser.Expr]TableSet

ExprDependencies stores the tables that an expression depends on as a map

type FakeSI

type FakeSI struct {
	Tables           map[string]*vindexes.Table
	VindexTables     map[string]vindexes.Vindex
	KsForeignKeyMode map[string]vschemapb.Keyspace_ForeignKeyMode
	KsError          map[string]error
	UDFs             []string
}

FakeSI is a fake SchemaInformation for testing

func (*FakeSI) ConnCollation

func (*FakeSI) ConnCollation() collations.ID

func (*FakeSI) Environment

func (s *FakeSI) Environment() *vtenv.Environment

func (*FakeSI) FindTableOrVindex

FindTableOrVindex implements the SchemaInformation interface

func (*FakeSI) ForeignKeyMode

func (s *FakeSI) ForeignKeyMode(keyspace string) (vschemapb.Keyspace_ForeignKeyMode, error)

func (*FakeSI) GetAggregateUDFs

func (s *FakeSI) GetAggregateUDFs() []string

func (*FakeSI) GetForeignKeyChecksState

func (s *FakeSI) GetForeignKeyChecksState() *bool

func (*FakeSI) KeyspaceError

func (s *FakeSI) KeyspaceError(keyspace string) error

type InvalidUseOfGroupFunction

type InvalidUseOfGroupFunction struct{}

func (*InvalidUseOfGroupFunction) Error

InvalidUseOfGroupFunction

func (*InvalidUseOfGroupFunction) ErrorCode

func (*InvalidUseOfGroupFunction) ErrorCode() vtrpcpb.Code

func (*InvalidUseOfGroupFunction) ErrorState

type JSONTablesError

type JSONTablesError struct{ Table string }

func (*JSONTablesError) Error

func (e *JSONTablesError) Error() string

JSONTablesError

type LockOnlyWithDualError

type LockOnlyWithDualError struct{ Node *sqlparser.LockingFunc }

func (*LockOnlyWithDualError) Error

func (e *LockOnlyWithDualError) Error() string

LockOnlyWithDualError

func (*LockOnlyWithDualError) ErrorCode

func (e *LockOnlyWithDualError) ErrorCode() vtrpcpb.Code

type MissingInVSchemaError

type MissingInVSchemaError struct{ Table TableInfo }

func (*MissingInVSchemaError) Error

func (e *MissingInVSchemaError) Error() string

MissingInVSchemaError

func (*MissingInVSchemaError) ErrorCode

func (e *MissingInVSchemaError) ErrorCode() vtrpcpb.Code

type NextWithMultipleTablesError

type NextWithMultipleTablesError struct{ CountTables int }

func (*NextWithMultipleTablesError) Error

NextWithMultipleTablesError

type NoSuchVindexFound

type NoSuchVindexFound struct {
	Table      string
	VindexName string
}

func (*NoSuchVindexFound) Error

func (c *NoSuchVindexFound) Error() string

NoSuchVindexFound

func (*NoSuchVindexFound) ErrorCode

func (c *NoSuchVindexFound) ErrorCode() vtrpcpb.Code

type NotSequenceTableError

type NotSequenceTableError struct{ Table string }

func (*NotSequenceTableError) Error

func (e *NotSequenceTableError) Error() string

NotSequenceTableError

func (*NotSequenceTableError) ErrorCode

func (e *NotSequenceTableError) ErrorCode() vtrpcpb.Code

type NotSingleRouteErr

type NotSingleRouteErr struct {
	Inner error
}

NotSingleRouteErr is used to mark an error as something that should only be returned if the planner fails to merge everything down to a single route

func (NotSingleRouteErr) Error

func (p NotSingleRouteErr) Error() string

type QualifiedOrderInUnionError

type QualifiedOrderInUnionError struct{ Table string }

func (*QualifiedOrderInUnionError) Error

QualifiedOrderInUnionError

type QuerySignature

type QuerySignature struct {
	Aggregation bool
	DML         bool
	Distinct    bool
	HashJoin    bool
	SubQueries  bool
	Union       bool
}

QuerySignature is used to identify shortcuts in the planning process

type RealTable

type RealTable struct {
	ASTNode    *sqlparser.AliasedTableExpr
	Table      *vindexes.Table
	VindexHint *sqlparser.IndexHint
	// contains filtered or unexported fields
}

RealTable contains the alias table expr and vindex table

func (*RealTable) GetAliasedTableExpr

func (r *RealTable) GetAliasedTableExpr() *sqlparser.AliasedTableExpr

GetExpr implements the TableInfo interface

func (*RealTable) GetVindexHint

func (r *RealTable) GetVindexHint() *sqlparser.IndexHint

GetVindexHint implements the TableInfo interface

func (*RealTable) GetVindexTable

func (r *RealTable) GetVindexTable() *vindexes.Table

GetVindexTable implements the TableInfo interface

func (*RealTable) IsInfSchema

func (r *RealTable) IsInfSchema() bool

IsInfSchema implements the TableInfo interface

func (*RealTable) Name

func (r *RealTable) Name() (sqlparser.TableName, error)

Name implements the TableInfo interface

type SQLCalcFoundRowsUsageError

type SQLCalcFoundRowsUsageError struct{}

func (*SQLCalcFoundRowsUsageError) Error

SQLCalcFoundRowsUsageError

func (*SQLCalcFoundRowsUsageError) ErrorCode

func (e *SQLCalcFoundRowsUsageError) ErrorCode() vtrpcpb.Code

type SchemaInformation

type SchemaInformation interface {
	FindTableOrVindex(tablename sqlparser.TableName) (*vindexes.Table, vindexes.Vindex, string, topodatapb.TabletType, key.Destination, error)
	ConnCollation() collations.ID
	Environment() *vtenv.Environment
	// ForeignKeyMode returns the foreign_key flag value
	ForeignKeyMode(keyspace string) (vschemapb.Keyspace_ForeignKeyMode, error)
	GetForeignKeyChecksState() *bool
	KeyspaceError(keyspace string) error
	GetAggregateUDFs() []string
}

SchemaInformation is used to provide table information from Vschema.

type SemTable

type SemTable struct {
	// Tables stores information about the tables in the query, including derived tables
	Tables []TableInfo
	// Comments stores any comments of the /* vt+ */ type in the query
	Comments *sqlparser.ParsedComments
	// Warning stores any warnings generated during semantic analysis.
	Warning string
	// Collation represents the default collation for the query, usually inherited
	// from the connection's default collation.
	Collation collations.ID
	// ExprTypes maps expressions to their respective types in the query.
	ExprTypes map[sqlparser.Expr]evalengine.Type

	// NotSingleRouteErr stores errors related to missing schema information.
	// This typically occurs when a column's existence is uncertain.
	// Instead of failing early, the query is allowed to proceed, possibly
	// succeeding once it reaches MySQL.
	NotSingleRouteErr error

	// NotUnshardedErr stores errors that occur if the query isn't planned as a single route
	// targeting an unsharded keyspace. This typically arises when information is missing, but
	// for unsharded tables, the code operates in a passthrough mode, relying on the underlying
	// MySQL engine to handle errors appropriately.
	NotUnshardedErr error

	// Recursive contains dependencies from the expression to the actual tables
	// in the query (excluding derived tables). For columns in derived tables,
	// this map holds the accumulated dependencies for the column expression.
	Recursive ExprDependencies
	// Direct stores information about the closest dependency for an expression.
	// It doesn't recurse inside derived tables to find the original dependencies.
	Direct ExprDependencies

	// Targets contains the TableSet of each table getting modified by the update/delete statement.
	Targets TableSet

	// ColumnEqualities is used for transitive closures (e.g., if a == b and b == c, then a == c).
	ColumnEqualities map[columnName][]sqlparser.Expr

	// ExpandedColumns is a map of all the added columns for a given table.
	// The columns were added because of the use of `*` in the query
	ExpandedColumns map[sqlparser.TableName][]*sqlparser.ColName

	// StatementIDs is a map of statements and all the table IDs that are contained within
	StatementIDs map[sqlparser.Statement]TableSet

	// QuerySignature is used to identify shortcuts in the planning process
	QuerySignature QuerySignature
	// contains filtered or unexported fields
}

SemTable contains semantic analysis information about the query.

func Analyze

func Analyze(statement sqlparser.Statement, currentDb string, si SchemaInformation) (*SemTable, error)

Analyze analyzes the parsed query.

func AnalyzeStrict

func AnalyzeStrict(statement sqlparser.Statement, currentDb string, si SchemaInformation) (*SemTable, error)

AnalyzeStrict analyzes the parsed query, and fails the analysis for any possible errors

func EmptySemTable

func EmptySemTable() *SemTable

EmptySemTable creates a new empty SemTable

func (*SemTable) ASTEquals

func (st *SemTable) ASTEquals() *sqlparser.Comparator

ASTEquals returns a sqlparser.Comparator that uses the semantic information in this SemTable to explicitly compare column names for equality.

func (*SemTable) AddColumnEquality

func (st *SemTable) AddColumnEquality(colName *sqlparser.ColName, expr sqlparser.Expr)

AddColumnEquality adds a relation of the given colName to the ColumnEqualities map

func (*SemTable) AddExprs

func (st *SemTable) AddExprs(tbl *sqlparser.AliasedTableExpr, cols sqlparser.SelectExprs)

AddExprs adds new select exprs to the SemTable.

func (*SemTable) AndExpressions

func (st *SemTable) AndExpressions(exprs ...sqlparser.Expr) sqlparser.Expr

AndExpressions ands together two or more expressions, minimising the expr when possible

func (*SemTable) Clone

func (*SemTable) Cloned

func (st *SemTable) Cloned(from, to sqlparser.SQLNode)

Cloned copies the dependencies from one expression into the other

func (*SemTable) ColumnLookup

func (st *SemTable) ColumnLookup(col *sqlparser.ColName) (int, error)

ColumnLookup implements the TranslationLookup interface

func (*SemTable) ContainsExpr

func (st *SemTable) ContainsExpr(e sqlparser.Expr, expres []sqlparser.Expr) bool

func (*SemTable) CopyDependencies

func (st *SemTable) CopyDependencies(from, to sqlparser.Expr)

CopyDependencies copies the dependencies from one expression into the other

func (*SemTable) CopyExprInfo

func (st *SemTable) CopyExprInfo(src, dest sqlparser.Expr)

CopyExprInfo lookups src in the ExprTypes map and, if a key is found, assign the corresponding Type value of src to dest.

func (*SemTable) CopySemanticInfo

func (st *SemTable) CopySemanticInfo(from, to sqlparser.SQLNode)

CopySemanticInfo copies all semantic information we have about this SQLNode so that it also applies to the `to` node

func (*SemTable) DefaultCollation

func (st *SemTable) DefaultCollation() collations.ID

func (*SemTable) DirectDeps

func (st *SemTable) DirectDeps(expr sqlparser.Expr) TableSet

DirectDeps return the table dependencies of the expression.

func (*SemTable) EqualsExpr

func (st *SemTable) EqualsExpr(a, b sqlparser.Expr) bool

EqualsExpr compares two expressions using the semantic analysis information. This means that we use the binding info to recognize that two ColName's can point to the same table column even though they are written differently. Example would be the `foobar` column in the following query: `SELECT foobar FROM tbl ORDER BY tbl.foobar` The expression in the select list is not equal to the one in the ORDER BY, but they point to the same column and would be considered equal by this method

func (*SemTable) EqualsExprWithDeps

func (st *SemTable) EqualsExprWithDeps(a, b sqlparser.Expr) bool

EqualsExprWithDeps compares two expressions taking into account their semantic information. Dependency data typically pertains only to column expressions, this method considers them for all expression types. The method checks if dependency information exists for both expressions. If it does, the dependencies must match. If we are missing dependency information for either

func (*SemTable) ErrIfFkDependentColumnUpdated

func (st *SemTable) ErrIfFkDependentColumnUpdated(updateExprs sqlparser.UpdateExprs) error

ErrIfFkDependentColumnUpdated checks if a foreign key column that is being updated is dependent on another column which also being updated.

func (*SemTable) ForeignKeysPresent

func (st *SemTable) ForeignKeysPresent() bool

ForeignKeysPresent returns whether there are any foreign key constraints left in the semantic table that require handling.

func (*SemTable) GetChildForeignKeysForTable

func (st *SemTable) GetChildForeignKeysForTable(tbl sqlparser.TableName) ([]vindexes.ChildFKInfo, error)

GetChildForeignKeysForTable gets the child foreign keys as a list for the specified TableName.

func (*SemTable) GetChildForeignKeysForTableSet

func (st *SemTable) GetChildForeignKeysForTableSet(target TableSet) (fks []vindexes.ChildFKInfo)

GetChildForeignKeysForTableSet gets the child foreign keys as a listfor the TableSet.

func (*SemTable) GetChildForeignKeysForTargets

func (st *SemTable) GetChildForeignKeysForTargets() (fks []vindexes.ChildFKInfo)

GetChildForeignKeysForTargets gets the child foreign keys as a list for all the target tables.

func (*SemTable) GetChildForeignKeysList

func (st *SemTable) GetChildForeignKeysList() []vindexes.ChildFKInfo

GetChildForeignKeysList gets the child foreign keys as a list.

func (*SemTable) GetExprAndEqualities

func (st *SemTable) GetExprAndEqualities(expr sqlparser.Expr) []sqlparser.Expr

GetExprAndEqualities returns a slice containing the given expression, and it's known equalities if any

func (*SemTable) GetParentForeignKeysForTableSet

func (st *SemTable) GetParentForeignKeysForTableSet(target TableSet) (fks []vindexes.ParentFKInfo)

GetParentForeignKeysForTableSet gets the parent foreign keys as a list for the TableSet.

func (*SemTable) GetParentForeignKeysForTargets

func (st *SemTable) GetParentForeignKeysForTargets() (fks []vindexes.ParentFKInfo)

GetParentForeignKeysForTargets gets the parent foreign keys as a list for all the target tables.

func (*SemTable) GetParentForeignKeysList

func (st *SemTable) GetParentForeignKeysList() []vindexes.ParentFKInfo

GetParentForeignKeysList gets the parent foreign keys as a list.

func (*SemTable) GetTargetTableSetForTableName

func (st *SemTable) GetTargetTableSetForTableName(name sqlparser.TableName) (TableSet, error)

GetTargetTableSetForTableName returns the TableSet for the given table name from the target tables.

func (*SemTable) GetUpdateExpressionsForFk

func (st *SemTable) GetUpdateExpressionsForFk(foreignKey string) sqlparser.UpdateExprs

GetUpdateExpressionsForFk gets the update expressions for the given serialized foreign key constraint.

func (*SemTable) HasNonLiteralForeignKeyUpdate

func (st *SemTable) HasNonLiteralForeignKeyUpdate(updExprs sqlparser.UpdateExprs) bool

HasNonLiteralForeignKeyUpdate checks for non-literal updates in expressions linked to a foreign key.

func (*SemTable) NeedsWeightString

func (st *SemTable) NeedsWeightString(e sqlparser.Expr) bool

NeedsWeightString returns true if the given expression needs weight_string to do safe comparisons

func (*SemTable) NewTableId

func (st *SemTable) NewTableId() TableSet

NewTableId creates a new table id and returns it.

func (*SemTable) RecursiveDeps

func (st *SemTable) RecursiveDeps(expr sqlparser.Expr) TableSet

RecursiveDeps return the table dependencies of the expression.

func (*SemTable) RemoveNonRequiredForeignKeys

func (st *SemTable) RemoveNonRequiredForeignKeys(verifyAllFks bool, getAction func(fk vindexes.ChildFKInfo) sqlparser.ReferenceAction) error

RemoveNonRequiredForeignKeys prunes the list of foreign keys that the query involves. This function considers whether VTGate needs to validate all foreign keys or can delegate some of the responsibility to MySQL. In the latter case, the following types of foreign keys can be safely removed from our list: 1. Shard-scoped parent foreign keys: MySQL itself will reject a DML operation that violates these constraints. 2. Shard-scoped RESTRICT foreign keys: MySQL will also fail the operation if these foreign key constraints are breached.

func (*SemTable) RemoveParentForeignKey

func (st *SemTable) RemoveParentForeignKey(fkToIgnore string) error

RemoveParentForeignKey removes the given foreign key from the parent foreign keys that sem table stores.

func (*SemTable) ReplaceTableSetFor

func (st *SemTable) ReplaceTableSetFor(id TableSet, t *sqlparser.AliasedTableExpr)

ReplaceTableSetFor replaces the given single TabletSet with the new *sqlparser.AliasedTableExpr

func (*SemTable) SelectExprs

func (*SemTable) SingleKeyspace

func (st *SemTable) SingleKeyspace() (ks *vindexes.Keyspace)

SingleKeyspace returns the single keyspace if all tables in the query are in the same keyspace

func (*SemTable) SingleUnshardedKeyspace

func (st *SemTable) SingleUnshardedKeyspace() (ks *vindexes.Keyspace, tables []*vindexes.Table)

SingleUnshardedKeyspace returns the single keyspace if all tables in the query are in the same, unsharded keyspace

func (*SemTable) TableInfoFor

func (st *SemTable) TableInfoFor(id TableSet) (TableInfo, error)

TableInfoFor returns the table info for the table set. It should contains only single table.

func (*SemTable) TableInfoForExpr

func (st *SemTable) TableInfoForExpr(expr sqlparser.Expr) (TableInfo, error)

TableInfoForExpr returns the table info of the table that this expression depends on. Careful: this only works for expressions that have a single table dependency

func (*SemTable) TableSetFor

func (st *SemTable) TableSetFor(t *sqlparser.AliasedTableExpr) TableSet

TableSetFor returns the bitmask for this particular table

func (*SemTable) TypeForExpr

func (st *SemTable) TypeForExpr(e sqlparser.Expr) (evalengine.Type, bool)

TypeForExpr returns the type of expressions in the query Note that PlanningContext has the same method, and you should use that if you have a PlanningContext

func (*SemTable) Uniquify

func (st *SemTable) Uniquify(in []sqlparser.Expr) []sqlparser.Expr

Uniquify takes a slice of expressions and removes any duplicates

func (*SemTable) UpdateChildFKExpr

func (st *SemTable) UpdateChildFKExpr(origUpdExpr *sqlparser.UpdateExpr, newExpr sqlparser.Expr)

UpdateChildFKExpr updates the child foreign key expression with the new expression.

type ShardedError

type ShardedError struct {
	Inner error
}

ShardedError is used to mark an error as something that should only be returned if the query is not unsharded

func (ShardedError) Error

func (p ShardedError) Error() string

func (ShardedError) Unwrap

func (p ShardedError) Unwrap() error

type SubqueryColumnCountError

type SubqueryColumnCountError struct{ Expected int }

func (*SubqueryColumnCountError) Error

func (e *SubqueryColumnCountError) Error() string

func (*SubqueryColumnCountError) ErrorCode

func (e *SubqueryColumnCountError) ErrorCode() vtrpcpb.Code

SubqueryColumnCountError

type TableInfo

type TableInfo interface {
	// Name returns the table name
	Name() (sqlparser.TableName, error)

	// GetVindexTable returns the vschema version of this TableInfo
	GetVindexTable() *vindexes.Table

	// IsInfSchema returns true if this table is information_schema
	IsInfSchema() bool

	// getAliasedTableExpr returns the AST struct behind this table
	GetAliasedTableExpr() *sqlparser.AliasedTableExpr
	// contains filtered or unexported methods
}

TableInfo contains information about tables

type TableNotUpdatableError

type TableNotUpdatableError struct{ Table string }

func (*TableNotUpdatableError) Error

func (e *TableNotUpdatableError) Error() string

TableNotUpdatableError

func (*TableNotUpdatableError) ErrorCode

func (e *TableNotUpdatableError) ErrorCode() vtrpcpb.Code

func (*TableNotUpdatableError) ErrorState

func (e *TableNotUpdatableError) ErrorState() vterrors.State

type TableSet

type TableSet bitset.Bitset

TableSet is how a set of tables is expressed. Tables get unique bits assigned in the order that they are encountered during semantic analysis.

func EmptyTableSet

func EmptyTableSet() TableSet

EmptyTableSet creates an empty TableSet

func MergeTableSets

func MergeTableSets(tss ...TableSet) TableSet

MergeTableSets merges all the given TableSet into a single one

func SingleTableSet

func SingleTableSet(tableidx int) TableSet

SingleTableSet creates a TableSet that contains only the given table

func TableSetFromIds

func TableSetFromIds(tids ...int) (ts TableSet)

TableSetFromIds returns TableSet for all the id passed in argument.

func (TableSet) Constituents

func (ts TableSet) Constituents() (result []TableSet)

Constituents returns a slice with the indices for all tables in this TableSet

func (TableSet) ForEachTable

func (ts TableSet) ForEachTable(callback func(int))

ForEachTable calls the given callback with the indices for all tables in this TableSet

func (TableSet) Format

func (ts TableSet) Format(f fmt.State, verb rune)

Format formats the TableSet.

func (TableSet) IsEmpty

func (ts TableSet) IsEmpty() bool

IsEmpty returns true if there are no tables in the tableset

func (TableSet) IsOverlapping

func (ts TableSet) IsOverlapping(other TableSet) bool

IsOverlapping returns true if at least one table exists in both sets

func (TableSet) IsSolvedBy

func (ts TableSet) IsSolvedBy(other TableSet) bool

IsSolvedBy returns true if all of `ts` is contained in `other`

func (TableSet) KeepOnly

func (ts TableSet) KeepOnly(other TableSet) TableSet

KeepOnly removes all the tables not in `other` from this TableSet

func (TableSet) Merge

func (ts TableSet) Merge(other TableSet) TableSet

Merge creates a TableSet that contains both inputs

func (TableSet) NotEmpty

func (ts TableSet) NotEmpty() bool

NonEmpty returns true if there are tables in the tableset

func (TableSet) NumberOfTables

func (ts TableSet) NumberOfTables() int

NumberOfTables returns the number of bits set

func (TableSet) Remove

func (ts TableSet) Remove(other TableSet) TableSet

Remove returns a new TableSet with all the tables in `other` removed

func (TableSet) TableOffset

func (ts TableSet) TableOffset() int

TableOffset returns the offset in the Tables array from TableSet

func (TableSet) WithTable

func (ts TableSet) WithTable(tableidx int) TableSet

WithTable returns a new TableSet that contains this table too

type UnionColumnsDoNotMatchError

type UnionColumnsDoNotMatchError struct {
	FirstProj  int
	SecondProj int
}

func (*UnionColumnsDoNotMatchError) Error

func (*UnionColumnsDoNotMatchError) ErrorCode

func (e *UnionColumnsDoNotMatchError) ErrorCode() vtrpcpb.Code

func (*UnionColumnsDoNotMatchError) ErrorState

func (e *UnionColumnsDoNotMatchError) ErrorState() vterrors.State

UnionColumnsDoNotMatchError

type UnionWithSQLCalcFoundRowsError

type UnionWithSQLCalcFoundRowsError struct{}

func (*UnionWithSQLCalcFoundRowsError) Error

UnionWithSQLCalcFoundRowsError

type UnsupportedConstruct

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

func (*UnsupportedConstruct) Error

func (e *UnsupportedConstruct) Error() string

func (*UnsupportedConstruct) ErrorCode

func (e *UnsupportedConstruct) ErrorCode() vtrpcpb.Code

type UnsupportedMultiTablesInUpdateError

type UnsupportedMultiTablesInUpdateError struct {
	ExprCount int
	NotAlias  bool
}

func (*UnsupportedMultiTablesInUpdateError) Error

UnsupportedMultiTablesInUpdateError

type UnsupportedNaturalJoinError

type UnsupportedNaturalJoinError struct{ JoinExpr *sqlparser.JoinTableExpr }

func (*UnsupportedNaturalJoinError) Error

UnsupportedNaturalJoinError

type VindexTable

type VindexTable struct {
	Table  TableInfo
	Vindex vindexes.Vindex
}

VindexTable contains a vindexes.Vindex and a TableInfo. The former represents the vindex we are keeping information about, and the latter represents the additional table information (usually a RealTable or an AliasedTable) of our vindex.

func (*VindexTable) GetAliasedTableExpr

func (v *VindexTable) GetAliasedTableExpr() *sqlparser.AliasedTableExpr

GetExpr implements the TableInfo interface

func (*VindexTable) GetVindexTable

func (v *VindexTable) GetVindexTable() *vindexes.Table

GetVindexTable implements the TableInfo interface

func (*VindexTable) IsInfSchema

func (v *VindexTable) IsInfSchema() bool

IsInfSchema implements the TableInfo interface

func (*VindexTable) Name

func (v *VindexTable) Name() (sqlparser.TableName, error)

Name implements the TableInfo interface

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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