Documentation ¶
Index ¶
- Variables
- func AllocAutoIncrementValue(ctx context.Context, t Table, sctx sessionctx.Context) (int64, error)
- func AllocBatchAutoIncrementValue(ctx context.Context, t Table, sctx sessionctx.Context, N int) (firstID int64, increment int64, err error)
- func CastValue(ctx sessionctx.Context, val types.Datum, col *model.ColumnInfo, ...) (casted types.Datum, err error)
- func CheckNotNull(cols []*Column, row []types.Datum) error
- func CheckOnce(cols []*Column) error
- func ColDescFieldNames(full bool) []string
- func EvalColDefaultExpr(ctx sessionctx.Context, col *model.ColumnInfo, defaultExpr ast.ExprNode) (types.Datum, error)
- func FillVirtualColumnValue(virtualRetTypes []*types.FieldType, virtualColumnIndex []int, ...) error
- func GetColDefaultValue(ctx sessionctx.Context, col *model.ColumnInfo) (types.Datum, error)
- func GetColOriginDefaultValue(ctx sessionctx.Context, col *model.ColumnInfo) (types.Datum, error)
- func GetZeroValue(col *model.ColumnInfo) types.Datum
- func OptionalFsp(fieldType *types.FieldType) string
- type AddRecordOpt
- type AddRecordOption
- type CachedTable
- type ColDesc
- type Column
- func FindCol(cols []*Column, name string) *Column
- func FindColLowerCase(cols []*Column, name string) *Column
- func FindCols(cols []*Column, names []string, pkIsHandle bool) ([]*Column, string)
- func FindColumns(cols []*Column, names []string, pkIsHandle bool) (foundCols []*Column, missingOffset int)
- func FindOnUpdateCols(cols []*Column) []*Column
- func ToColumn(col *model.ColumnInfo) *Column
- func (c *Column) CheckNotNull(data *types.Datum) error
- func (c *Column) HandleBadNull(d *types.Datum, sc *stmtctx.StatementContext) error
- func (c *Column) IsCommonHandleColumn(tbInfo *model.TableInfo) bool
- func (c *Column) IsPKHandleColumn(tbInfo *model.TableInfo) bool
- func (c *Column) String() string
- func (c *Column) ToInfo() *model.ColumnInfo
- type CreateIdxOpt
- type CreateIdxOptFunc
- type Index
- type IndexIter
- type IndexIterator
- type PartitionedTable
- type PhysicalTable
- type RecordIterFunc
- type Table
- type Type
- type WithReserveAutoIDHint
Constants ¶
This section is empty.
Variables ¶
var ( // ErrColumnCantNull is used for inserting null to a not null column. ErrColumnCantNull = dbterror.ClassTable.NewStd(mysql.ErrBadNull) // ErrUnknownColumn is returned when accessing an unknown column. ErrUnknownColumn = dbterror.ClassTable.NewStd(mysql.ErrBadField) // ErrNoDefaultValue is used when insert a row, the column value is not given, and the column has not null flag // and it doesn't have a default value. ErrNoDefaultValue = dbterror.ClassTable.NewStd(mysql.ErrNoDefaultForField) // ErrIndexOutBound returns for index column offset out of bound. ErrIndexOutBound = dbterror.ClassTable.NewStd(mysql.ErrIndexOutBound) // ErrUnsupportedOp returns for unsupported operation. ErrUnsupportedOp = dbterror.ClassTable.NewStd(mysql.ErrUnsupportedOp) // ErrRowNotFound returns for row not found. ErrRowNotFound = dbterror.ClassTable.NewStd(mysql.ErrRowNotFound) // ErrTableStateCantNone returns for table none state. ErrTableStateCantNone = dbterror.ClassTable.NewStd(mysql.ErrTableStateCantNone) // ErrColumnStateCantNone returns for column none state. ErrColumnStateCantNone = dbterror.ClassTable.NewStd(mysql.ErrColumnStateCantNone) // ErrColumnStateNonPublic returns for column non-public state. ErrColumnStateNonPublic = dbterror.ClassTable.NewStd(mysql.ErrColumnStateNonPublic) // ErrIndexStateCantNone returns for index none state. ErrIndexStateCantNone = dbterror.ClassTable.NewStd(mysql.ErrIndexStateCantNone) // ErrInvalidRecordKey returns for invalid record key. ErrInvalidRecordKey = dbterror.ClassTable.NewStd(mysql.ErrInvalidRecordKey) // ErrTruncatedWrongValueForField returns for truncate wrong value for field. ErrTruncatedWrongValueForField = dbterror.ClassTable.NewStd(mysql.ErrTruncatedWrongValueForField) // ErrUnknownPartition returns unknown partition error. ErrUnknownPartition = dbterror.ClassTable.NewStd(mysql.ErrUnknownPartition) // ErrNoPartitionForGivenValue returns table has no partition for value. ErrNoPartitionForGivenValue = dbterror.ClassTable.NewStd(mysql.ErrNoPartitionForGivenValue) // ErrLockOrActiveTransaction returns when execute unsupported statement in a lock session or an active transaction. ErrLockOrActiveTransaction = dbterror.ClassTable.NewStd(mysql.ErrLockOrActiveTransaction) // ErrSequenceHasRunOut returns when sequence has run out. ErrSequenceHasRunOut = dbterror.ClassTable.NewStd(mysql.ErrSequenceRunOut) // ErrRowDoesNotMatchGivenPartitionSet returns when the destination partition conflict with the partition selection. ErrRowDoesNotMatchGivenPartitionSet = dbterror.ClassTable.NewStd(mysql.ErrRowDoesNotMatchGivenPartitionSet) // ErrTempTableFull returns a table is full error, it's used by temporary table now. ErrTempTableFull = dbterror.ClassTable.NewStd(mysql.ErrRecordFileFull) // ErrOptOnCacheTable returns when exec unsupported opt at cache mode ErrOptOnCacheTable = dbterror.ClassDDL.NewStd(mysql.ErrOptOnCacheTable) )
var FromBackfill = func(opt *CreateIdxOpt) { opt.FromBackFill = true }
FromBackfill indicates that the index is created by DDL backfill worker. In the backfill-merge process, the index KVs from DML will be redirected to the temp index. On the other hand, the index KVs from DDL backfill worker should never be redirected to the temp index.
var MockTableFromMeta func(tableInfo *model.TableInfo) Table
MockTableFromMeta only serves for test.
var TableFromMeta func(allocators autoid.Allocators, tblInfo *model.TableInfo) (Table, error)
TableFromMeta builds a table.Table from *model.TableInfo. Currently, it is assigned to tables.TableFromMeta in tidb package's init function.
var WithIgnoreAssertion = func(opt *CreateIdxOpt) { opt.IgnoreAssertion = true }
WithIgnoreAssertion uses to indicate the process can ignore assertion.
Functions ¶
func AllocAutoIncrementValue ¶
AllocAutoIncrementValue allocates an auto_increment value for a new row.
func AllocBatchAutoIncrementValue ¶
func AllocBatchAutoIncrementValue(ctx context.Context, t Table, sctx sessionctx.Context, N int) (firstID int64, increment int64, err error)
AllocBatchAutoIncrementValue allocates batch auto_increment value for rows, returning firstID, increment and err. The caller can derive the autoID by adding increment to firstID for N-1 times.
func CastValue ¶
func CastValue(ctx sessionctx.Context, val types.Datum, col *model.ColumnInfo, returnErr, forceIgnoreTruncate bool) (casted types.Datum, err error)
CastValue casts a value based on column type. If forceIgnoreTruncate is true, truncated errors will be ignored. If returnErr is true, directly return any conversion errors. It's safe now and it's the same as the behavior of select statement. Set it to true only in FillVirtualColumnValue and UnionScanExec.Next() If the handle of err is changed latter, the behavior of forceIgnoreTruncate also need to change. TODO: change the third arg to TypeField. Not pass ColumnInfo.
func CheckNotNull ¶
CheckNotNull checks if row has nil value set to a column with NotNull flag set.
func ColDescFieldNames ¶
ColDescFieldNames returns the fields name in result set for desc and show columns.
func EvalColDefaultExpr ¶
func EvalColDefaultExpr(ctx sessionctx.Context, col *model.ColumnInfo, defaultExpr ast.ExprNode) (types.Datum, error)
EvalColDefaultExpr eval default expr node to explicit default value.
func FillVirtualColumnValue ¶
func FillVirtualColumnValue(virtualRetTypes []*types.FieldType, virtualColumnIndex []int, expCols []*expression.Column, colInfos []*model.ColumnInfo, sctx sessionctx.Context, req *chunk.Chunk) error
FillVirtualColumnValue will calculate the virtual column value by evaluating generated expression using rows from a chunk, and then fill this value into the chunk.
func GetColDefaultValue ¶
func GetColDefaultValue(ctx sessionctx.Context, col *model.ColumnInfo) (types.Datum, error)
GetColDefaultValue gets default value of the column.
func GetColOriginDefaultValue ¶
func GetColOriginDefaultValue(ctx sessionctx.Context, col *model.ColumnInfo) (types.Datum, error)
GetColOriginDefaultValue gets default value of the column from original default value.
func GetZeroValue ¶
func GetZeroValue(col *model.ColumnInfo) types.Datum
GetZeroValue gets zero value for given column type.
func OptionalFsp ¶
OptionalFsp convert a FieldType.GetDecimal() to string.
Types ¶
type AddRecordOpt ¶
type AddRecordOpt struct { CreateIdxOpt IsUpdate bool ReserveAutoID int }
AddRecordOpt contains the options will be used when adding a record.
type AddRecordOption ¶
type AddRecordOption interface {
ApplyOn(*AddRecordOpt)
}
AddRecordOption is defined for the AddRecord() method of the Table interface.
var IsUpdate AddRecordOption = isUpdate{}
IsUpdate is a defined value for AddRecordOptFunc.
type CachedTable ¶
type CachedTable interface { Table Init(exec sqlexec.SQLExecutor) error // TryReadFromCache checks if the cache table is readable. TryReadFromCache(ts uint64, leaseDuration time.Duration) (kv.MemBuffer, bool) // UpdateLockForRead If you cannot meet the conditions of the read buffer, // you need to update the lock information and read the data from the original table UpdateLockForRead(ctx context.Context, store kv.Storage, ts uint64, leaseDuration time.Duration) // WriteLockAndKeepAlive first obtain the write lock, then it renew the lease to keep the lock alive. // 'exit' is a channel to tell the keep alive goroutine to exit. // The result is sent to the 'wg' channel. WriteLockAndKeepAlive(ctx context.Context, exit chan struct{}, leasePtr *uint64, wg chan error) }
CachedTable is a Table, and it has a UpdateLockForRead() method UpdateLockForRead() according to the reasons for not meeting the read conditions, update the lock information, And at the same time reload data from the original table.
type ColDesc ¶
type ColDesc struct { Field string Type string // Charset is nil if the column doesn't have a charset, or a string indicating the charset name. Charset interface{} // Collation is nil if the column doesn't have a collation, or a string indicating the collation name. Collation interface{} Null string Key string DefaultValue interface{} Extra string Privileges string Comment string }
ColDesc describes column information like MySQL desc and show columns do.
func NewColDesc ¶
NewColDesc returns a new ColDesc for a column.
type Column ¶
type Column struct { *model.ColumnInfo // If this column is a generated column, the expression will be stored here. GeneratedExpr ast.ExprNode // If this column has default expr value, this expression will be stored here. DefaultExpr ast.ExprNode }
Column provides meta data describing a table column.
func FindColLowerCase ¶
FindColLowerCase finds column in cols by name. It assumes the name is lowercase.
func FindCols ¶
FindCols finds columns in cols by names. If pkIsHandle is false and name is ExtraHandleName, the extra handle column will be added. If any columns don't match, return nil and the first missing column's name. Please consider FindColumns() first for a better performance.
func FindColumns ¶
func FindColumns(cols []*Column, names []string, pkIsHandle bool) (foundCols []*Column, missingOffset int)
FindColumns finds columns in cols by names with a better performance than FindCols(). It assumes names are lowercase.
func FindOnUpdateCols ¶
FindOnUpdateCols finds columns which have OnUpdateNow flag.
func ToColumn ¶
func ToColumn(col *model.ColumnInfo) *Column
ToColumn converts a *model.ColumnInfo to *Column.
func (*Column) CheckNotNull ¶
CheckNotNull checks if nil value set to a column with NotNull flag is set.
func (*Column) HandleBadNull ¶
HandleBadNull handles the bad null error. If BadNullAsWarning is true, it will append the error as a warning, else return the error.
func (*Column) IsCommonHandleColumn ¶
IsCommonHandleColumn checks if the column is common handle column.
func (*Column) IsPKHandleColumn ¶
IsPKHandleColumn checks if the column is primary key handle column.
func (*Column) ToInfo ¶
func (c *Column) ToInfo() *model.ColumnInfo
ToInfo casts Column to model.ColumnInfo NOTE: DONT modify return value.
type CreateIdxOpt ¶
type CreateIdxOpt struct { Ctx context.Context Untouched bool // If true, the index key/value is no need to commit. IgnoreAssertion bool FromBackFill bool }
CreateIdxOpt contains the options will be used when creating an index.
type CreateIdxOptFunc ¶
type CreateIdxOptFunc func(*CreateIdxOpt)
CreateIdxOptFunc is defined for the Create() method of Index interface. Here is a blog post about how to use this pattern: https://dave.cheney.net/2014/10/17/functional-options-for-friendly-apis
var IndexIsUntouched CreateIdxOptFunc = func(opt *CreateIdxOpt) { opt.Untouched = true }
IndexIsUntouched uses to indicate the index kv is untouched.
func WithCtx ¶
func WithCtx(ctx context.Context) CreateIdxOptFunc
WithCtx returns a CreateIdxFunc. This option is used to pass context.Context.
func (CreateIdxOptFunc) ApplyOn ¶
func (f CreateIdxOptFunc) ApplyOn(opt *AddRecordOpt)
ApplyOn implements the AddRecordOption interface, so any CreateIdxOptFunc can be passed as the optional argument to the table.AddRecord method.
type Index ¶
type Index interface { // Meta returns IndexInfo. Meta() *model.IndexInfo // TableMeta returns TableInfo TableMeta() *model.TableInfo // Create supports insert into statement. Create(ctx sessionctx.Context, txn kv.Transaction, indexedValues []types.Datum, h kv.Handle, handleRestoreData []types.Datum, opts ...CreateIdxOptFunc) (kv.Handle, error) // Delete supports delete from statement. Delete(sc *stmtctx.StatementContext, txn kv.Transaction, indexedValues []types.Datum, h kv.Handle) error // GenIndexKVIter generate index key and value for multi-valued index, use iterator to reduce the memory allocation. GenIndexKVIter(sc *stmtctx.StatementContext, indexedValue []types.Datum, h kv.Handle, handleRestoreData []types.Datum) IndexIter // Exist supports check index exists or not. Exist(sc *stmtctx.StatementContext, txn kv.Transaction, indexedValues []types.Datum, h kv.Handle) (bool, kv.Handle, error) // GenIndexKey generates an index key. If the index is a multi-valued index, use GenIndexKVIter instead. GenIndexKey(sc *stmtctx.StatementContext, indexedValues []types.Datum, h kv.Handle, buf []byte) (key []byte, distinct bool, err error) // GenIndexValue generates an index value. GenIndexValue(sc *stmtctx.StatementContext, distinct bool, indexedValues []types.Datum, h kv.Handle, restoredData []types.Datum) ([]byte, error) // FetchValues fetched index column values in a row. // Param columns is a reused buffer, if it is not nil, FetchValues will fill the index values in it, // and return the buffer, if it is nil, FetchValues will allocate the buffer instead. FetchValues(row []types.Datum, columns []types.Datum) ([]types.Datum, error) }
Index is the interface for index data on KV store.
type IndexIterator ¶
IndexIterator is the interface for iterator of index data on KV store.
type PartitionedTable ¶
type PartitionedTable interface { Table GetPartition(physicalID int64) PhysicalTable GetPartitionByRow(sessionctx.Context, []types.Datum) (PhysicalTable, error) GetAllPartitionIDs() []int64 GetPartitionColumnNames() []model.CIStr CheckForExchangePartition(ctx sessionctx.Context, pi *model.PartitionInfo, r []types.Datum, pid int64) error }
PartitionedTable is a Table, and it has a GetPartition() method. GetPartition() gets the partition from a partition table by a physical table ID,
type PhysicalTable ¶
PhysicalTable is an abstraction for two kinds of table representation: partition or non-partitioned table. PhysicalID is a ID that can be used to construct a key ranges, all the data in the key range belongs to the corresponding PhysicalTable. For a non-partitioned table, its PhysicalID equals to its TableID; For a partition of a partitioned table, its PhysicalID is the partition's ID.
type RecordIterFunc ¶
RecordIterFunc is used for low-level record iteration.
type Table ¶
type Table interface { // Indices returns the indices of the table. // The caller must be aware of that not all the returned indices are public. Indices() []Index // RecordPrefix returns the record key prefix. RecordPrefix() kv.Key // IndexPrefix returns the index key prefix. IndexPrefix() kv.Key // AddRecord inserts a row which should contain only public columns AddRecord(ctx sessionctx.Context, r []types.Datum, opts ...AddRecordOption) (recordID kv.Handle, err error) // UpdateRecord updates a row which should contain only writable columns. UpdateRecord(ctx context.Context, sctx sessionctx.Context, h kv.Handle, currData, newData []types.Datum, touched []bool) error // RemoveRecord removes a row in the table. RemoveRecord(ctx sessionctx.Context, h kv.Handle, r []types.Datum) error // Allocators returns all allocators. Allocators(ctx sessionctx.Context) autoid.Allocators // Meta returns TableInfo. Meta() *model.TableInfo // Type returns the type of table Type() Type // contains filtered or unexported methods }
Table is used to retrieve and modify rows in table.
type Type ¶
type Type int16
Type is used to distinguish between different tables that store data in different ways.
func (Type) IsClusterTable ¶
IsClusterTable checks whether the table is a cluster table type.
func (Type) IsNormalTable ¶
IsNormalTable checks whether the table is a normal table type.
func (Type) IsVirtualTable ¶
IsVirtualTable checks whether the table is a virtual table type.
type WithReserveAutoIDHint ¶
type WithReserveAutoIDHint int
WithReserveAutoIDHint tells the AddRecord operation to reserve a batch of auto ID in the stmtctx.
func (WithReserveAutoIDHint) ApplyOn ¶
func (n WithReserveAutoIDHint) ApplyOn(opt *AddRecordOpt)
ApplyOn implements the AddRecordOption interface.