1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/hanchuanchuan-goInception

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
errors.go 53 КБ
Копировать Редактировать Исходные данные Просмотреть построчно История
hanchuanchuan Отправлено 5 лет назад d5bb6cc
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257
// Copyright 2013 The ql Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSES/QL-LICENSE file.
// 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 session
import (
"fmt"
// "strconv"
"github.com/hanchuanchuan/goInception/config"
"github.com/hanchuanchuan/goInception/mysql"
"github.com/hanchuanchuan/goInception/terror"
)
//go:generate stringer -type=ErrorCode
type ErrorCode int
var (
ErrWrongValueForVar = terror.ClassVariable.New(mysql.ErrWrongValueForVar,
mysql.MySQLErrName[mysql.ErrWrongValueForVar])
ErrTruncatedWrongValue = terror.ClassVariable.New(mysql.ErrTruncatedWrongValue,
mysql.MySQLErrName[mysql.ErrTruncatedWrongValue])
ErrWrongTypeForVar = terror.ClassVariable.New(mysql.ErrWrongTypeForVar,
mysql.MySQLErrName[mysql.ErrWrongTypeForVar])
)
const (
ER_ERROR_FIRST ErrorCode = iota
ER_NOT_SUPPORTED_YET
ER_SQL_NO_SOURCE
ER_SQL_NO_OP_TYPE
ER_SQL_INVALID_OP_TYPE
ER_PARSE_ERROR
ER_SYNTAX_ERROR
ER_REMOTE_EXE_ERROR
ER_SHUTDOWN_COMPLETE
ER_WITH_INSERT_FIELD
ER_WITH_INSERT_VALUES
ER_WRONG_VALUE_COUNT_ON_ROW
ER_BAD_FIELD_ERROR
ER_FIELD_SPECIFIED_TWICE
ER_BAD_NULL_ERROR
ER_NO_WHERE_CONDITION
ER_NORMAL_SHUTDOWN
ER_FORCING_CLOSE
ER_CON_COUNT_ERROR
ER_INVALID_COMMAND
ER_SQL_INVALID_SOURCE
ER_WRONG_DB_NAME
ER_NO_DB_ERROR
ER_WITH_LIMIT_CONDITION
ER_WITH_ORDERBY_CONDITION
ER_SELECT_ONLY_STAR
ER_ORDERY_BY_RAND
ER_ID_IS_UPER
ER_UNKNOWN_COLLATION
ER_INVALID_DATA_TYPE
ER_NOT_ALLOWED_NULLABLE
ER_DUP_FIELDNAME
ER_WRONG_COLUMN_NAME
ER_WRONG_AUTO_KEY
ER_TABLE_CANT_HANDLE_AUTO_INCREMENT
ER_FOREIGN_KEY
ER_TOO_MANY_KEY_PARTS
ER_TOO_LONG_IDENT
ER_UDPATE_TOO_MUCH_ROWS
ER_INSERT_TOO_MUCH_ROWS
ER_CHANGE_TOO_MUCH_ROWS
ER_WRONG_NAME_FOR_INDEX
ER_TOO_MANY_KEYS
ER_NOT_SUPPORTED_KEY_TYPE
ER_WRONG_SUB_KEY
ER_WRONG_KEY_COLUMN
ER_TOO_LONG_KEY
ER_MULTIPLE_PRI_KEY
ER_DUP_KEYNAME
ER_TOO_LONG_INDEX_COMMENT
ER_DUP_INDEX
ER_TEMP_TABLE_TMP_PREFIX
ER_TABLE_PREFIX
ER_TABLE_CHARSET_MUST_UTF8
ER_TABLE_CHARSET_MUST_NULL
ER_TABLE_MUST_HAVE_COMMENT
ER_COLUMN_HAVE_NO_COMMENT
ER_TABLE_MUST_HAVE_PK
ER_PARTITION_NOT_ALLOWED
ER_USE_ENUM
ER_USE_TEXT_OR_BLOB
ER_COLUMN_EXISTED
ER_COLUMN_NOT_EXISTED
ER_CANT_DROP_FIELD_OR_KEY
ER_INVALID_DEFAULT
ER_USERNAME
ER_HOSTNAME
ER_NOT_VALID_PASSWORD
ER_WRONG_STRING_LENGTH
ER_BLOB_USED_AS_KEY
ER_TOO_LONG_BAKDB_NAME
ER_INVALID_BACKUP_HOST_INFO
ER_BINLOG_CORRUPTED
ER_NET_READ_ERROR
ER_NETWORK_READ_EVENT_CHECKSUM_FAILURE
ER_SLAVE_RELAY_LOG_WRITE_FAILURE
ER_INCORRECT_GLOBAL_LOCAL_VAR
ER_START_AS_BEGIN
ER_OUTOFMEMORY
ER_HAVE_BEGIN
ER_NET_READ_INTERRUPTED
ER_BINLOG_FORMAT_STATEMENT
ER_ERROR_EXIST_BEFORE
ER_UNKNOWN_SYSTEM_VARIABLE
ER_UNKNOWN_CHARACTER_SET
ER_END_WITH_COMMIT
ER_DB_NOT_EXISTED_ERROR
ER_TABLE_EXISTS_ERROR
ER_INDEX_NAME_IDX_PREFIX
ER_INDEX_NAME_UNIQ_PREFIX
ER_AUTOINC_UNSIGNED
ER_VARCHAR_TO_TEXT_LEN
ER_CHAR_TO_VARCHAR_LEN
ER_KEY_COLUMN_DOES_NOT_EXITS
ER_INC_INIT_ERR
ER_WRONG_ARGUMENTS
ER_SET_DATA_TYPE_INT_BIGINT
ER_TIMESTAMP_DEFAULT
ER_CHARSET_ON_COLUMN
ER_AUTO_INCR_ID_WARNING
ER_ALTER_TABLE_ONCE
ER_BLOB_CANT_HAVE_DEFAULT
ER_END_WITH_SEMICOLON
ER_NON_UNIQ_ERROR
ER_TABLE_NOT_EXISTED_ERROR
ER_UNKNOWN_TABLE
ER_INVALID_GROUP_FUNC_USE
ER_INDEX_USE_ALTER_TABLE
ER_WITH_DEFAULT_ADD_COLUMN
ER_TRUNCATED_WRONG_VALUE
ER_TEXT_NOT_NULLABLE_ERROR
ER_WRONG_VALUE_FOR_VAR
ER_TOO_MUCH_AUTO_TIMESTAMP_COLS
ER_INVALID_ON_UPDATE
ER_DDL_DML_COEXIST
ER_SLAVE_CORRUPT_EVENT
ER_COLLATION_CHARSET_MISMATCH
ER_NOT_SUPPORTED_ALTER_OPTION
ER_CONFLICTING_DECLARATIONS
ER_IDENT_USE_KEYWORD
ER_VIEW_SELECT_CLAUSE
ER_OSC_KILL_FAILED
ER_NET_PACKETS_OUT_OF_ORDER
ER_NOT_SUPPORTED_ITEM_TYPE
ER_INVALID_IDENT
ER_INCEPTION_EMPTY_QUERY
ER_PK_COLS_NOT_INT
ER_PK_TOO_MANY_PARTS
ER_REMOVED_SPACES
ER_CHANGE_COLUMN_TYPE
ER_CANT_DROP_TABLE
ER_CANT_DROP_DATABASE
ER_WRONG_TABLE_NAME
ER_CANT_SET_CHARSET
ER_CANT_SET_COLLATION
ER_CANT_SET_ENGINE
ER_MUST_AT_LEAST_ONE_COLUMN
ER_MUST_HAVE_COLUMNS
ErrColumnsMustHaveIndex
ErrColumnsMustHaveIndexTypeErr
ER_PRIMARY_CANT_HAVE_NULL
ErrCantRemoveAllFields
ErrNotFoundTableInfo
ErrNotFoundThreadId
ErrNotFoundMasterStatus
ErrNonUniqTable
ErrWrongUsage
ErrDataTooLong
ErrCharsetNotSupport
ErrCollationNotSupport
ErrTableCollationNotSupport
ErrJsonTypeSupport
ErrEngineNotSupport
ErrMixOfGroupFuncAndFields
ErrFieldNotInGroupBy
ErCantChangeColumnPosition
ErCantChangeColumn
ER_DATETIME_DEFAULT
ER_TOO_MUCH_AUTO_DATETIME_COLS
ErrFloatDoubleToDecimal
ErrIdentifierUpper
ErrWrongAndExpr
ErrCannotAddForeign
ErrWrongFkDefWithMatch
ErrFkDupName
ErrJoinNoOnCondition
ErrImplicitTypeConversion
ErrUseValueExpr
ER_ERROR_LAST
)
var ErrorsDefault = map[ErrorCode]string{
ER_ERROR_FIRST: "HelloWorld",
ER_NOT_SUPPORTED_YET: "Not supported statement type.",
ER_SQL_NO_SOURCE: "The sql have no source information.",
ER_SQL_NO_OP_TYPE: "The sql have no operation type.",
ER_SQL_INVALID_OP_TYPE: "Invalid sql operation type.",
ER_PARSE_ERROR: "%s near '%s' at line %d",
ER_SYNTAX_ERROR: "You have an error in your SQL syntax, ",
ER_REMOTE_EXE_ERROR: "Execute in source server failed.",
ER_SHUTDOWN_COMPLETE: "Shutdown complete.",
ER_WITH_INSERT_FIELD: "Set the field list for insert statements.",
ER_WITH_INSERT_VALUES: "Set the values list for insert statements.",
ER_WRONG_VALUE_COUNT_ON_ROW: "Column count doesn't match value count at row %d.",
ER_BAD_FIELD_ERROR: "Unknown column '%s' in '%s'.",
ER_FIELD_SPECIFIED_TWICE: "Column '%s' specified twice in table '%s'.",
ER_BAD_NULL_ERROR: "Column '%s' cannot be null in %d row.",
ER_NO_WHERE_CONDITION: "set the where condition for select statement.",
ER_NORMAL_SHUTDOWN: "%s: Normal shutdown\n",
ER_FORCING_CLOSE: "%s: Forcing close of thread %ld user: '%s'\n",
ER_CON_COUNT_ERROR: "Too many connections",
ER_INVALID_COMMAND: "Invalid command.",
ER_SQL_INVALID_SOURCE: "Invalid source infomation(%s).",
ER_WRONG_DB_NAME: "Incorrect database name '%s'.",
ER_NO_DB_ERROR: "No database selected.",
ER_WITH_LIMIT_CONDITION: "Limit is not allowed in update/delete statement.",
ER_WITH_ORDERBY_CONDITION: "Order by is not allowed in update/delete statement.",
ER_SELECT_ONLY_STAR: "Select only star is not allowed.",
ER_ORDERY_BY_RAND: "Order by rand is not allowed in select statement.",
ER_ID_IS_UPER: "Identifier is not allowed to been upper-case.",
ER_UNKNOWN_COLLATION: "Unknown collation: '%s'.",
ER_INVALID_DATA_TYPE: "Not supported data type on field: '%s'.",
ER_NOT_ALLOWED_NULLABLE: "Column '%s' in table '%s' is not allowed to been nullable.",
ER_DUP_FIELDNAME: "Duplicate column name '%s'.",
ER_WRONG_COLUMN_NAME: "Incorrect column name '%s'.",
ER_WRONG_AUTO_KEY: "Incorrect table definition; there can be only one auto column and it must be defined as a key.",
ER_TABLE_CANT_HANDLE_AUTO_INCREMENT: "The used table type doesn't support AUTO_INCREMENT columns.",
ER_FOREIGN_KEY: "Foreign key is not allowed in table '%s'.",
ER_TOO_MANY_KEY_PARTS: "Too many key parts in Key '%s' in table '%s' specified, max %d parts allowed.",
ER_TOO_LONG_IDENT: "Identifier name '%s' is too long.",
ER_UDPATE_TOO_MUCH_ROWS: "Update(%d rows) more than %d rows.",
ER_INSERT_TOO_MUCH_ROWS: "Insert(%d rows) more than %d rows.",
ER_CHANGE_TOO_MUCH_ROWS: "%s(%d rows) more than %d rows.",
ER_WRONG_NAME_FOR_INDEX: "Incorrect index name '%s' in table '%s'.",
ER_TOO_MANY_KEYS: "Too many keys specified in table '%s', max %d keys allowed.",
ER_NOT_SUPPORTED_KEY_TYPE: "Not supported key type: '%s'.",
ER_WRONG_SUB_KEY: "Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storagengine doesn't support unique prefix keys",
ER_WRONG_KEY_COLUMN: "The used storage engine can't index column '%s'.",
ER_TOO_LONG_KEY: "Specified key '%s' was too long; max key length is %d bytes.",
ER_MULTIPLE_PRI_KEY: "Multiple primary key defined.",
ER_DUP_KEYNAME: "Duplicate key name '%s'.",
ER_TOO_LONG_INDEX_COMMENT: "Comment for index '%s' is too long (max = %lu).",
ER_DUP_INDEX: "Duplicate index '%s' defined on the table '%s.%s'.",
ER_TEMP_TABLE_TMP_PREFIX: "Set 'tmp' prefix for temporary table.",
ER_TABLE_PREFIX: "Need set '%s' prefix for table.",
ER_TABLE_CHARSET_MUST_UTF8: "Set charset to one of '%s' for table '%s'.",
ER_TABLE_CHARSET_MUST_NULL: "Not allowed set charset for table '%s'.",
ErrTableCollationNotSupport: "Not allowed set collation for table '%s'.",
ER_TABLE_MUST_HAVE_COMMENT: "Set comments for table '%s'.",
ER_COLUMN_HAVE_NO_COMMENT: "Column '%s' in table '%s' have no comments.",
ER_TABLE_MUST_HAVE_PK: "Set a primary key for table '%s'.",
ER_PARTITION_NOT_ALLOWED: "Partition is not allowed in table.",
ER_USE_ENUM: "Type enum is used in column.",
ER_USE_TEXT_OR_BLOB: "Type blob/text is used in column '%s'.",
ER_COLUMN_EXISTED: "Column '%s' have existed.",
ER_COLUMN_NOT_EXISTED: "Column '%s' not existed.",
ER_CANT_DROP_FIELD_OR_KEY: "Can't DROP '%s'; check that column/key exists.",
ER_INVALID_DEFAULT: "Invalid default value for column '%s'.",
ER_USERNAME: "user name",
ER_HOSTNAME: "host name",
ER_NOT_VALID_PASSWORD: "Your password does not satisfy the current policy requirements.",
ER_WRONG_STRING_LENGTH: "String '%s' is too long for %s (should be no longer than %d).",
ER_BLOB_USED_AS_KEY: "BLOB column '%s' can't be used in key specification with the used table type.",
ER_TOO_LONG_BAKDB_NAME: "The backup dbname '%-s-%d-%s' is too long.",
ER_INVALID_BACKUP_HOST_INFO: "Invalid remote backup information.",
ER_BINLOG_CORRUPTED: "Binlog is corrupted.",
ER_NET_READ_ERROR: "Got an error reading communication packets.",
ER_NETWORK_READ_EVENT_CHECKSUM_FAILURE: "Replication event checksum verification failed while reading from network.",
ER_SLAVE_RELAY_LOG_WRITE_FAILURE: "Relay log write failure: %s.",
ER_INCORRECT_GLOBAL_LOCAL_VAR: "Variable '%s' is a %s variable.",
ER_START_AS_BEGIN: "Must start as begin statement.",
ER_OUTOFMEMORY: "Out of memory; restart server and try again (needed %d bytes).",
ER_HAVE_BEGIN: "Have you begin twice? Or you didn't commit last time, if so, you can execute commit explicitly.",
ER_NET_READ_INTERRUPTED: "Got timeout reading communication packets.",
ER_BINLOG_FORMAT_STATEMENT: "The binlog_format is statement, backup is disabled.",
ER_ERROR_EXIST_BEFORE: "Exist error at before statement.",
ER_UNKNOWN_SYSTEM_VARIABLE: "Unknown system variable '%s'.",
ER_UNKNOWN_CHARACTER_SET: "Unknown character set: '%s'.",
ER_END_WITH_COMMIT: "Must end with commit.",
ER_DB_NOT_EXISTED_ERROR: "Selected Database '%s' not existed.",
ER_TABLE_EXISTS_ERROR: "Table '%s' already exists.",
ER_INDEX_NAME_IDX_PREFIX: "Index '%s' in table '%s' need 'idx_' prefix.",
ER_INDEX_NAME_UNIQ_PREFIX: "Index '%s' in table '%s' need 'uniq_' prefix.",
ER_AUTOINC_UNSIGNED: "Set unsigned attribute on auto increment column in table '%s'.",
ER_VARCHAR_TO_TEXT_LEN: "Set column '%s' to TEXT type.",
ER_CHAR_TO_VARCHAR_LEN: "Set column '%s' to VARCHAR type.",
ER_KEY_COLUMN_DOES_NOT_EXITS: "Key column '%s' doesn't exist in table.",
ER_INC_INIT_ERR: "Set auto-increment initialize value to 1.",
ER_WRONG_ARGUMENTS: "Incorrect arguments to %s.",
ER_SET_DATA_TYPE_INT_BIGINT: "Set auto-increment data type to int or bigint.",
ER_TIMESTAMP_DEFAULT: "Set default value for timestamp column '%s'.",
ER_CHARSET_ON_COLUMN: "Not Allowed set charset or collation for column '%s.%s'.",
ER_AUTO_INCR_ID_WARNING: "Auto increment column '%s' is meaningful? it's dangerous!",
ER_ALTER_TABLE_ONCE: "Merge the alter statement for table '%s' to ONE.",
ER_BLOB_CANT_HAVE_DEFAULT: "BLOB, TEXT, GEOMETRY or JSON column '%s' can't have a default value.",
ER_END_WITH_SEMICOLON: "Add ';' after the last sql statement.",
ER_NON_UNIQ_ERROR: "Column '%s' in field list is ambiguous.",
ER_TABLE_NOT_EXISTED_ERROR: "Table '%s' doesn't exist.",
ER_UNKNOWN_TABLE: "Unknown table '%s' in %s.",
ER_INVALID_GROUP_FUNC_USE: "Invalid use of group function.",
ER_INDEX_USE_ALTER_TABLE: "Create/drop index and rename is not allowed, please replace with alter statement.",
ER_WITH_DEFAULT_ADD_COLUMN: "Set Default value for column '%s' in table '%s'",
ER_TRUNCATED_WRONG_VALUE: "Truncated incorrect %s value: '%s'",
ER_TEXT_NOT_NULLABLE_ERROR: "TEXT/BLOB Column '%s' in table '%s' can't been not null.",
ER_WRONG_VALUE_FOR_VAR: "Variable '%s' can't be set to the value of '%s'",
ER_TOO_MUCH_AUTO_TIMESTAMP_COLS: "Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause",
ER_INVALID_ON_UPDATE: "Invalid ON UPDATE clause for '%s' column",
ER_DDL_DML_COEXIST: "DDL can not coexist with the DML for table '%s'.",
ER_SLAVE_CORRUPT_EVENT: "Corrupted replication event was detected.",
ER_COLLATION_CHARSET_MISMATCH: "COLLATION '%s' is not valid for CHARACTER SET '%s'",
ER_NOT_SUPPORTED_ALTER_OPTION: "Not supported statement of alter option",
ER_CONFLICTING_DECLARATIONS: "Conflicting declarations: '%s%s' and '%s%s'",
ER_IDENT_USE_KEYWORD: "Identifier '%s' is keyword in MySQL.",
ER_VIEW_SELECT_CLAUSE: "View's SELECT contains a '%s' clause",
ER_OSC_KILL_FAILED: "Can not find OSC executing task",
ER_NET_PACKETS_OUT_OF_ORDER: "Got packets out of order",
ER_NOT_SUPPORTED_ITEM_TYPE: "Not supported expression type '%s'.",
ER_INVALID_IDENT: "Identifier '%s' is invalid, valid options: [a-z|A-Z|0-9|_].",
ER_INCEPTION_EMPTY_QUERY: "Inception error, Query was empty.",
ER_PK_COLS_NOT_INT: "Primary key column '%s' is not int or bigint type in table '%s'.'%s'.",
ER_PK_TOO_MANY_PARTS: "Too many primary key part in table '%s'.'%s', max parts: %d",
ER_REMOVED_SPACES: "Leading spaces are removed from name '%s'",
ER_CHANGE_COLUMN_TYPE: "Type conversion warning for column '%s' %s -> %s.",
ER_CANT_DROP_TABLE: "Drop/truncate '%s' is not allowed, please replace with alter rename statement.",
ER_CANT_DROP_DATABASE: "Command is forbidden! Cannot drop database '%s'.",
ER_WRONG_TABLE_NAME: "Incorrect table name '%-.100s'",
ER_CANT_SET_CHARSET: "Cannot set charset '%s'",
ER_CANT_SET_COLLATION: "Cannot set collation '%s'",
ER_CANT_SET_ENGINE: "Cannot set engine '%s'",
ER_MUST_AT_LEAST_ONE_COLUMN: "A table must have at least 1 column.",
ER_MUST_HAVE_COLUMNS: "Must have the specified column: '%s'.",
ErrColumnsMustHaveIndex: "The specified column: '%s' must have index.",
ErrColumnsMustHaveIndexTypeErr: "The specified column: '%s' type must be '%s',current is '%s'.",
ER_PRIMARY_CANT_HAVE_NULL: "All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead",
ErrCantRemoveAllFields: "You can't delete all columns with ALTER TABLE; use DROP TABLE instead",
ErrNotFoundTableInfo: "Skip backup because there is no table structure information.",
ErrNotFoundThreadId: "MariaDB v%d not supported yet,please confirm that the rollback sql is correct",
ErrNotFoundMasterStatus: "Can't found master binlog position.",
ErrNonUniqTable: "Not unique table/alias: '%-.192s'.", // mysql.MySQLErrName[mysql.ErrNonuniqTable],
ErrWrongUsage: "Incorrect usage of %s and %s.",
ErrDataTooLong: "Data too long for column '%s' at row %d",
ErrCharsetNotSupport: "Set charset to one of '%s'.",
ErrCollationNotSupport: "Set collation to one of '%s'",
ErrEngineNotSupport: "Set engine to one of '%s'",
ErrJsonTypeSupport: "Json type not allowed in column '%s'.",
ErrMixOfGroupFuncAndFields: "In aggregated query without GROUP BY, expression #%d of SELECT list contains nonaggregated column '%s'; this is incompatible with sql_mode=only_full_group_by.",
ErrFieldNotInGroupBy: "Expression #%d of %s is not in GROUP BY clause and contains nonaggregated column '%s' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by.",
ErCantChangeColumnPosition: "Cannot change the position of the column '%s'.",
ErCantChangeColumn: "Not supported statement of change column('%s').",
// ErrMixOfGroupFuncAndFields: "Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause",
//ER_NULL_NAME_FOR_INDEX: "Index name cannot be null in table '%s'.",
ER_DATETIME_DEFAULT: "Set default value for DATETIME column '%s'.",
ER_TOO_MUCH_AUTO_DATETIME_COLS: "Incorrect table definition; there can be only one DATETIME column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause",
ErrFloatDoubleToDecimal: "Set column '%s' to DECIMAL type.",
ErrIdentifierUpper: "Identifier '%s' must be capitalized.",
ErrWrongAndExpr: "May be the wrong syntax! Separate multiple fields with commas.",
ErrCannotAddForeign: "Cannot add foreign key constraint",
ErrWrongFkDefWithMatch: "Incorrect foreign key definition for '%-.192s': Key reference and table reference don't match",
ErrFkDupName: "Duplicate foreign key constraint name '%s'",
ErrJoinNoOnCondition: "set the on clause for join statement.",
ErrImplicitTypeConversion: "Implicit type conversion is not allowed(column '%s.%s',type '%s').",
ErrUseValueExpr: "Please confirm if you want to use value expression in where condition.",
ER_ERROR_LAST: "TheLastError,ByeBye",
}
var ErrorsChinese = map[ErrorCode]string{
ER_NOT_SUPPORTED_YET: "不支持的语法类型.",
ER_SQL_NO_SOURCE: "sql没有源信息.",
ER_SQL_NO_OP_TYPE: "sql没有操作类型设置.",
ER_SQL_INVALID_OP_TYPE: "无效的sql操作类型.",
ER_PARSE_ERROR: "%s near '%s' at line %d",
ER_SYNTAX_ERROR: "SQL语法有错误, ",
ER_REMOTE_EXE_ERROR: "Execute in source server failed.",
ER_SHUTDOWN_COMPLETE: "Shutdown complete.",
ER_WITH_INSERT_FIELD: "insert语句需要指定字段列表.",
ER_WITH_INSERT_VALUES: "insert语句需要指定值列表.",
ER_WRONG_VALUE_COUNT_ON_ROW: "行 %d 的列数和值列表不匹配.",
ER_BAD_FIELD_ERROR: "Unknown column '%s' in '%s'.",
ER_FIELD_SPECIFIED_TWICE: "列 '%s' 指定重复(表 '%s').",
ER_BAD_NULL_ERROR: "列 '%s' 不能为null(第 %d 行).",
ER_NO_WHERE_CONDITION: "selete语句请指定where条件.",
ER_NORMAL_SHUTDOWN: "%s: Normal shutdown\n",
ER_FORCING_CLOSE: "%s: Forcing close of thread %ld user: '%s'\n",
ER_CON_COUNT_ERROR: "Too many connections",
ER_INVALID_COMMAND: "Invalid command.",
ER_SQL_INVALID_SOURCE: "不正确的数据源信息(%s).",
ER_WRONG_DB_NAME: "不正确的的数据库名 '%s'.",
ER_NO_DB_ERROR: "没有选择数据库.",
ER_WITH_LIMIT_CONDITION: "update/delete语句不允许Limit.",
ER_WITH_ORDERBY_CONDITION: "update/delete语句不允许Order by.",
ER_SELECT_ONLY_STAR: "不允许'select *'语法.",
ER_ORDERY_BY_RAND: "不允许'Order by rand'语法.",
ER_ID_IS_UPER: "标识符不允许大写.",
ER_UNKNOWN_COLLATION: "未知的排序规则: '%s'.",
ER_INVALID_DATA_TYPE: "列 '%s' 数据类型不支持.",
ER_NOT_ALLOWED_NULLABLE: "列 '%s' 不允许为null(表 '%s').",
ER_DUP_FIELDNAME: "重复的列名: '%s'.",
ER_WRONG_COLUMN_NAME: "不正确的列名: '%s'.",
ER_WRONG_AUTO_KEY: "不正确的表定义,只能有一个自增列且必须为索引键.",
ER_TABLE_CANT_HANDLE_AUTO_INCREMENT: "使用的表类型不支持自增列.",
ER_FOREIGN_KEY: "不允许使用外键(表 '%s').",
ER_TOO_MANY_KEY_PARTS: "索引 '%s'指定了太多的字段(表 '%s'), 最多允许 %d 个字段.",
ER_TOO_LONG_IDENT: "名称 '%s' 过长.",
ER_UDPATE_TOO_MUCH_ROWS: "预计一次更新(%d行)超过 %d 行.",
ER_INSERT_TOO_MUCH_ROWS: "一次新增(%d行)超过 %d 行.",
ER_CHANGE_TOO_MUCH_ROWS: "预计影响行数(%d行)超过 %d 行.",
ER_WRONG_NAME_FOR_INDEX: "索引 '%s' 名称不正确(表 '%s').",
ER_TOO_MANY_KEYS: "表 '%s' 指定了太多索引, 最多允许 %d 个.",
ER_NOT_SUPPORTED_KEY_TYPE: "不允许的键类型: '%s'.",
ER_WRONG_SUB_KEY: "索引列不能指定长度或指定的长度超出字段长度.",
// ER_WRONG_KEY_COLUMN: "The used storage engine can't index column '%s'.",
ER_TOO_LONG_KEY: "索引 '%s' 过长; 最大长度为 %d 字节.",
ER_MULTIPLE_PRI_KEY: "定义了多个主键.",
ER_DUP_KEYNAME: "索引名 '%s' 重复.",
ER_TOO_LONG_INDEX_COMMENT: "索引 '%s' 注释过长(max = %lu).",
ER_DUP_INDEX: "索引 '%s' 定义重复(表'%s.%s').",
ER_TEMP_TABLE_TMP_PREFIX: "临时表需要指定'tmp'前缀",
ER_TABLE_PREFIX: "表名需要指定'%s'前缀",
ER_TABLE_CHARSET_MUST_UTF8: "允许的字符集为: '%s'(表'%s').",
ER_TABLE_CHARSET_MUST_NULL: "表 '%s' 禁止设置字符集!",
ErrTableCollationNotSupport: "表 '%s' 禁止设置排序规则!",
ER_TABLE_MUST_HAVE_COMMENT: "表 '%s' 需要设置注释.",
ER_COLUMN_HAVE_NO_COMMENT: "列 '%s' 需要设置注释(表'%s').",
ER_TABLE_MUST_HAVE_PK: "表 '%s' 需要设置主键.",
ER_PARTITION_NOT_ALLOWED: "不允许创建分区表.",
ER_USE_ENUM: "不允许使用enum类型.",
ER_USE_TEXT_OR_BLOB: "不允许使用 blob/text 类型(列'%s').",
ER_COLUMN_EXISTED: "列 '%s' 已存在.",
ER_COLUMN_NOT_EXISTED: "列 '%s' 不存在.",
ER_CANT_DROP_FIELD_OR_KEY: "无法删除 '%s'; 请检查字段/键是否存在.",
ER_INVALID_DEFAULT: "列 '%s' 默认值无效.",
ER_USERNAME: "user name",
ER_HOSTNAME: "host name",
ER_NOT_VALID_PASSWORD: "Your password does not satisfy the current policy requirements.",
ER_WRONG_STRING_LENGTH: "String '%s' is too long for %s (should be no longer than %d).",
ER_BLOB_USED_AS_KEY: "BLOB列 '%s' 不允许作为索引列.",
ER_TOO_LONG_BAKDB_NAME: "备份库名 '%-s-%d-%s' 过长.",
ER_INVALID_BACKUP_HOST_INFO: "无效备份库信息.",
ER_BINLOG_CORRUPTED: "Binlog is corrupted.",
ER_NET_READ_ERROR: "Got an error reading communication packets.",
ER_NETWORK_READ_EVENT_CHECKSUM_FAILURE: "Replication event checksum verification failed while reading from network.",
ER_SLAVE_RELAY_LOG_WRITE_FAILURE: "Relay log write failure: %s.",
ER_INCORRECT_GLOBAL_LOCAL_VAR: "Variable '%s' is a %s variable.",
ER_START_AS_BEGIN: "必须以begin语句开始.",
ER_OUTOFMEMORY: "Out of memory; restart server and try again (needed %d bytes).",
ER_HAVE_BEGIN: "指定了多次begin.",
ER_NET_READ_INTERRUPTED: "Got timeout reading communication packets.",
ER_BINLOG_FORMAT_STATEMENT: "The binlog_format is statement, backup is disabled.",
ER_ERROR_EXIST_BEFORE: "Exist error at before statement.",
ER_UNKNOWN_SYSTEM_VARIABLE: "Unknown system variable '%s'.",
ER_UNKNOWN_CHARACTER_SET: "Unknown character set: '%s'.",
ER_END_WITH_COMMIT: "Must end with commit.",
ER_DB_NOT_EXISTED_ERROR: "选择的数据库 '%s' 不存在.",
ER_TABLE_EXISTS_ERROR: "表 '%s' 已存在.",
ER_INDEX_NAME_IDX_PREFIX: "索引 '%s' 需要指定'%s'前缀(表'%s').",
ER_INDEX_NAME_UNIQ_PREFIX: "唯一索引 '%s' 需要指定'%s'前缀(表'%s').",
ER_AUTOINC_UNSIGNED: "自增列建议设置无符号标志unsigned(表'%s').",
ER_VARCHAR_TO_TEXT_LEN: "列 '%s' 建议设置为text类型.",
ER_CHAR_TO_VARCHAR_LEN: "列 '%s' 建议设置为varchar类型.",
ER_KEY_COLUMN_DOES_NOT_EXITS: "列 '%s' 不存在.",
ER_INC_INIT_ERR: "建议自增列初始值置为 1.",
ER_WRONG_ARGUMENTS: "Incorrect arguments to %s.",
ER_SET_DATA_TYPE_INT_BIGINT: "自增列需要设置为int或bigint类型.",
ER_TIMESTAMP_DEFAULT: "请设置timestamp列 '%s' 的默认值.",
ER_CHARSET_ON_COLUMN: "表 '%s' 列 '%s' 禁止设置字符集或排序规则!",
ER_AUTO_INCR_ID_WARNING: "自增列('%s')建议命名为'ID'.",
ER_ALTER_TABLE_ONCE: "表 '%s' 的多个alter操作请合并成一个.",
ER_BLOB_CANT_HAVE_DEFAULT: "BLOB,TEXT,GEOMETRY或JSON列 '%s' 禁止设置默认值.",
ER_END_WITH_SEMICOLON: "Add ';' after the last sql statement.",
ER_NON_UNIQ_ERROR: "列 '%s' 有歧义,请指明表前缀.",
ER_TABLE_NOT_EXISTED_ERROR: "表 '%s' 不存在.",
ER_UNKNOWN_TABLE: "Unknown table '%s' in %s.",
ER_INVALID_GROUP_FUNC_USE: "Invalid use of group function.",
ER_INDEX_USE_ALTER_TABLE: "暂不支持create/drop index和rename语法,请使用alter语句替换.",
ER_WITH_DEFAULT_ADD_COLUMN: "列 '%s' 请设置默认值(表'%s')",
ER_TRUNCATED_WRONG_VALUE: "Truncated incorrect %s value: '%s'",
ER_TEXT_NOT_NULLABLE_ERROR: "TEXT/BLOB 列 '%s' 禁止设置为not null(表'%s').",
ER_WRONG_VALUE_FOR_VAR: "Variable '%s' can't be set to the value of '%s'",
ER_TOO_MUCH_AUTO_TIMESTAMP_COLS: "表定义不正确,只能有一个TIMESTAMP字段在DEFAULT或ON UPDATE指定CURRENT_TIMESTAMP.",
ER_INVALID_ON_UPDATE: "列 %s' ON UPDATE 设置无效",
ER_DDL_DML_COEXIST: "DDL can not coexist with the DML for table '%s'.",
ER_SLAVE_CORRUPT_EVENT: "Corrupted replication event was detected.",
ER_COLLATION_CHARSET_MISMATCH: "COLLATION '%s' is not valid for CHARACTER SET '%s'",
ER_NOT_SUPPORTED_ALTER_OPTION: "Not supported statement of alter option",
ER_CONFLICTING_DECLARATIONS: "Conflicting declarations: '%s%s' and '%s%s'",
ER_IDENT_USE_KEYWORD: "标识符 '%s' 是MySQL关键字.",
ER_VIEW_SELECT_CLAUSE: "View's SELECT contains a '%s' clause",
ER_OSC_KILL_FAILED: "Can not find OSC executing task",
ER_NET_PACKETS_OUT_OF_ORDER: "Got packets out of order",
ER_NOT_SUPPORTED_ITEM_TYPE: "Not supported expression type '%s'.",
ER_INVALID_IDENT: "标识符 '%s' 无效, 允许字符为 [a-z|A-Z|0-9|_].",
ER_INCEPTION_EMPTY_QUERY: "Inception error, Query was empty.",
ER_PK_COLS_NOT_INT: "主键列 '%s' 建议使用int或bigint类型(表'%s'.'%s').",
ER_PK_TOO_MANY_PARTS: "表 '%s'.'%s' 主键指定了太多的字段, 最多允许 %d 个字段",
ER_REMOVED_SPACES: "Leading spaces are removed from name '%s'",
ER_CHANGE_COLUMN_TYPE: "类型转换警告: 列 '%s' %s -> %s.",
ER_CANT_DROP_TABLE: "禁用【DROP】|【TRUNCATE】删除/清空表 '%s', 请改用RENAME重写.",
ER_CANT_DROP_DATABASE: "命令禁止! 无法删除数据库'%s'.",
ER_WRONG_TABLE_NAME: "不正确的表名: '%-.100s'",
ER_CANT_SET_CHARSET: "禁止指定字符集: '%s'",
ER_CANT_SET_COLLATION: "禁止指定排序规则: '%s'",
ER_CANT_SET_ENGINE: "禁止指定存储引擎:'%s'",
ER_MUST_AT_LEAST_ONE_COLUMN: "表至少需要有一个列.",
ER_MUST_HAVE_COLUMNS: "表必须包含以下列: '%s'.",
ErrColumnsMustHaveIndex: "列: '%s' 必须建索引.",
ErrColumnsMustHaveIndexTypeErr: "列: '%s' 类型必须为 '%s',当前为 '%s'",
ER_PRIMARY_CANT_HAVE_NULL: "主键的所有列必须为NOT NULL,如需要NULL列,请改用唯一索引",
ErrCantRemoveAllFields: "禁止删除表的所有列.",
ErrNotFoundTableInfo: "没有表结构信息,跳过备份.",
ErrNotFoundThreadId: "MariaDB v%d 对回滚支持不完美,请注意确认回滚语句是否正确",
ErrNotFoundMasterStatus: "无法获取master binlog信息.",
ErrNonUniqTable: "表名或别名: '%-.192s' 不唯一.",
ErrDataTooLong: "数据过长!(列 '%s',行 '%d')",
ErrCharsetNotSupport: "允许的字符集: '%s'.",
ErrCollationNotSupport: "允许的排序规则: '%s'.",
ErrEngineNotSupport: "允许的存储引擎: '%s'.",
ErrWrongUsage: "%s子句无法使用%s",
ErrJsonTypeSupport: "不允许使用json类型(列'%s').",
ErCantChangeColumnPosition: "不允许改变列顺序(列'%s').",
ErCantChangeColumn: "不允许change column语法(列'%s').",
ER_DATETIME_DEFAULT: "请设置 datetime 列 '%s' 的默认值.",
ER_TOO_MUCH_AUTO_DATETIME_COLS: "表定义不正确,只能有一个 datetime 字段,在 DEFAULT 或 ON UPDATE指定CURRENT_TIMESTAMP.",
ErrFloatDoubleToDecimal: "列 '%s' 建议设置为 decimal 类型.",
ErrIdentifierUpper: "标识符 '%s' 必须大写.",
ErrWrongAndExpr: "可能是错误语法!更新多个字段时请使用逗号分隔.",
ErrJoinNoOnCondition: "join语句请指定on子句.",
ErrImplicitTypeConversion: "不允许隐式类型转换(列'%s.%s',类型'%s').",
ErrUseValueExpr: "请确认是否要在where条件中使用值表达式.",
}
func GetErrorLevel(code ErrorCode) uint8 {
switch code {
case ER_ALTER_TABLE_ONCE,
ER_AUTO_INCR_ID_WARNING,
ER_AUTOINC_UNSIGNED,
ER_BLOB_CANT_HAVE_DEFAULT,
ER_CANT_SET_CHARSET,
ER_CANT_SET_COLLATION,
ER_CANT_SET_ENGINE,
ER_CHANGE_COLUMN_TYPE,
ER_CHAR_TO_VARCHAR_LEN,
ER_CHARSET_ON_COLUMN,
ER_COLUMN_HAVE_NO_COMMENT,
ER_IDENT_USE_KEYWORD,
ER_INC_INIT_ERR,
ER_INDEX_NAME_IDX_PREFIX,
ER_INDEX_NAME_UNIQ_PREFIX,
ER_TEMP_TABLE_TMP_PREFIX,
ER_TABLE_PREFIX,
ER_INSERT_TOO_MUCH_ROWS,
ER_INVALID_DATA_TYPE,
ER_INVALID_IDENT,
ER_MUST_HAVE_COLUMNS,
ErrColumnsMustHaveIndex,
ErrColumnsMustHaveIndexTypeErr,
ER_NO_WHERE_CONDITION,
ErrJoinNoOnCondition,
ER_NOT_ALLOWED_NULLABLE,
ER_NOT_SUPPORTED_ALTER_OPTION,
ER_ORDERY_BY_RAND,
ER_OUTOFMEMORY,
ER_PARTITION_NOT_ALLOWED,
ER_PK_COLS_NOT_INT,
ER_PK_TOO_MANY_PARTS,
ER_SELECT_ONLY_STAR,
ER_TABLE_CHARSET_MUST_NULL,
ER_TABLE_CHARSET_MUST_UTF8,
ER_TABLE_MUST_HAVE_COMMENT,
ER_TABLE_MUST_HAVE_PK,
ER_TEXT_NOT_NULLABLE_ERROR,
ER_TIMESTAMP_DEFAULT,
ER_TOO_LONG_INDEX_COMMENT,
ER_TOO_MANY_KEY_PARTS,
ER_TOO_MANY_KEYS,
ER_UDPATE_TOO_MUCH_ROWS,
ER_CHANGE_TOO_MUCH_ROWS,
ER_UNKNOWN_COLLATION,
ER_USE_ENUM,
ER_WITH_DEFAULT_ADD_COLUMN,
ER_WITH_LIMIT_CONDITION,
ER_WITH_ORDERBY_CONDITION,
ErCantChangeColumnPosition,
ErCantChangeColumn,
ErrNotFoundTableInfo,
ErrNotFoundThreadId,
ErrTableCollationNotSupport,
ER_DATETIME_DEFAULT,
ErrWrongAndExpr,
ErrImplicitTypeConversion,
ErrUseValueExpr,
ER_WITH_INSERT_FIELD:
return 1
case ER_CONFLICTING_DECLARATIONS,
ER_NO_DB_ERROR,
ER_KEY_COLUMN_DOES_NOT_EXITS,
ER_TOO_LONG_BAKDB_NAME,
ER_DB_NOT_EXISTED_ERROR,
ER_TABLE_EXISTS_ERROR,
ER_COLUMN_EXISTED,
ER_START_AS_BEGIN,
ER_COLUMN_NOT_EXISTED,
ER_WRONG_STRING_LENGTH,
ER_BLOB_USED_AS_KEY,
ER_INVALID_DEFAULT,
ER_NOT_SUPPORTED_KEY_TYPE,
ER_DUP_INDEX,
ER_TOO_LONG_KEY,
ER_MULTIPLE_PRI_KEY,
ER_DUP_KEYNAME,
ER_DUP_FIELDNAME,
ER_WRONG_KEY_COLUMN,
ER_WRONG_COLUMN_NAME,
ER_WRONG_AUTO_KEY,
ER_WRONG_SUB_KEY,
ER_WRONG_NAME_FOR_INDEX,
ER_TOO_LONG_IDENT,
ER_SQL_INVALID_SOURCE,
ER_WRONG_DB_NAME,
ER_WITH_INSERT_VALUES,
ER_WRONG_VALUE_COUNT_ON_ROW,
ER_BAD_FIELD_ERROR,
ER_FIELD_SPECIFIED_TWICE,
ER_SQL_NO_SOURCE,
ER_PARSE_ERROR,
ER_SYNTAX_ERROR,
ER_END_WITH_SEMICOLON,
ER_INDEX_USE_ALTER_TABLE,
ER_INVALID_GROUP_FUNC_USE,
ER_TABLE_NOT_EXISTED_ERROR,
ER_UNKNOWN_TABLE,
ER_TOO_MUCH_AUTO_TIMESTAMP_COLS,
ER_INVALID_ON_UPDATE,
ER_NON_UNIQ_ERROR,
ER_DDL_DML_COEXIST,
ER_COLLATION_CHARSET_MISMATCH,
ER_VIEW_SELECT_CLAUSE,
ER_NOT_SUPPORTED_ITEM_TYPE,
ER_CANT_DROP_TABLE,
ER_CANT_DROP_DATABASE,
ER_CANT_DROP_FIELD_OR_KEY,
ER_NOT_SUPPORTED_YET,
ErrCharsetNotSupport,
ErrCollationNotSupport,
ErrEngineNotSupport,
ER_FOREIGN_KEY,
ER_TOO_MUCH_AUTO_DATETIME_COLS,
ER_INCEPTION_EMPTY_QUERY:
return 2
default:
return 2
}
}
// GetErrorMessage 获取审核信息,默认为英文
func GetErrorMessage(code ErrorCode, lang string) string {
if lang == "zh_cn" || lang == "zh-cn" {
if v, ok := ErrorsChinese[code]; ok {
return v
}
}
if v, ok := ErrorsDefault[code]; ok {
return v
}
return "Invalid error code!"
}
// SQLError records an error information, from executing SQL.
type SQLError struct {
Code ErrorCode
Message string
}
// Error prints errors, with a formatted string.
func (e *SQLError) Error() string {
return e.Message
}
// NewErr generates a SQL error, with an error code and default format specifier defined in MySQLErrName.
func NewErr(errCode ErrorCode, args ...interface{}) *SQLError {
e := &SQLError{Code: errCode}
e.Message = fmt.Sprintf(GetErrorMessage(errCode, "en_us"), args...)
return e
}
// NewErrf creates a SQL error, with an error code and a format specifier.
func NewErrf(format string, args ...interface{}) *SQLError {
e := &SQLError{Code: 0}
e.Message = fmt.Sprintf(format, args...)
return e
}
func (e ErrorCode) String() string {
switch e {
case ER_ERROR_FIRST:
return "er_error_first"
case ER_NOT_SUPPORTED_YET:
return "er_not_supported_yet"
case ER_SQL_NO_SOURCE:
return "er_sql_no_source"
case ER_SQL_NO_OP_TYPE:
return "er_sql_no_op_type"
case ER_SQL_INVALID_OP_TYPE:
return "er_sql_invalid_op_type"
case ER_PARSE_ERROR:
return "er_parse_error"
case ER_SYNTAX_ERROR:
return "er_syntax_error"
case ER_REMOTE_EXE_ERROR:
return "er_remote_exe_error"
case ER_SHUTDOWN_COMPLETE:
return "er_shutdown_complete"
case ER_WITH_INSERT_FIELD:
return "er_with_insert_field"
case ER_WITH_INSERT_VALUES:
return "er_with_insert_values"
case ER_WRONG_VALUE_COUNT_ON_ROW:
return "er_wrong_value_count_on_row"
case ER_BAD_FIELD_ERROR:
return "er_bad_field_error"
case ER_FIELD_SPECIFIED_TWICE:
return "er_field_specified_twice"
case ER_BAD_NULL_ERROR:
return "er_bad_null_error"
case ER_NO_WHERE_CONDITION:
return "er_no_where_condition"
case ER_NORMAL_SHUTDOWN:
return "er_normal_shutdown"
case ER_FORCING_CLOSE:
return "er_forcing_close"
case ER_CON_COUNT_ERROR:
return "er_con_count_error"
case ER_INVALID_COMMAND:
return "er_invalid_command"
case ER_SQL_INVALID_SOURCE:
return "er_sql_invalid_source"
case ER_WRONG_DB_NAME:
return "er_wrong_db_name"
case ER_NO_DB_ERROR:
return "er_no_db_error"
case ER_WITH_LIMIT_CONDITION:
return "er_with_limit_condition"
case ER_WITH_ORDERBY_CONDITION:
return "er_with_orderby_condition"
case ER_SELECT_ONLY_STAR:
return "er_select_only_star"
case ER_ORDERY_BY_RAND:
return "er_ordery_by_rand"
case ER_ID_IS_UPER:
return "er_id_is_uper"
case ER_UNKNOWN_COLLATION:
return "er_unknown_collation"
case ER_INVALID_DATA_TYPE:
return "er_invalid_data_type"
case ER_NOT_ALLOWED_NULLABLE:
return "er_not_allowed_nullable"
case ER_DUP_FIELDNAME:
return "er_dup_fieldname"
case ER_WRONG_COLUMN_NAME:
return "er_wrong_column_name"
case ER_WRONG_AUTO_KEY:
return "er_wrong_auto_key"
case ER_TABLE_CANT_HANDLE_AUTO_INCREMENT:
return "er_table_cant_handle_auto_increment"
case ER_FOREIGN_KEY:
return "er_foreign_key"
case ER_TOO_MANY_KEY_PARTS:
return "er_too_many_key_parts"
case ER_TOO_LONG_IDENT:
return "er_too_long_ident"
case ER_UDPATE_TOO_MUCH_ROWS:
return "er_udpate_too_much_rows"
case ER_CHANGE_TOO_MUCH_ROWS:
return "er_change_too_much_rows"
case ER_INSERT_TOO_MUCH_ROWS:
return "er_insert_too_much_rows"
case ER_WRONG_NAME_FOR_INDEX:
return "er_wrong_name_for_index"
case ER_TOO_MANY_KEYS:
return "er_too_many_keys"
case ER_NOT_SUPPORTED_KEY_TYPE:
return "er_not_supported_key_type"
case ER_WRONG_SUB_KEY:
return "er_wrong_sub_key"
case ER_WRONG_KEY_COLUMN:
return "er_wrong_key_column"
case ER_TOO_LONG_KEY:
return "er_too_long_key"
case ER_MULTIPLE_PRI_KEY:
return "er_multiple_pri_key"
case ER_DUP_KEYNAME:
return "er_dup_keyname"
case ER_TOO_LONG_INDEX_COMMENT:
return "er_too_long_index_comment"
case ER_DUP_INDEX:
return "er_dup_index"
case ER_TEMP_TABLE_TMP_PREFIX:
return "er_temp_table_tmp_prefix"
case ER_TABLE_PREFIX:
return "er_table_prefix"
case ER_TABLE_CHARSET_MUST_UTF8:
return "er_table_charset_must_utf8"
case ER_TABLE_CHARSET_MUST_NULL:
return "er_table_charset_must_null"
case ER_TABLE_MUST_HAVE_COMMENT:
return "er_table_must_have_comment"
case ER_COLUMN_HAVE_NO_COMMENT:
return "er_column_have_no_comment"
case ER_TABLE_MUST_HAVE_PK:
return "er_table_must_have_pk"
case ER_PARTITION_NOT_ALLOWED:
return "er_partition_not_allowed"
case ER_USE_ENUM:
return "er_use_enum"
case ER_USE_TEXT_OR_BLOB:
return "er_use_text_or_blob"
case ER_COLUMN_EXISTED:
return "er_column_existed"
case ER_COLUMN_NOT_EXISTED:
return "er_column_not_existed"
case ER_CANT_DROP_FIELD_OR_KEY:
return "er_cant_drop_field_or_key"
case ER_INVALID_DEFAULT:
return "er_invalid_default"
case ER_USERNAME:
return "er_username"
case ER_HOSTNAME:
return "er_hostname"
case ER_NOT_VALID_PASSWORD:
return "er_not_valid_password"
case ER_WRONG_STRING_LENGTH:
return "er_wrong_string_length"
case ER_BLOB_USED_AS_KEY:
return "er_blob_used_as_key"
case ER_TOO_LONG_BAKDB_NAME:
return "er_too_long_bakdb_name"
case ER_INVALID_BACKUP_HOST_INFO:
return "er_invalid_backup_host_info"
case ER_BINLOG_CORRUPTED:
return "er_binlog_corrupted"
case ER_NET_READ_ERROR:
return "er_net_read_error"
case ER_NETWORK_READ_EVENT_CHECKSUM_FAILURE:
return "er_network_read_event_checksum_failure"
case ER_SLAVE_RELAY_LOG_WRITE_FAILURE:
return "er_slave_relay_log_write_failure"
case ER_INCORRECT_GLOBAL_LOCAL_VAR:
return "er_incorrect_global_local_var"
case ER_START_AS_BEGIN:
return "er_start_as_begin"
case ER_OUTOFMEMORY:
return "er_outofmemory"
case ER_HAVE_BEGIN:
return "er_have_begin"
case ER_NET_READ_INTERRUPTED:
return "er_net_read_interrupted"
case ER_BINLOG_FORMAT_STATEMENT:
return "er_binlog_format_statement"
case ER_ERROR_EXIST_BEFORE:
return "er_error_exist_before"
case ER_UNKNOWN_SYSTEM_VARIABLE:
return "er_unknown_system_variable"
case ER_UNKNOWN_CHARACTER_SET:
return "er_unknown_character_set"
case ER_END_WITH_COMMIT:
return "er_end_with_commit"
case ER_DB_NOT_EXISTED_ERROR:
return "er_db_not_existed_error"
case ER_TABLE_EXISTS_ERROR:
return "er_table_exists_error"
case ER_INDEX_NAME_IDX_PREFIX:
return "er_index_name_idx_prefix"
case ER_INDEX_NAME_UNIQ_PREFIX:
return "er_index_name_uniq_prefix"
case ER_AUTOINC_UNSIGNED:
return "er_autoinc_unsigned"
case ER_VARCHAR_TO_TEXT_LEN:
return "er_varchar_to_text_len"
case ER_CHAR_TO_VARCHAR_LEN:
return "er_char_to_varchar_len"
case ER_KEY_COLUMN_DOES_NOT_EXITS:
return "er_key_column_does_not_exits"
case ER_INC_INIT_ERR:
return "er_inc_init_err"
case ER_WRONG_ARGUMENTS:
return "er_wrong_arguments"
case ER_SET_DATA_TYPE_INT_BIGINT:
return "er_set_data_type_int_bigint"
case ER_TIMESTAMP_DEFAULT:
return "er_timestamp_default"
case ER_CHARSET_ON_COLUMN:
return "er_charset_on_column"
case ER_AUTO_INCR_ID_WARNING:
return "er_auto_incr_id_warning"
case ER_ALTER_TABLE_ONCE:
return "er_alter_table_once"
case ER_BLOB_CANT_HAVE_DEFAULT:
return "er_blob_cant_have_default"
case ER_END_WITH_SEMICOLON:
return "er_end_with_semicolon"
case ER_NON_UNIQ_ERROR:
return "er_non_uniq_error"
case ER_TABLE_NOT_EXISTED_ERROR:
return "er_table_not_existed_error"
case ER_UNKNOWN_TABLE:
return "er_unknown_table"
case ER_INVALID_GROUP_FUNC_USE:
return "er_invalid_group_func_use"
case ER_INDEX_USE_ALTER_TABLE:
return "er_index_use_alter_table"
case ER_WITH_DEFAULT_ADD_COLUMN:
return "er_with_default_add_column"
case ER_TRUNCATED_WRONG_VALUE:
return "er_truncated_wrong_value"
case ER_TEXT_NOT_NULLABLE_ERROR:
return "er_text_not_nullable_error"
case ER_WRONG_VALUE_FOR_VAR:
return "er_wrong_value_for_var"
case ER_TOO_MUCH_AUTO_TIMESTAMP_COLS:
return "er_too_much_auto_timestamp_cols"
case ER_INVALID_ON_UPDATE:
return "er_invalid_on_update"
case ER_DDL_DML_COEXIST:
return "er_ddl_dml_coexist"
case ER_SLAVE_CORRUPT_EVENT:
return "er_slave_corrupt_event"
case ER_COLLATION_CHARSET_MISMATCH:
return "er_collation_charset_mismatch"
case ER_NOT_SUPPORTED_ALTER_OPTION:
return "er_not_supported_alter_option"
case ER_CONFLICTING_DECLARATIONS:
return "er_conflicting_declarations"
case ER_IDENT_USE_KEYWORD:
return "er_ident_use_keyword"
case ER_VIEW_SELECT_CLAUSE:
return "er_view_select_clause"
case ER_OSC_KILL_FAILED:
return "er_osc_kill_failed"
case ER_NET_PACKETS_OUT_OF_ORDER:
return "er_net_packets_out_of_order"
case ER_NOT_SUPPORTED_ITEM_TYPE:
return "er_not_supported_item_type"
case ER_INVALID_IDENT:
return "er_invalid_ident"
case ER_INCEPTION_EMPTY_QUERY:
return "er_inception_empty_query"
case ER_PK_COLS_NOT_INT:
return "er_pk_cols_not_int"
case ER_PK_TOO_MANY_PARTS:
return "er_pk_too_many_parts"
case ER_REMOVED_SPACES:
return "er_removed_spaces"
case ER_CHANGE_COLUMN_TYPE:
return "er_change_column_type"
case ER_CANT_DROP_TABLE:
return "er_cant_drop_table"
case ER_CANT_DROP_DATABASE:
return "er_cant_drop_database"
case ER_WRONG_TABLE_NAME:
return "er_wrong_table_name"
case ER_CANT_SET_CHARSET:
return "er_cant_set_charset"
case ER_CANT_SET_COLLATION:
return "er_cant_set_collation"
case ER_CANT_SET_ENGINE:
return "er_cant_set_engine"
case ER_MUST_AT_LEAST_ONE_COLUMN:
return "er_must_at_least_one_column"
case ER_MUST_HAVE_COLUMNS:
return "er_must_have_columns"
case ErrColumnsMustHaveIndex:
return "er_columns_must_have_index"
case ErrColumnsMustHaveIndexTypeErr:
return "er_columns_must_have_index_type_err"
case ER_PRIMARY_CANT_HAVE_NULL:
return "er_primary_cant_have_null"
case ErrCantRemoveAllFields:
return "er_cant_remove_all_fields"
case ErrNotFoundTableInfo:
return "er_not_found_table_info"
case ErrNotFoundThreadId:
return "er_not_found_thread_id"
case ErrNotFoundMasterStatus:
return "er_not_found_master_status"
case ErrNonUniqTable:
return "er_non_uniq_table"
case ErrWrongUsage:
return "er_wrong_usage"
case ErrDataTooLong:
return "er_data_too_long"
case ErrCharsetNotSupport:
return "er_charset_not_support"
case ErrCollationNotSupport:
return "er_collation_not_support"
case ErrTableCollationNotSupport:
return "er_table_collation_not_support"
case ErrJsonTypeSupport:
return "er_json_type_support"
case ErrEngineNotSupport:
return "er_engine_not_support"
case ErrMixOfGroupFuncAndFields:
return "er_mix_of_group_func_and_fields"
case ErrFieldNotInGroupBy:
return "er_field_not_in_group_by"
case ErCantChangeColumnPosition:
return "er_cant_change_column_position"
case ErCantChangeColumn:
return "er_cant_change_column"
case ErrFloatDoubleToDecimal:
return "er_float_double_to_decimal"
case ErrIdentifierUpper:
return "er_identifier_upper"
case ErrWrongAndExpr:
return "er_wrong_and_expr"
case ErrJoinNoOnCondition:
return "er_join_no_on_condition"
case ErrImplicitTypeConversion:
return "er_implicit_type_conversion"
case ErrUseValueExpr:
return "er_use_value_expr"
case ER_ERROR_LAST:
return "er_error_last"
}
return ""
}
// CheckAuditSetting 自动校准旧的审核规则和自定义规则
func CheckAuditSetting(cnf *config.Config) {
return
if cnf.Inc.CheckInsertField {
cnf.IncLevel.ER_WITH_INSERT_FIELD = int8(GetErrorLevel(ER_WITH_INSERT_FIELD))
} else {
cnf.IncLevel.ER_WITH_INSERT_FIELD = 0
}
if cnf.Inc.CheckDMLWhere {
cnf.IncLevel.ER_NO_WHERE_CONDITION = int8(GetErrorLevel(ER_NO_WHERE_CONDITION))
cnf.IncLevel.ErrJoinNoOnCondition = int8(GetErrorLevel(ErrJoinNoOnCondition))
} else {
cnf.IncLevel.ER_NO_WHERE_CONDITION = 0
cnf.IncLevel.ErrJoinNoOnCondition = 0
}
if cnf.Inc.CheckDMLLimit {
cnf.IncLevel.ER_WITH_LIMIT_CONDITION = int8(GetErrorLevel(ER_WITH_LIMIT_CONDITION))
} else {
cnf.IncLevel.ER_WITH_LIMIT_CONDITION = 0
}
if cnf.Inc.CheckDMLOrderBy {
cnf.IncLevel.ER_WITH_ORDERBY_CONDITION = int8(GetErrorLevel(ER_WITH_ORDERBY_CONDITION))
} else {
cnf.IncLevel.ER_WITH_ORDERBY_CONDITION = 0
}
if !cnf.Inc.EnableSelectStar {
cnf.IncLevel.ER_SELECT_ONLY_STAR = int8(GetErrorLevel(ER_SELECT_ONLY_STAR))
} else {
cnf.IncLevel.ER_SELECT_ONLY_STAR = 0
}
if !cnf.Inc.EnableOrderByRand {
cnf.IncLevel.ER_ORDERY_BY_RAND = int8(GetErrorLevel(ER_ORDERY_BY_RAND))
} else {
cnf.IncLevel.ER_ORDERY_BY_RAND = 0
}
if !cnf.Inc.EnableNullable {
cnf.IncLevel.ER_NOT_ALLOWED_NULLABLE = int8(GetErrorLevel(ER_NOT_ALLOWED_NULLABLE))
} else {
cnf.IncLevel.ER_NOT_ALLOWED_NULLABLE = 0
}
if !cnf.Inc.EnableForeignKey {
cnf.IncLevel.ER_FOREIGN_KEY = int8(GetErrorLevel(ER_FOREIGN_KEY))
} else {
cnf.IncLevel.ER_FOREIGN_KEY = 0
}
if !cnf.Inc.EnableBlobType {
cnf.IncLevel.ER_USE_TEXT_OR_BLOB = int8(GetErrorLevel(ER_USE_TEXT_OR_BLOB))
} else {
cnf.IncLevel.ER_USE_TEXT_OR_BLOB = 0
}
if !cnf.Inc.EnableJsonType {
cnf.IncLevel.ErJsonTypeSupport = int8(GetErrorLevel(ErrJsonTypeSupport))
} else {
cnf.IncLevel.ErJsonTypeSupport = 0
}
if cnf.Inc.EnablePKColumnsOnlyInt {
cnf.IncLevel.ER_PK_COLS_NOT_INT = int8(GetErrorLevel(ER_PK_COLS_NOT_INT))
} else {
cnf.IncLevel.ER_PK_COLS_NOT_INT = 0
}
if cnf.Inc.CheckTableComment {
cnf.IncLevel.ER_TABLE_MUST_HAVE_COMMENT = int8(GetErrorLevel(ER_TABLE_MUST_HAVE_COMMENT))
} else {
cnf.IncLevel.ER_TABLE_MUST_HAVE_COMMENT = 0
}
if cnf.Inc.CheckColumnComment {
cnf.IncLevel.ER_COLUMN_HAVE_NO_COMMENT = int8(GetErrorLevel(ER_COLUMN_HAVE_NO_COMMENT))
} else {
cnf.IncLevel.ER_COLUMN_HAVE_NO_COMMENT = 0
}
if cnf.Inc.CheckPrimaryKey {
cnf.IncLevel.ER_TABLE_MUST_HAVE_PK = int8(GetErrorLevel(ER_TABLE_MUST_HAVE_PK))
} else {
cnf.IncLevel.ER_TABLE_MUST_HAVE_PK = 0
}
if !cnf.Inc.EnablePartitionTable {
cnf.IncLevel.ER_PARTITION_NOT_ALLOWED = int8(GetErrorLevel(ER_PARTITION_NOT_ALLOWED))
} else {
cnf.IncLevel.ER_PARTITION_NOT_ALLOWED = 0
}
if !cnf.Inc.EnableEnumSetBit {
cnf.IncLevel.ER_USE_ENUM = int8(GetErrorLevel(ER_USE_ENUM))
cnf.IncLevel.ER_INVALID_DATA_TYPE = int8(GetErrorLevel(ER_INVALID_DATA_TYPE))
} else {
cnf.IncLevel.ER_USE_ENUM = 0
cnf.IncLevel.ER_INVALID_DATA_TYPE = 0
}
if cnf.Inc.CheckIndexPrefix {
cnf.IncLevel.ER_INDEX_NAME_IDX_PREFIX = int8(GetErrorLevel(ER_INDEX_NAME_IDX_PREFIX))
cnf.IncLevel.ER_INDEX_NAME_UNIQ_PREFIX = int8(GetErrorLevel(ER_INDEX_NAME_UNIQ_PREFIX))
} else {
cnf.IncLevel.ER_INDEX_NAME_IDX_PREFIX = 0
cnf.IncLevel.ER_INDEX_NAME_UNIQ_PREFIX = 0
}
if cnf.Inc.EnableAutoIncrementUnsigned {
cnf.IncLevel.ER_AUTOINC_UNSIGNED = int8(GetErrorLevel(ER_AUTOINC_UNSIGNED))
} else {
cnf.IncLevel.ER_AUTOINC_UNSIGNED = 0
}
if cnf.Inc.CheckAutoIncrementInitValue {
cnf.IncLevel.ER_INC_INIT_ERR = int8(GetErrorLevel(ER_INC_INIT_ERR))
} else {
cnf.IncLevel.ER_INC_INIT_ERR = 0
}
if cnf.Inc.CheckIdentifier {
cnf.IncLevel.ER_INVALID_IDENT = int8(GetErrorLevel(ER_INVALID_IDENT))
} else {
cnf.IncLevel.ER_INVALID_IDENT = 0
}
if cnf.Inc.CheckAutoIncrementDataType {
cnf.IncLevel.ER_SET_DATA_TYPE_INT_BIGINT = int8(GetErrorLevel(ER_SET_DATA_TYPE_INT_BIGINT))
} else {
cnf.IncLevel.ER_SET_DATA_TYPE_INT_BIGINT = 0
}
if cnf.Inc.CheckTimestampDefault {
cnf.IncLevel.ER_TIMESTAMP_DEFAULT = int8(GetErrorLevel(ER_TIMESTAMP_DEFAULT))
} else {
cnf.IncLevel.ER_TIMESTAMP_DEFAULT = 0
}
if cnf.Inc.CheckTimestampCount {
cnf.IncLevel.ER_TOO_MUCH_AUTO_TIMESTAMP_COLS = int8(GetErrorLevel(ER_TOO_MUCH_AUTO_TIMESTAMP_COLS))
} else {
cnf.IncLevel.ER_TOO_MUCH_AUTO_TIMESTAMP_COLS = 0
}
if !cnf.Inc.EnableColumnCharset {
cnf.IncLevel.ER_CHARSET_ON_COLUMN = int8(GetErrorLevel(ER_CHARSET_ON_COLUMN))
} else {
cnf.IncLevel.ER_CHARSET_ON_COLUMN = 0
}
if !cnf.Inc.EnableIdentiferKeyword {
cnf.IncLevel.ER_IDENT_USE_KEYWORD = int8(GetErrorLevel(ER_IDENT_USE_KEYWORD))
} else {
cnf.IncLevel.ER_IDENT_USE_KEYWORD = 0
}
if cnf.Inc.CheckAutoIncrementName {
cnf.IncLevel.ER_AUTO_INCR_ID_WARNING = int8(GetErrorLevel(ER_AUTO_INCR_ID_WARNING))
} else {
cnf.IncLevel.ER_AUTO_INCR_ID_WARNING = 0
}
if cnf.Inc.MergeAlterTable {
cnf.IncLevel.ER_ALTER_TABLE_ONCE = int8(GetErrorLevel(ER_ALTER_TABLE_ONCE))
} else {
cnf.IncLevel.ER_ALTER_TABLE_ONCE = 0
}
if cnf.Inc.CheckColumnDefaultValue {
cnf.IncLevel.ER_WITH_DEFAULT_ADD_COLUMN = int8(GetErrorLevel(ER_WITH_DEFAULT_ADD_COLUMN))
} else {
cnf.IncLevel.ER_WITH_DEFAULT_ADD_COLUMN = 0
}
if cnf.Inc.CheckColumnTypeChange {
cnf.IncLevel.ER_CHANGE_COLUMN_TYPE = int8(GetErrorLevel(ER_CHANGE_COLUMN_TYPE))
} else {
cnf.IncLevel.ER_CHANGE_COLUMN_TYPE = 0
}
if cnf.Inc.CheckColumnPositionChange {
cnf.IncLevel.ErCantChangeColumnPosition = int8(GetErrorLevel(ErCantChangeColumnPosition))
} else {
cnf.IncLevel.ErCantChangeColumnPosition = 0
}
if cnf.Inc.EnableChangeColumn {
cnf.IncLevel.ErCantChangeColumn = int8(GetErrorLevel(ErCantChangeColumn))
} else {
cnf.IncLevel.ErCantChangeColumn = 0
}
if !cnf.Inc.EnableBlobNotNull {
cnf.IncLevel.ER_TEXT_NOT_NULLABLE_ERROR = int8(GetErrorLevel(ER_TEXT_NOT_NULLABLE_ERROR))
} else {
cnf.IncLevel.ER_TEXT_NOT_NULLABLE_ERROR = 0
}
if cnf.Inc.CheckImplicitTypeConversion {
cnf.IncLevel.ErrImplicitTypeConversion = int8(GetErrorLevel(ErrImplicitTypeConversion))
} else {
cnf.IncLevel.ErrImplicitTypeConversion = 0
}
}

Комментарий ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://gitlife.ru/oschina-mirror/hanchuanchuan-goInception.git
git@gitlife.ru:oschina-mirror/hanchuanchuan-goInception.git
oschina-mirror
hanchuanchuan-goInception
hanchuanchuan-goInception
v1.2.2