You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							261 lines
						
					
					
						
							7.2 KiB
						
					
					
				
			
		
		
	
	
							261 lines
						
					
					
						
							7.2 KiB
						
					
					
				| // Copyright 2015 PingCAP, Inc.
 | |
| //
 | |
| // Licensed under the Apache License, Version 2.0 (the "License");
 | |
| // you may not use this file except in compliance with the License.
 | |
| // You may obtain a copy of the License at
 | |
| //
 | |
| //     http://www.apache.org/licenses/LICENSE-2.0
 | |
| //
 | |
| // Unless required by applicable law or agreed to in writing, software
 | |
| // distributed under the License is distributed on an "AS IS" BASIS,
 | |
| // See the License for the specific language governing permissions and
 | |
| // limitations under the License.
 | |
| 
 | |
| package mysql
 | |
| 
 | |
| // Version informations.
 | |
| const (
 | |
| 	MinProtocolVersion byte   = 10
 | |
| 	MaxPayloadLen      int    = 1<<24 - 1
 | |
| 	ServerVersion      string = "5.5.31-TiDB-1.0"
 | |
| )
 | |
| 
 | |
| // Header informations.
 | |
| const (
 | |
| 	OKHeader          byte = 0x00
 | |
| 	ErrHeader         byte = 0xff
 | |
| 	EOFHeader         byte = 0xfe
 | |
| 	LocalInFileHeader byte = 0xfb
 | |
| )
 | |
| 
 | |
| // Server informations.
 | |
| const (
 | |
| 	ServerStatusInTrans            uint16 = 0x0001
 | |
| 	ServerStatusAutocommit         uint16 = 0x0002
 | |
| 	ServerMoreResultsExists        uint16 = 0x0008
 | |
| 	ServerStatusNoGoodIndexUsed    uint16 = 0x0010
 | |
| 	ServerStatusNoIndexUsed        uint16 = 0x0020
 | |
| 	ServerStatusCursorExists       uint16 = 0x0040
 | |
| 	ServerStatusLastRowSend        uint16 = 0x0080
 | |
| 	ServerStatusDBDropped          uint16 = 0x0100
 | |
| 	ServerStatusNoBackslashEscaped uint16 = 0x0200
 | |
| 	ServerStatusMetadataChanged    uint16 = 0x0400
 | |
| 	ServerStatusWasSlow            uint16 = 0x0800
 | |
| 	ServerPSOutParams              uint16 = 0x1000
 | |
| )
 | |
| 
 | |
| // Command informations.
 | |
| const (
 | |
| 	ComSleep byte = iota
 | |
| 	ComQuit
 | |
| 	ComInitDB
 | |
| 	ComQuery
 | |
| 	ComFieldList
 | |
| 	ComCreateDB
 | |
| 	ComDropDB
 | |
| 	ComRefresh
 | |
| 	ComShutdown
 | |
| 	ComStatistics
 | |
| 	ComProcessInfo
 | |
| 	ComConnect
 | |
| 	ComProcessKill
 | |
| 	ComDebug
 | |
| 	ComPing
 | |
| 	ComTime
 | |
| 	ComDelayedInsert
 | |
| 	ComChangeUser
 | |
| 	ComBinlogDump
 | |
| 	ComTableDump
 | |
| 	ComConnectOut
 | |
| 	ComRegisterSlave
 | |
| 	ComStmtPrepare
 | |
| 	ComStmtExecute
 | |
| 	ComStmtSendLongData
 | |
| 	ComStmtClose
 | |
| 	ComStmtReset
 | |
| 	ComSetOption
 | |
| 	ComStmtFetch
 | |
| 	ComDaemon
 | |
| 	ComBinlogDumpGtid
 | |
| 	ComResetConnection
 | |
| )
 | |
| 
 | |
| // Client informations.
 | |
| const (
 | |
| 	ClientLongPassword uint32 = 1 << iota
 | |
| 	ClientFoundRows
 | |
| 	ClientLongFlag
 | |
| 	ClientConnectWithDB
 | |
| 	ClientNoSchema
 | |
| 	ClientCompress
 | |
| 	ClientODBC
 | |
| 	ClientLocalFiles
 | |
| 	ClientIgnoreSpace
 | |
| 	ClientProtocol41
 | |
| 	ClientInteractive
 | |
| 	ClientSSL
 | |
| 	ClientIgnoreSigpipe
 | |
| 	ClientTransactions
 | |
| 	ClientReserved
 | |
| 	ClientSecureConnection
 | |
| 	ClientMultiStatements
 | |
| 	ClientMultiResults
 | |
| 	ClientPSMultiResults
 | |
| 	ClientPluginAuth
 | |
| 	ClientConnectAtts
 | |
| 	ClientPluginAuthLenencClientData
 | |
| )
 | |
