tidb: github.com/pingcap/tidb/infoschema Index | Files | Directories

package infoschema

import "github.com/pingcap/tidb/infoschema"


Package Files

builder.go infoschema.go slow_log.go tables.go


const (
    Name      = util.InformationSchemaName
    LowerName = util.InformationSchemaLowerName

Information Schema Name.


var (
    // ErrDatabaseDropExists returns for dropping a non-existent database.
    ErrDatabaseDropExists = terror.ClassSchema.New(codeDBDropExists, "Can't drop database '%s'; database doesn't exist")
    // ErrDatabaseNotExists returns for database not exists.
    ErrDatabaseNotExists = terror.ClassSchema.New(codeDatabaseNotExists, "Unknown database '%s'")
    // ErrTableNotExists returns for table not exists.
    ErrTableNotExists = terror.ClassSchema.New(codeTableNotExists, "Table '%s.%s' doesn't exist")
    // ErrColumnNotExists returns for column not exists.
    ErrColumnNotExists = terror.ClassSchema.New(codeColumnNotExists, "Unknown column '%s' in '%s'")
    // ErrForeignKeyNotMatch returns for foreign key not match.
    ErrForeignKeyNotMatch = terror.ClassSchema.New(codeWrongFkDef, "Incorrect foreign key definition for '%s': Key reference and table reference don't match")
    // ErrCannotAddForeign returns for foreign key exists.
    ErrCannotAddForeign = terror.ClassSchema.New(codeCannotAddForeign, "Cannot add foreign key constraint")
    // ErrForeignKeyNotExists returns for foreign key not exists.
    ErrForeignKeyNotExists = terror.ClassSchema.New(codeForeignKeyNotExists, "Can't DROP '%s'; check that column/key exists")
    // ErrDatabaseExists returns for database already exists.
    ErrDatabaseExists = terror.ClassSchema.New(codeDatabaseExists, "Can't create database '%s'; database exists")
    // ErrTableExists returns for table already exists.
    ErrTableExists = terror.ClassSchema.New(codeTableExists, "Table '%s' already exists")
    // ErrTableDropExists returns for dropping a non-existent table.
    ErrTableDropExists = terror.ClassSchema.New(codeBadTable, "Unknown table '%s'")
    // ErrUserDropExists returns for dropping a non-existent user.
    ErrUserDropExists = terror.ClassSchema.New(codeBadUser, "User %s does not exist.")
    // ErrColumnExists returns for column already exists.
    ErrColumnExists = terror.ClassSchema.New(codeColumnExists, "Duplicate column name '%s'")
    // ErrIndexExists returns for index already exists.
    ErrIndexExists = terror.ClassSchema.New(codeIndexExists, "Duplicate Index")
    // ErrKeyNameDuplicate returns for index duplicate when rename index.
    ErrKeyNameDuplicate = terror.ClassSchema.New(codeKeyNameDuplicate, "Duplicate key name '%s'")
    // ErrKeyNotExists returns for index not exists.
    ErrKeyNotExists = terror.ClassSchema.New(codeKeyNotExists, "Key '%s' doesn't exist in table '%s'")
    // ErrMultiplePriKey returns for multiple primary keys.
    ErrMultiplePriKey = terror.ClassSchema.New(codeMultiplePriKey, "Multiple primary key defined")
    // ErrTooManyKeyParts returns for too many key parts.
    ErrTooManyKeyParts = terror.ClassSchema.New(codeTooManyKeyParts, "Too many key parts specified; max %d parts allowed")
    // ErrTableNotLockedForWrite returns for write tables when only hold the table read lock.
    ErrTableNotLockedForWrite = terror.ClassSchema.New(codeErrTableNotLockedForWrite, mysql.MySQLErrName[mysql.ErrTableNotLockedForWrite])
    // ErrTableNotLocked returns when session has explicitly lock tables, then visit unlocked table will return this error.
    ErrTableNotLocked = terror.ClassSchema.New(codeErrTableNotLocked, mysql.MySQLErrName[mysql.ErrTableNotLocked])
    // ErrNonuniqTable returns when none unique tables errors.
    ErrNonuniqTable = terror.ClassSchema.New(codeErrTableNotLocked, mysql.MySQLErrName[mysql.ErrNonuniqTable])
    // ErrTableLocked returns when the table was locked by other session.
    ErrTableLocked = terror.ClassSchema.New(codeTableLocked, mysql.MySQLErrName[mysql.ErrTableLocked])
    // ErrAccessDenied return when the user doesn't have the permission to access the table.
    ErrAccessDenied = terror.ClassSchema.New(codeErrAccessDenied, mysql.MySQLErrName[mysql.ErrAccessDenied])
var TableStatsCacheExpiry = 3 * time.Second

TableStatsCacheExpiry is the expiry time for table stats cache.

func ConvertCharsetCollateToLowerCaseIfNeed Uses

func ConvertCharsetCollateToLowerCaseIfNeed(tbInfo *model.TableInfo)

ConvertCharsetCollateToLowerCaseIfNeed convert the charset / collation of table and its columns to lower case, if the table's version is prior to TableInfoVersion3.

func ConvertOldVersionUTF8ToUTF8MB4IfNeed Uses

func ConvertOldVersionUTF8ToUTF8MB4IfNeed(tbInfo *model.TableInfo)

ConvertOldVersionUTF8ToUTF8MB4IfNeed convert old version UTF8 to UTF8MB4 if config.TreatOldVersionUTF8AsUTF8MB4 is enable.

func DataForAnalyzeStatus Uses

func DataForAnalyzeStatus() (rows [][]types.Datum)

DataForAnalyzeStatus gets all the analyze jobs.

func HasAutoIncrementColumn Uses

func HasAutoIncrementColumn(tbInfo *model.TableInfo) (bool, string)

HasAutoIncrementColumn checks whether the table has auto_increment columns, if so, return true and the column name.

func IsMemoryDB Uses

func IsMemoryDB(dbName string) bool

IsMemoryDB checks if the db is in memory.

func ParseSlowLog Uses

func ParseSlowLog(tz *time.Location, reader *bufio.Reader) ([][]types.Datum, error)

ParseSlowLog exports for testing. TODO: optimize for parse huge log-file.

func ParseTime Uses

func ParseTime(s string) (time.Time, error)

ParseTime exports for testing.

func RegisterVirtualTable Uses

func RegisterVirtualTable(dbInfo *model.DBInfo, tableFromMeta tableFromMetaFunc)

RegisterVirtualTable register virtual tables to the builder.

type Builder Uses

type Builder struct {
    // contains filtered or unexported fields

Builder builds a new InfoSchema.

func NewBuilder Uses

func NewBuilder(handle *Handle) *Builder

NewBuilder creates a new Builder with a Handle.

func (*Builder) ApplyDiff Uses

func (b *Builder) ApplyDiff(m *meta.Meta, diff *model.SchemaDiff) ([]int64, error)

ApplyDiff applies SchemaDiff to the new InfoSchema. Return the detail updated table IDs that are produced from SchemaDiff and an error.

func (*Builder) Build Uses

func (b *Builder) Build()

Build sets new InfoSchema to the handle in the Builder.

func (*Builder) InitWithDBInfos Uses

func (b *Builder) InitWithDBInfos(dbInfos []*model.DBInfo, schemaVersion int64) (*Builder, error)

InitWithDBInfos initializes an empty new InfoSchema with a slice of DBInfo and schema version.

func (*Builder) InitWithOldInfoSchema Uses

func (b *Builder) InitWithOldInfoSchema() *Builder

InitWithOldInfoSchema initializes an empty new InfoSchema by copies all the data from old InfoSchema.

type Handle Uses

type Handle struct {
    // contains filtered or unexported fields

Handle handles information schema, including getting and setting.

func NewHandle Uses

func NewHandle(store kv.Storage) *Handle

NewHandle creates a new Handle.

func (*Handle) EmptyClone Uses

func (h *Handle) EmptyClone() *Handle

EmptyClone creates a new Handle with the same store and memSchema, but the value is not set.

func (*Handle) Get Uses

func (h *Handle) Get() InfoSchema

Get gets information schema from Handle.

func (*Handle) IsValid Uses

func (h *Handle) IsValid() bool

IsValid uses to check whether handle value is valid.

type InfoSchema Uses

type InfoSchema interface {
    SchemaByName(schema model.CIStr) (*model.DBInfo, bool)
    SchemaExists(schema model.CIStr) bool
    TableByName(schema, table model.CIStr) (table.Table, error)
    TableExists(schema, table model.CIStr) bool
    SchemaByID(id int64) (*model.DBInfo, bool)
    SchemaByTable(tableInfo *model.TableInfo) (*model.DBInfo, bool)
    TableByID(id int64) (table.Table, bool)
    AllocByID(id int64) (autoid.Allocator, bool)
    AllSchemaNames() []string
    AllSchemas() []*model.DBInfo
    Clone() (result []*model.DBInfo)
    SchemaTables(schema model.CIStr) []table.Table
    SchemaMetaVersion() int64
    // TableIsView indicates whether the schema.table is a view.
    TableIsView(schema, table model.CIStr) bool

InfoSchema is the interface used to retrieve the schema information. It works as a in memory cache and doesn't handle any schema change. InfoSchema is read-only, and the returned value is a copy. TODO: add more methods to retrieve tables and columns.

func MockInfoSchema Uses

func MockInfoSchema(tbList []*model.TableInfo) InfoSchema

MockInfoSchema only serves for test.

type VirtualTable Uses

type VirtualTable struct{}

VirtualTable is a dummy table.Table implementation.

func (*VirtualTable) AddRecord Uses

func (vt *VirtualTable) AddRecord(ctx sessionctx.Context, r []types.Datum, opts ...table.AddRecordOption) (recordID int64, err error)

AddRecord implements table.Table AddRecord interface.

func (*VirtualTable) AllocHandle Uses

func (vt *VirtualTable) AllocHandle(ctx sessionctx.Context) (int64, error)

AllocHandle implements table.Table AllocHandle interface.

func (*VirtualTable) Allocator Uses

func (vt *VirtualTable) Allocator(ctx sessionctx.Context) autoid.Allocator

Allocator implements table.Table Allocator interface.

func (*VirtualTable) Cols Uses

func (vt *VirtualTable) Cols() []*table.Column

Cols implements table.Table Cols interface.

func (*VirtualTable) DeletableIndices Uses

func (vt *VirtualTable) DeletableIndices() []table.Index

DeletableIndices implements table.Table DeletableIndices interface.

func (*VirtualTable) FirstKey Uses

func (vt *VirtualTable) FirstKey() kv.Key

FirstKey implements table.Table FirstKey interface.

func (*VirtualTable) GetPhysicalID Uses

func (vt *VirtualTable) GetPhysicalID() int64

GetPhysicalID implements table.Table GetPhysicalID interface.

func (*VirtualTable) IndexPrefix Uses

func (vt *VirtualTable) IndexPrefix() kv.Key

IndexPrefix implements table.Table IndexPrefix interface.

func (*VirtualTable) Indices Uses

func (vt *VirtualTable) Indices() []table.Index

Indices implements table.Table Indices interface.

func (*VirtualTable) IterRecords Uses

func (vt *VirtualTable) IterRecords(ctx sessionctx.Context, startKey kv.Key, cols []*table.Column,
    fn table.RecordIterFunc) error

IterRecords implements table.Table IterRecords interface.

func (*VirtualTable) Meta Uses

func (vt *VirtualTable) Meta() *model.TableInfo

Meta implements table.Table Meta interface.

func (*VirtualTable) RebaseAutoID Uses

func (vt *VirtualTable) RebaseAutoID(ctx sessionctx.Context, newBase int64, isSetStep bool) error

RebaseAutoID implements table.Table RebaseAutoID interface.

func (*VirtualTable) RecordKey Uses

func (vt *VirtualTable) RecordKey(h int64) kv.Key

RecordKey implements table.Table RecordKey interface.

func (*VirtualTable) RecordPrefix Uses

func (vt *VirtualTable) RecordPrefix() kv.Key

RecordPrefix implements table.Table RecordPrefix interface.

func (*VirtualTable) RemoveRecord Uses

func (vt *VirtualTable) RemoveRecord(ctx sessionctx.Context, h int64, r []types.Datum) error

RemoveRecord implements table.Table RemoveRecord interface.

func (*VirtualTable) Row Uses

func (vt *VirtualTable) Row(ctx sessionctx.Context, h int64) ([]types.Datum, error)

Row implements table.Table Row interface.

func (*VirtualTable) RowWithCols Uses

func (vt *VirtualTable) RowWithCols(ctx sessionctx.Context, h int64, cols []*table.Column) ([]types.Datum, error)

RowWithCols implements table.Table RowWithCols interface.

func (*VirtualTable) Seek Uses

func (vt *VirtualTable) Seek(ctx sessionctx.Context, h int64) (int64, bool, error)

Seek implements table.Table Seek interface.

func (*VirtualTable) Type Uses

func (vt *VirtualTable) Type() table.Type

Type implements table.Table Type interface.

func (*VirtualTable) UpdateRecord Uses

func (vt *VirtualTable) UpdateRecord(ctx sessionctx.Context, h int64, oldData, newData []types.Datum, touched []bool) error

UpdateRecord implements table.Table UpdateRecord interface.

func (*VirtualTable) WritableCols Uses

func (vt *VirtualTable) WritableCols() []*table.Column

WritableCols implements table.Table WritableCols interface.

func (*VirtualTable) WritableIndices Uses

func (vt *VirtualTable) WritableIndices() []table.Index

WritableIndices implements table.Table WritableIndices interface.



Package infoschema imports 46 packages (graph) and is imported by 292 packages. Updated 2019-11-07. Refresh now. Tools for package owners.