Documentation ¶
Index ¶
- Constants
- Variables
- type ActionType
- type CIStr
- type ColumnInfo
- type DBInfo
- type FKInfo
- type HistoryInfo
- type IndexColumn
- type IndexInfo
- type IndexType
- type Job
- func (job *Job) Decode(b []byte) error
- func (job *Job) DecodeArgs(args ...interface{}) error
- func (job *Job) Encode(updateRawArgs bool) ([]byte, error)
- func (job *Job) FinishDBJob(jobState JobState, schemaState SchemaState, ver int64, dbInfo *DBInfo)
- func (job *Job) FinishTableJob(jobState JobState, schemaState SchemaState, ver int64, tblInfo *TableInfo)
- func (job *Job) GetRowCount() int64
- func (job *Job) IsCancelled() bool
- func (job *Job) IsCancelling() bool
- func (job *Job) IsDependentOn(other *Job) (bool, error)
- func (job *Job) IsDone() bool
- func (job *Job) IsFinished() bool
- func (job *Job) IsRollbackDone() bool
- func (job *Job) IsRollingback() bool
- func (job *Job) IsRunning() bool
- func (job *Job) IsSynced() bool
- func (job *Job) SetRowCount(count int64)
- func (job *Job) String() string
- type JobState
- type PartitionDefinition
- type PartitionInfo
- type PartitionType
- type SchemaDiff
- type SchemaState
- type TableInfo
- func (t *TableInfo) Clone() *TableInfo
- func (t *TableInfo) Cols() []*ColumnInfo
- func (t *TableInfo) ColumnIsInIndex(c *ColumnInfo) bool
- func (t *TableInfo) GetDBID(dbID int64) int64
- func (t *TableInfo) GetPkColInfo() *ColumnInfo
- func (t *TableInfo) GetPkName() CIStr
- func (t *TableInfo) GetUpdateTime() time.Time
Constants ¶
const ExtraHandleID = -1
ExtraHandleID is the column ID of column which we need to append to schema to occupy the handle's position for use of execution phase.
Variables ¶
var ExtraHandleName = NewCIStr("_tidb_rowid")
ExtraHandleName is the name of ExtraHandle Column.
Functions ¶
This section is empty.
Types ¶
type ActionType ¶
type ActionType byte
ActionType is the type for DDL action.
const ( ActionNone ActionType = 0 ActionCreateSchema ActionType = 1 ActionDropSchema ActionType = 2 ActionCreateTable ActionType = 3 ActionDropTable ActionType = 4 ActionAddColumn ActionType = 5 ActionDropColumn ActionType = 6 ActionAddIndex ActionType = 7 ActionDropIndex ActionType = 8 ActionAddForeignKey ActionType = 9 ActionDropForeignKey ActionType = 10 ActionTruncateTable ActionType = 11 ActionModifyColumn ActionType = 12 ActionRebaseAutoID ActionType = 13 ActionRenameTable ActionType = 14 ActionSetDefaultValue ActionType = 15 ActionShardRowID ActionType = 16 ActionModifyTableComment ActionType = 17 )
List DDL actions.
func (ActionType) String ¶
func (action ActionType) String() string
String return current ddl action in string
type CIStr ¶
type CIStr struct { O string `json:"O"` // Original string. L string `json:"L"` // Lower case string. }
CIStr is case insensitive string.
type ColumnInfo ¶
type ColumnInfo struct { ID int64 `json:"id"` Name CIStr `json:"name"` Offset int `json:"offset"` OriginDefaultValue interface{} `json:"origin_default"` DefaultValue interface{} `json:"default"` GeneratedExprString string `json:"generated_expr_string"` GeneratedStored bool `json:"generated_stored"` Dependences map[string]struct{} `json:"dependences"` types.FieldType `json:"type"` State SchemaState `json:"state"` Comment string `json:"comment"` }
ColumnInfo provides meta data describing of a table column.
func FindColumnInfo ¶
func FindColumnInfo(cols []*ColumnInfo, name string) *ColumnInfo
FindColumnInfo finds ColumnInfo in cols by name.
func NewExtraHandleColInfo ¶ added in v1.0.7
func NewExtraHandleColInfo() *ColumnInfo
NewExtraHandleColInfo mocks a column info for extra handle column.
func (*ColumnInfo) IsGenerated ¶
func (c *ColumnInfo) IsGenerated() bool
IsGenerated returns true if the column is generated column.
type DBInfo ¶
type DBInfo struct { ID int64 `json:"id"` // Database ID Name CIStr `json:"db_name"` // DB name. Charset string `json:"charset"` Collate string `json:"collate"` Tables []*TableInfo `json:"-"` // Tables in the DB. State SchemaState `json:"state"` }
DBInfo provides meta data describing a DB.
type FKInfo ¶
type FKInfo struct { ID int64 `json:"id"` Name CIStr `json:"fk_name"` RefTable CIStr `json:"ref_table"` RefCols []CIStr `json:"ref_cols"` Cols []CIStr `json:"cols"` OnDelete int `json:"on_delete"` OnUpdate int `json:"on_update"` State SchemaState `json:"state"` }
FKInfo provides meta data describing a foreign key constraint.
type HistoryInfo ¶
type HistoryInfo struct { SchemaVersion int64 DBInfo *DBInfo TableInfo *TableInfo FinishedTS uint64 }
HistoryInfo is used for binlog.
func (*HistoryInfo) AddDBInfo ¶
func (h *HistoryInfo) AddDBInfo(schemaVer int64, dbInfo *DBInfo)
AddDBInfo adds schema version and schema information that are used for binlog. dbInfo is added in the following operations: create database, drop database.
func (*HistoryInfo) AddTableInfo ¶
func (h *HistoryInfo) AddTableInfo(schemaVer int64, tblInfo *TableInfo)
AddTableInfo adds schema version and table information that are used for binlog. tblInfo is added except for the following operations: create database, drop database.
type IndexColumn ¶
type IndexColumn struct { Name CIStr `json:"name"` // Index name Offset int `json:"offset"` // Index offset // Length of prefix when using column prefix // for indexing; // UnspecifedLength if not using prefix indexing Length int `json:"length"` }
IndexColumn provides index column info.
type IndexInfo ¶
type IndexInfo struct { ID int64 `json:"id"` Name CIStr `json:"idx_name"` // Index name. Table CIStr `json:"tbl_name"` // Table name. Columns []*IndexColumn `json:"idx_cols"` // Index columns. Unique bool `json:"is_unique"` // Whether the index is unique. Primary bool `json:"is_primary"` // Whether the index is primary key. State SchemaState `json:"state"` Comment string `json:"comment"` // Comment Tp IndexType `json:"index_type"` // Index type: Btree or Hash }
IndexInfo provides meta data describing a DB index. It corresponds to the statement `CREATE INDEX Name ON Table (Column);` See https://dev.mysql.com/doc/refman/5.7/en/create-index.html
func (*IndexInfo) HasPrefixIndex ¶
HasPrefixIndex returns whether any columns of this index uses prefix length.
type Job ¶
type Job struct { ID int64 `json:"id"` Type ActionType `json:"type"` SchemaID int64 `json:"schema_id"` TableID int64 `json:"table_id"` State JobState `json:"state"` Error *terror.Error `json:"err"` // ErrorCount will be increased, every time we meet an error when running job. ErrorCount int64 `json:"err_count"` // RowCount means the number of rows that are processed. RowCount int64 `json:"row_count"` Mu sync.Mutex `json:"-"` Args []interface{} `json:"-"` // RawArgs : We must use json raw message to delay parsing special args. RawArgs json.RawMessage `json:"raw_args"` SchemaState SchemaState `json:"schema_state"` // SnapshotVer means snapshot version for this job. SnapshotVer uint64 `json:"snapshot_ver"` // StartTS uses timestamp allocated by TSO. // Now it's the TS when we put the job to TiKV queue. StartTS uint64 `json:"start_ts"` // DependencyID is the job's ID that the current job depends on. DependencyID int64 `json:"dependency_id"` // Query string of the ddl job. Query string `json:"query"` BinlogInfo *HistoryInfo `json:"binlog"` // Version indicates the DDL job version. For old jobs, it will be 0. Version int64 `json:"version"` }
Job is for a DDL operation.
func (*Job) Decode ¶
Decode decodes job from the json buffer, we must use DecodeArgs later to decode special args for this job.
func (*Job) DecodeArgs ¶
DecodeArgs decodes job args.
func (*Job) Encode ¶
Encode encodes job with json format. updateRawArgs is used to determine whether to update the raw args.
func (*Job) FinishDBJob ¶
func (job *Job) FinishDBJob(jobState JobState, schemaState SchemaState, ver int64, dbInfo *DBInfo)
FinishDBJob is called when a job is finished. It updates the job's state information and adds dbInfo the binlog.
func (*Job) FinishTableJob ¶
func (job *Job) FinishTableJob(jobState JobState, schemaState SchemaState, ver int64, tblInfo *TableInfo)
FinishTableJob is called when a job is finished. It updates the job's state information and adds tblInfo to the binlog.
func (*Job) GetRowCount ¶
GetRowCount gets the number of rows. Make sure it can pass `make race`.
func (*Job) IsCancelled ¶
IsCancelled returns whether the job is cancelled or not.
func (*Job) IsCancelling ¶ added in v1.0.1
IsCancelling returns whether the job is cancelling or not.
func (*Job) IsDependentOn ¶
IsDependentOn returns whether the job depends on "other". How to check the job depends on "other"? 1. The two jobs handle the same database when one of the two jobs is an ActionDropSchema or ActionCreateSchema type. 2. Or the two jobs handle the same table.
func (*Job) IsFinished ¶
IsFinished returns whether job is finished or not. If the job state is Done or Cancelled, it is finished.
func (*Job) IsRollbackDone ¶
IsRollbackDone returns whether the job is rolled back or not.
func (*Job) IsRollingback ¶ added in v1.0.1
IsRollingback returns whether the job is rolling back or not.
func (*Job) IsSynced ¶
IsSynced returns whether the DDL modification is synced among all TiDB servers.
func (*Job) SetRowCount ¶
SetRowCount sets the number of rows. Make sure it can pass `make race`.
type JobState ¶
type JobState byte
JobState is for job state.
const ( JobStateNone JobState = 0 JobStateRunning JobState = 1 // When DDL encountered an unrecoverable error at reorganization state, // some keys has been added already, we need to remove them. // JobStateRollingback is the state to do the rolling back job. JobStateRollingback JobState = 2 JobStateRollbackDone JobState = 3 JobStateDone JobState = 4 JobStateCancelled JobState = 5 // JobStateSynced is used to mark the information about the completion of this job // has been synchronized to all servers. JobStateSynced JobState = 6 // JobStateCancelling is used to mark the DDL job is cancelled by the client, but the DDL work hasn't handle it. JobStateCancelling JobState = 7 )
List job states.
type PartitionDefinition ¶
type PartitionDefinition struct { ID int64 Name string LessThan []string Comment string `json:"omit_empty"` MaxValue bool }
PartitionDefinition defines a single partition.
type PartitionInfo ¶
type PartitionInfo struct { Type PartitionType Expr string Columns []CIStr Definitions []PartitionDefinition }
PartitionInfo provides table partition info.
type PartitionType ¶
type PartitionType int
PartitionType is the type for PartitionInfo
const ( PartitionTypeRange PartitionType = 1 PartitionTypeHash PartitionType = 2 PartitionTypeList PartitionType = 3 )
Partition types.
func (PartitionType) String ¶
func (p PartitionType) String() string
type SchemaDiff ¶
type SchemaDiff struct { Version int64 `json:"version"` Type ActionType `json:"type"` SchemaID int64 `json:"schema_id"` TableID int64 `json:"table_id"` // OldTableID is the table ID before truncate, only used by truncate table DDL. OldTableID int64 `json:"old_table_id"` // OldSchemaID is the schema ID before rename table, only used by rename table DDL. OldSchemaID int64 `json:"old_schema_id"` }
SchemaDiff contains the schema modification at a particular schema version. It is used to reduce schema reload cost.
type SchemaState ¶
type SchemaState byte
SchemaState is the state for schema elements.
const ( // StateNone means this schema element is absent and can't be used. StateNone SchemaState = iota // StateDeleteOnly means we can only delete items for this schema element. StateDeleteOnly // StateWriteOnly means we can use any write operation on this schema element, // but outer can't read the changed data. StateWriteOnly // StateWriteReorganization means we are re-organizating whole data after write only state. StateWriteReorganization // StateDeleteReorganization means we are re-organizating whole data after delete only state. StateDeleteReorganization // StatePublic means this schema element is ok for all write and read operations. StatePublic )
func (SchemaState) String ¶
func (s SchemaState) String() string
String implements fmt.Stringer interface.
type TableInfo ¶
type TableInfo struct { ID int64 `json:"id"` Name CIStr `json:"name"` Charset string `json:"charset"` Collate string `json:"collate"` // Columns are listed in the order in which they appear in the schema. Columns []*ColumnInfo `json:"cols"` Indices []*IndexInfo `json:"index_info"` ForeignKeys []*FKInfo `json:"fk_info"` State SchemaState `json:"state"` PKIsHandle bool `json:"pk_is_handle"` Comment string `json:"comment"` AutoIncID int64 `json:"auto_inc_id"` MaxColumnID int64 `json:"max_col_id"` MaxIndexID int64 `json:"max_idx_id"` // UpdateTS is used to record the timestamp of updating the table's schema information. // These changing schema operations don't include 'truncate table' and 'rename table'. UpdateTS uint64 `json:"update_timestamp"` // OldSchemaID : // Because auto increment ID has schemaID as prefix, // We need to save original schemaID to keep autoID unchanged // while renaming a table from one database to another. // TODO: Remove it. // Now it only uses for compatibility with the old version that already uses this field. OldSchemaID int64 `json:"old_schema_id,omitempty"` // ShardRowIDBits specify if the implicit row ID is sharded. ShardRowIDBits uint64 Partition *PartitionInfo }
TableInfo provides meta data describing a DB table.
func (*TableInfo) Cols ¶ added in v1.0.8
func (t *TableInfo) Cols() []*ColumnInfo
Cols returns the columns of the table in public state.
func (*TableInfo) ColumnIsInIndex ¶
func (t *TableInfo) ColumnIsInIndex(c *ColumnInfo) bool
ColumnIsInIndex checks whether c is included in any indices of t.
func (*TableInfo) GetDBID ¶ added in v1.0.4
GetDBID returns the schema ID that is used to create an allocator. TODO: Remove it after removing OldSchemaID.
func (*TableInfo) GetPkColInfo ¶
func (t *TableInfo) GetPkColInfo() *ColumnInfo
GetPkColInfo gets the ColumnInfo of pk if exists. Make sure PkIsHandle checked before call this method.
func (*TableInfo) GetUpdateTime ¶
GetUpdateTime gets the table's updating time.