| 
 | |
| // Cache type informations.
 | |
| const (
 | |
| 	TypeNoCache byte = 0xff
 | |
| )
 | |
| 
 | |
| // Auth name informations.
 | |
| const (
 | |
| 	AuthName = "mysql_native_password"
 | |
| )
 | |
| 
 | |
| // MySQL database and tables.
 | |
| const (
 | |
| 	// SystemDB is the name of system database.
 | |
| 	SystemDB = "mysql"
 | |
| 	// UserTable is the table in system db contains user info.
 | |
| 	UserTable = "User"
 | |
| 	// DBTable is the table in system db contains db scope privilege info.
 | |
| 	DBTable = "DB"
 | |
| 	// TablePrivTable is the table in system db contains table scope privilege info.
 | |
| 	TablePrivTable = "Tables_priv"
 | |
| 	// ColumnPrivTable is the table in system db contains column scope privilege info.
 | |
| 	ColumnPrivTable = "Columns_priv"
 | |
| 	// GlobalVariablesTable is the table contains global system variables.
 | |
| 	GlobalVariablesTable = "GLOBAL_VARIABLES"
 | |
| 	// GlobalStatusTable is the table contains global status variables.
 | |
| 	GlobalStatusTable = "GLOBAL_STATUS"
 | |
| 	// TiDBTable is the table contains tidb info.
 | |
| 	TiDBTable = "tidb"
 | |
| )
 | |
| 
 | |
| // PrivilegeType  privilege
 | |
| type PrivilegeType uint32
 | |
| 
 | |
| const (
 | |
| 	_ PrivilegeType = 1 << iota
 | |
| 	// CreatePriv is the privilege to create schema/table.
 | |
| 	CreatePriv
 | |
| 	// SelectPriv is the privilege to read from table.
 | |
| 	SelectPriv
 | |
| 	// InsertPriv is the privilege to insert data into table.
 | |
| 	InsertPriv
 | |
| 	// UpdatePriv is the privilege to update data in table.
 | |
| 	UpdatePriv
 | |
| 	// DeletePriv is the privilege to delete data from table.
 | |
| 	DeletePriv
 | |
| 	// ShowDBPriv is the privilege to run show databases statement.
 | |
| 	ShowDBPriv
 | |
| 	// CreateUserPriv is the privilege to create user.
 | |
| 	CreateUserPriv
 | |
| 	// DropPriv is the privilege to drop schema/table.
 | |
| 	DropPriv
 | |
| 	// GrantPriv is the privilege to grant privilege to user.
 | |
| 	GrantPriv
 | |
| 	// AlterPriv is the privilege to run alter statement.
 | |
| 	AlterPriv
 | |
| 	// ExecutePriv is the privilege to run execute statement.
 | |
| 	ExecutePriv
 | |
| 	// IndexPriv is the privilege to create/drop index.
 | |
| 	IndexPriv
 | |
| 	// AllPriv is the privilege for all actions.
 | |
| 	AllPriv
 | |
| )
 | |
| 
 | |
| // Priv2UserCol is the privilege to mysql.user table column name.
 | |
| var Priv2UserCol = map[PrivilegeType]string{
 | |
| 	CreatePriv:     "Create_priv",
 | |
| 	SelectPriv:     "Select_priv",
 | |
| 	InsertPriv:     "Insert_priv",
 | |
| 	UpdatePriv:     "Update_priv",
 | |
| 	DeletePriv:     "Delete_priv",
 | |
| 	ShowDBPriv:     "Show_db_priv",
 | |
| 	CreateUserPriv: "Create_user_priv",
 | |
| 	DropPriv:       "Drop_priv",
 | |
| 	GrantPriv:      "Grant_priv",
 | |
| 	AlterPriv:      "Alter_priv",
 | |
| 	ExecutePriv:    "Execute_priv",
 | |
| 	IndexPriv:      "Index_priv",
 | |
| }
 | |
| 
 | |
| // Col2PrivType is the privilege tables column name to privilege type.
 | |
| var Col2PrivType = map[string]PrivilegeType{
 | |
| 	"Create_priv":      CreatePriv,
 | |
| 	"Select_priv":      SelectPriv,
 | |
| 	"Insert_priv":      InsertPriv,
 | |
| 	"Update_priv":      UpdatePriv,
 | |
| 	"Delete_priv":      DeletePriv,
 | |
| 	"Show_db_priv":     ShowDBPriv,
 | |
| 	"Create_user_priv": CreateUserPriv,
 | |
| 	"Drop_priv":        DropPriv,
 | |
| 	"Grant_priv":       GrantPriv,
 | |
| 	"Alter_priv":       AlterPriv,
 | |
| 	"Execute_priv":     ExecutePriv,
 | |
| 	"Index_priv":       IndexPriv,
 | |
| }
 | |
| 
 | |
| // AllGlobalPrivs is all the privileges in global scope.
 | |
| var AllGlobalPrivs = []PrivilegeType{SelectPriv, InsertPriv, UpdatePriv, DeletePriv, CreatePriv, DropPriv, GrantPriv, AlterPriv, ShowDBPriv, ExecutePriv, IndexPriv, CreateUserPriv}
 | |
| 
 | |
| // Priv2Str is the map for privilege to string.
 | |
| var Priv2Str = map[PrivilegeType]string{
 | |
| 	CreatePriv:     "Create",
 | |
| 	SelectPriv:     "Select",
 | |
| 	InsertPriv:     "Insert",
 | |
| 	UpdatePriv:     "Update",
 | |
| 	DeletePriv:     "Delete",
 | |
| 	ShowDBPriv:     "Show Databases",
 | |
| 	CreateUserPriv: "Create User",
 | |
| 	DropPriv:       "Drop",
 | |
| 	GrantPriv:      "Grant Option",
 | |
| 	AlterPriv:      "Alter",
 | |
| 	ExecutePriv:    "Execute",
 | |
| 	IndexPriv:      "Index",
 | |
| }
 | |
| 
 | |
| // Priv2SetStr is the map for privilege to string.
 | |
| var Priv2SetStr = map[PrivilegeType]string{
 | |
| 	CreatePriv:  "Create",
 | |
| 	SelectPriv:  "Select",
 | |
| 	InsertPriv:  "Insert",
 | |
| 	UpdatePriv:  "Update",
 | |
| 	DeletePriv:  "Delete",
 | |
| 	DropPriv:    "Drop",
 | |
| 	GrantPriv:   "Grant",
 | |
| 	AlterPriv:   "Alter",
 | |
| 	ExecutePriv: "Execute",
 | |
| 	IndexPriv:   "Index",
 | |
| }
 | |
| 
 | |
| // SetStr2Priv is the map for privilege set string to privilege type.
 | |
| var SetStr2Priv = map[string]PrivilegeType{
 | |
| 	"Create":  CreatePriv,
 | |
| 	"Select":  SelectPriv,
 | |
| 	"Insert":  InsertPriv,
 | |
| 	"Update":  UpdatePriv,
 | |
| 	"Delete":  DeletePriv,
 | |
| 	"Drop":    DropPriv,
 | |
| 	"Grant":   GrantPriv,
 | |
| 	"Alter":   AlterPriv,
 | |
| 	"Execute": ExecutePriv,
 | |
| 	"Index":   IndexPriv,
 | |
| }
 | |
| 
 | |
| // AllDBPrivs is all the privileges in database scope.
 | |
| var AllDBPrivs = []PrivilegeType{SelectPriv, InsertPriv, UpdatePriv, DeletePriv, CreatePriv, DropPriv, GrantPriv, AlterPriv, ExecutePriv, IndexPriv}
 | |
| 
 | |
| // AllTablePrivs is all the privileges in table scope.
 | |
| var AllTablePrivs = []PrivilegeType{SelectPriv, InsertPriv, UpdatePriv, DeletePriv, CreatePriv, DropPriv, GrantPriv, AlterPriv, IndexPriv}
 | |
| 
 | |
| // AllColumnPrivs is all the privileges in column scope.
 | |
| var AllColumnPrivs = []PrivilegeType{SelectPriv, InsertPriv, UpdatePriv}
 | |
| 
 | |
| // AllPrivilegeLiteral is the string literal for All Privilege.
 | |
| const AllPrivilegeLiteral = "ALL PRIVILEGES"
 | |
| 
 |