From f62b144151e9911d9792e225286195aa1a66bffa Mon Sep 17 00:00:00 2001 From: lysu Date: Tue, 15 Jun 2021 13:16:36 +0800 Subject: [PATCH 1/7] cherry pick #25405 to release-5.0 Signed-off-by: ti-srebot --- ddl/ddl_api.go | 5 +---- ddl/error.go | 13 +++++++++++++ executor/ddl.go | 7 +++++++ executor/errors.go | 14 ++++++++++++++ executor/insert_common.go | 7 +------ 5 files changed, 36 insertions(+), 10 deletions(-) diff --git a/ddl/ddl_api.go b/ddl/ddl_api.go index 9c4eac7a422f3..38f1c6b88bfbb 100644 --- a/ddl/ddl_api.go +++ b/ddl/ddl_api.go @@ -39,7 +39,6 @@ import ( field_types "github.com/pingcap/parser/types" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/ddl/placement" - "github.com/pingcap/tidb/errno" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/kv" @@ -55,7 +54,6 @@ import ( "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/codec" "github.com/pingcap/tidb/util/collate" - "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/domainutil" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/mock" @@ -1410,8 +1408,7 @@ func buildTableInfo( // Check clustered on non-primary key. if constr.Option != nil && constr.Option.PrimaryKeyTp != model.PrimaryKeyTypeDefault && constr.Tp != ast.ConstraintPrimaryKey { - msg := mysql.Message("CLUSTERED/NONCLUSTERED keyword is only supported for primary key", nil) - return nil, dbterror.ClassDDL.NewStdErr(errno.ErrUnsupportedDDLOperation, msg) + return nil, errUnsupportedClusteredSecondaryKey } if constr.Tp == ast.ConstraintForeignKey { for _, fk := range tbInfo.ForeignKeys { diff --git a/ddl/error.go b/ddl/error.go index 852d2218c6275..d76dd4978c7f4 100644 --- a/ddl/error.go +++ b/ddl/error.go @@ -274,4 +274,17 @@ var ( ErrUnknownEngine = dbterror.ClassDDL.NewStd(mysql.ErrUnknownStorageEngine) errExchangePartitionDisabled = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("Exchange Partition is disabled, please set 'tidb_enable_exchange_partition' if you need to need to enable it", nil)) +<<<<<<< HEAD +======= + + // ErrPartitionNoTemporary returns when partition at temporary mode + ErrPartitionNoTemporary = dbterror.ClassDDL.NewStd(mysql.ErrPartitionNoTemporary) + + // ErrOptOnTemporaryTable returns when exec unsupported opt at temporary mode + ErrOptOnTemporaryTable = dbterror.ClassDDL.NewStd(mysql.ErrOptOnTemporaryTable) + + errUnsupportedOnCommitPreserve = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("TiDB doesn't support ON COMMIT PRESERVE ROWS for now", nil)) + errUnsupportedEngineTemporary = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("TiDB doesn't support this kind of engine for temporary table", nil)) + errUnsupportedClusteredSecondaryKey = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("CLUSTERED/NONCLUSTERED keyword is only supported for primary key", nil)) +>>>>>>> 932148962... ddl, executor: fix test race in terror (#25405) ) diff --git a/executor/ddl.go b/executor/ddl.go index 2940bab6b80f5..e0ea38f0afedb 100644 --- a/executor/ddl.go +++ b/executor/ddl.go @@ -561,6 +561,13 @@ func (e *DDLExec) getRecoverTableByTableName(tableName *ast.TableName) (*model.J if tableInfo == nil || jobInfo == nil { return nil, nil, errors.Errorf("Can't find dropped/truncated table: %v in DDL history jobs", tableName.Name) } +<<<<<<< HEAD +======= + // Dropping local temporary tables won't appear in DDL jobs. + if tableInfo.TempTableType == model.TempTableGlobal { + return nil, nil, errUnsupportedFlashbackTmpTable + } +>>>>>>> 932148962... ddl, executor: fix test race in terror (#25405) return jobInfo, tableInfo, nil } diff --git a/executor/errors.go b/executor/errors.go index afc64276900a7..c850f187a1aa4 100644 --- a/executor/errors.go +++ b/executor/errors.go @@ -14,6 +14,7 @@ package executor import ( + parser_mysql "github.com/pingcap/parser/mysql" mysql "github.com/pingcap/tidb/errno" "github.com/pingcap/tidb/util/dbterror" ) @@ -45,8 +46,21 @@ var ( ErrDeadlock = dbterror.ClassExecutor.NewStd(mysql.ErrLockDeadlock) ErrQueryInterrupted = dbterror.ClassExecutor.NewStd(mysql.ErrQueryInterrupted) +<<<<<<< HEAD ErrBRIEBackupFailed = dbterror.ClassExecutor.NewStd(mysql.ErrBRIEBackupFailed) ErrBRIERestoreFailed = dbterror.ClassExecutor.NewStd(mysql.ErrBRIERestoreFailed) ErrBRIEImportFailed = dbterror.ClassExecutor.NewStd(mysql.ErrBRIEImportFailed) ErrBRIEExportFailed = dbterror.ClassExecutor.NewStd(mysql.ErrBRIEExportFailed) +======= + ErrBRIEBackupFailed = dbterror.ClassExecutor.NewStd(mysql.ErrBRIEBackupFailed) + ErrBRIERestoreFailed = dbterror.ClassExecutor.NewStd(mysql.ErrBRIERestoreFailed) + ErrBRIEImportFailed = dbterror.ClassExecutor.NewStd(mysql.ErrBRIEImportFailed) + ErrBRIEExportFailed = dbterror.ClassExecutor.NewStd(mysql.ErrBRIEExportFailed) + ErrCTEMaxRecursionDepth = dbterror.ClassExecutor.NewStd(mysql.ErrCTEMaxRecursionDepth) + ErrDataInConsistentExtraIndex = dbterror.ClassExecutor.NewStd(mysql.ErrDataInConsistentExtraIndex) + ErrDataInConsistentMisMatchIndex = dbterror.ClassExecutor.NewStd(mysql.ErrDataInConsistentMisMatchIndex) + + errUnsupportedFlashbackTmpTable = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("Recover/flashback table is not supported on temporary tables", nil)) + errTruncateWrongInsertValue = dbterror.ClassTable.NewStdErr(mysql.ErrTruncatedWrongValue, parser_mysql.Message("Incorrect %-.32s value: '%-.128s' for column '%.192s' at row %d", nil)) +>>>>>>> 932148962... ddl, executor: fix test race in terror (#25405) ) diff --git a/executor/insert_common.go b/executor/insert_common.go index f7402c2c816e8..0b0975fd75048 100644 --- a/executor/insert_common.go +++ b/executor/insert_common.go @@ -28,7 +28,6 @@ import ( "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/ddl" - "github.com/pingcap/tidb/errno" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta/autoid" @@ -38,7 +37,6 @@ import ( "github.com/pingcap/tidb/table/tables" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" - "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/execdetails" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/memory" @@ -308,10 +306,7 @@ func (e *InsertValues) handleErr(col *table.Column, val *types.Datum, rowIdx int if err1 != nil { logutil.BgLogger().Debug("time truncated error", zap.Error(err1)) } - err = dbterror.ClassTable.NewStdErr( - errno.ErrTruncatedWrongValue, - mysql.Message("Incorrect %-.32s value: '%-.128s' for column '%.192s' at row %d", nil), - ).GenWithStackByArgs(types.TypeStr(colTp), valStr, colName, rowIdx+1) + err = errTruncateWrongInsertValue.GenWithStackByArgs(types.TypeStr(colTp), valStr, colName, rowIdx+1) } else if types.ErrTruncatedWrongVal.Equal(err) || types.ErrWrongValue.Equal(err) { valStr, err1 := val.ToString() if err1 != nil { From d95245697671cb2d9726f4e335a2e09ce6d26818 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=99=8E?= Date: Sat, 18 Sep 2021 17:25:24 +0800 Subject: [PATCH 2/7] Update ddl.go --- executor/ddl.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/executor/ddl.go b/executor/ddl.go index e0ea38f0afedb..27f0efeebd5b3 100644 --- a/executor/ddl.go +++ b/executor/ddl.go @@ -561,13 +561,10 @@ func (e *DDLExec) getRecoverTableByTableName(tableName *ast.TableName) (*model.J if tableInfo == nil || jobInfo == nil { return nil, nil, errors.Errorf("Can't find dropped/truncated table: %v in DDL history jobs", tableName.Name) } -<<<<<<< HEAD -======= // Dropping local temporary tables won't appear in DDL jobs. if tableInfo.TempTableType == model.TempTableGlobal { return nil, nil, errUnsupportedFlashbackTmpTable } ->>>>>>> 932148962... ddl, executor: fix test race in terror (#25405) return jobInfo, tableInfo, nil } From c7544223e56e0759bb47fcbef1953f8d881045c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=99=8E?= Date: Sat, 18 Sep 2021 17:27:04 +0800 Subject: [PATCH 3/7] Update errors.go --- executor/errors.go | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/executor/errors.go b/executor/errors.go index c850f187a1aa4..2f4386a9206d6 100644 --- a/executor/errors.go +++ b/executor/errors.go @@ -46,21 +46,6 @@ var ( ErrDeadlock = dbterror.ClassExecutor.NewStd(mysql.ErrLockDeadlock) ErrQueryInterrupted = dbterror.ClassExecutor.NewStd(mysql.ErrQueryInterrupted) -<<<<<<< HEAD - ErrBRIEBackupFailed = dbterror.ClassExecutor.NewStd(mysql.ErrBRIEBackupFailed) - ErrBRIERestoreFailed = dbterror.ClassExecutor.NewStd(mysql.ErrBRIERestoreFailed) - ErrBRIEImportFailed = dbterror.ClassExecutor.NewStd(mysql.ErrBRIEImportFailed) - ErrBRIEExportFailed = dbterror.ClassExecutor.NewStd(mysql.ErrBRIEExportFailed) -======= - ErrBRIEBackupFailed = dbterror.ClassExecutor.NewStd(mysql.ErrBRIEBackupFailed) - ErrBRIERestoreFailed = dbterror.ClassExecutor.NewStd(mysql.ErrBRIERestoreFailed) - ErrBRIEImportFailed = dbterror.ClassExecutor.NewStd(mysql.ErrBRIEImportFailed) - ErrBRIEExportFailed = dbterror.ClassExecutor.NewStd(mysql.ErrBRIEExportFailed) - ErrCTEMaxRecursionDepth = dbterror.ClassExecutor.NewStd(mysql.ErrCTEMaxRecursionDepth) - ErrDataInConsistentExtraIndex = dbterror.ClassExecutor.NewStd(mysql.ErrDataInConsistentExtraIndex) - ErrDataInConsistentMisMatchIndex = dbterror.ClassExecutor.NewStd(mysql.ErrDataInConsistentMisMatchIndex) - errUnsupportedFlashbackTmpTable = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("Recover/flashback table is not supported on temporary tables", nil)) errTruncateWrongInsertValue = dbterror.ClassTable.NewStdErr(mysql.ErrTruncatedWrongValue, parser_mysql.Message("Incorrect %-.32s value: '%-.128s' for column '%.192s' at row %d", nil)) ->>>>>>> 932148962... ddl, executor: fix test race in terror (#25405) ) From a157a01767deb70646dfc924fe49091fb0783068 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=99=8E?= Date: Sat, 18 Sep 2021 17:27:52 +0800 Subject: [PATCH 4/7] Update error.go --- ddl/error.go | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/ddl/error.go b/ddl/error.go index d76dd4978c7f4..6f9416526696c 100644 --- a/ddl/error.go +++ b/ddl/error.go @@ -273,18 +273,8 @@ var ( // ErrUnknownEngine is returned when the table engine is unknown. ErrUnknownEngine = dbterror.ClassDDL.NewStd(mysql.ErrUnknownStorageEngine) - errExchangePartitionDisabled = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("Exchange Partition is disabled, please set 'tidb_enable_exchange_partition' if you need to need to enable it", nil)) -<<<<<<< HEAD -======= - - // ErrPartitionNoTemporary returns when partition at temporary mode - ErrPartitionNoTemporary = dbterror.ClassDDL.NewStd(mysql.ErrPartitionNoTemporary) - - // ErrOptOnTemporaryTable returns when exec unsupported opt at temporary mode - ErrOptOnTemporaryTable = dbterror.ClassDDL.NewStd(mysql.ErrOptOnTemporaryTable) - + errExchangePartitionDisabled = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("Exchange Partition is disabled, please set 'tidb_enable_exchange_partition' if you need to need to enable it", nil)) errUnsupportedOnCommitPreserve = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("TiDB doesn't support ON COMMIT PRESERVE ROWS for now", nil)) errUnsupportedEngineTemporary = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("TiDB doesn't support this kind of engine for temporary table", nil)) errUnsupportedClusteredSecondaryKey = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("CLUSTERED/NONCLUSTERED keyword is only supported for primary key", nil)) ->>>>>>> 932148962... ddl, executor: fix test race in terror (#25405) ) From 6c420e0e3d6c4c816b6a01ceb9f10dd058b80360 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=99=8E?= Date: Sat, 18 Sep 2021 17:41:17 +0800 Subject: [PATCH 5/7] Update errors.go --- executor/errors.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/executor/errors.go b/executor/errors.go index 2f4386a9206d6..f8fd6f786cf7c 100644 --- a/executor/errors.go +++ b/executor/errors.go @@ -46,6 +46,11 @@ var ( ErrDeadlock = dbterror.ClassExecutor.NewStd(mysql.ErrLockDeadlock) ErrQueryInterrupted = dbterror.ClassExecutor.NewStd(mysql.ErrQueryInterrupted) + ErrBRIEBackupFailed = dbterror.ClassExecutor.NewStd(mysql.ErrBRIEBackupFailed) + ErrBRIERestoreFailed = dbterror.ClassExecutor.NewStd(mysql.ErrBRIERestoreFailed) + ErrBRIEImportFailed = dbterror.ClassExecutor.NewStd(mysql.ErrBRIEImportFailed) + ErrBRIEExportFailed = dbterror.ClassExecutor.NewStd(mysql.ErrBRIEExportFailed) + errUnsupportedFlashbackTmpTable = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("Recover/flashback table is not supported on temporary tables", nil)) errTruncateWrongInsertValue = dbterror.ClassTable.NewStdErr(mysql.ErrTruncatedWrongValue, parser_mysql.Message("Incorrect %-.32s value: '%-.128s' for column '%.192s' at row %d", nil)) ) From f37e7389f9b2764e0241c77c1056dd257937c2e4 Mon Sep 17 00:00:00 2001 From: ichn-hu Date: Sat, 18 Sep 2021 18:21:19 +0800 Subject: [PATCH 6/7] fix cherry pick --- ddl/ddl_api.go | 3 +-- ddl/error.go | 9 +++++---- executor/ddl.go | 4 ---- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/ddl/ddl_api.go b/ddl/ddl_api.go index 38f1c6b88bfbb..88395d67fe521 100644 --- a/ddl/ddl_api.go +++ b/ddl/ddl_api.go @@ -1437,8 +1437,7 @@ func buildTableInfo( } else { hasBinlog := ctx.GetSessionVars().BinlogClient != nil if hasBinlog { - msg := mysql.Message("Cannot create clustered index table when the binlog is ON", nil) - return nil, dbterror.ClassDDL.NewStdErr(errno.ErrUnsupportedDDLOperation, msg) + return nil, errUnsupportedClusteredIndexWhenBinlogIsOn } tbInfo.IsCommonHandle = true tbInfo.CommonHandleVersion = 1 diff --git a/ddl/error.go b/ddl/error.go index 6f9416526696c..551814cecaeeb 100644 --- a/ddl/error.go +++ b/ddl/error.go @@ -273,8 +273,9 @@ var ( // ErrUnknownEngine is returned when the table engine is unknown. ErrUnknownEngine = dbterror.ClassDDL.NewStd(mysql.ErrUnknownStorageEngine) - errExchangePartitionDisabled = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("Exchange Partition is disabled, please set 'tidb_enable_exchange_partition' if you need to need to enable it", nil)) - errUnsupportedOnCommitPreserve = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("TiDB doesn't support ON COMMIT PRESERVE ROWS for now", nil)) - errUnsupportedEngineTemporary = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("TiDB doesn't support this kind of engine for temporary table", nil)) - errUnsupportedClusteredSecondaryKey = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("CLUSTERED/NONCLUSTERED keyword is only supported for primary key", nil)) + errExchangePartitionDisabled = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("Exchange Partition is disabled, please set 'tidb_enable_exchange_partition' if you need to need to enable it", nil)) + errUnsupportedOnCommitPreserve = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("TiDB doesn't support ON COMMIT PRESERVE ROWS for now", nil)) + errUnsupportedEngineTemporary = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("TiDB doesn't support this kind of engine for temporary table", nil)) + errUnsupportedClusteredSecondaryKey = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("CLUSTERED/NONCLUSTERED keyword is only supported for primary key", nil)) + errUnsupportedClusteredIndexWhenBinlogIsOn = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("create clustered index table when the binlog is ON is not yet supported", nil)) ) diff --git a/executor/ddl.go b/executor/ddl.go index 27f0efeebd5b3..2940bab6b80f5 100644 --- a/executor/ddl.go +++ b/executor/ddl.go @@ -561,10 +561,6 @@ func (e *DDLExec) getRecoverTableByTableName(tableName *ast.TableName) (*model.J if tableInfo == nil || jobInfo == nil { return nil, nil, errors.Errorf("Can't find dropped/truncated table: %v in DDL history jobs", tableName.Name) } - // Dropping local temporary tables won't appear in DDL jobs. - if tableInfo.TempTableType == model.TempTableGlobal { - return nil, nil, errUnsupportedFlashbackTmpTable - } return jobInfo, tableInfo, nil } From 12b8988504cfe18df2384988db30a516e1b39534 Mon Sep 17 00:00:00 2001 From: ichn-hu Date: Sat, 18 Sep 2021 18:28:00 +0800 Subject: [PATCH 7/7] fix cherry pick --- ddl/error.go | 4 +--- executor/errors.go | 5 ++--- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/ddl/error.go b/ddl/error.go index 551814cecaeeb..f36a550d9f15a 100644 --- a/ddl/error.go +++ b/ddl/error.go @@ -274,8 +274,6 @@ var ( ErrUnknownEngine = dbterror.ClassDDL.NewStd(mysql.ErrUnknownStorageEngine) errExchangePartitionDisabled = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("Exchange Partition is disabled, please set 'tidb_enable_exchange_partition' if you need to need to enable it", nil)) - errUnsupportedOnCommitPreserve = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("TiDB doesn't support ON COMMIT PRESERVE ROWS for now", nil)) - errUnsupportedEngineTemporary = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("TiDB doesn't support this kind of engine for temporary table", nil)) errUnsupportedClusteredSecondaryKey = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("CLUSTERED/NONCLUSTERED keyword is only supported for primary key", nil)) - errUnsupportedClusteredIndexWhenBinlogIsOn = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("create clustered index table when the binlog is ON is not yet supported", nil)) + errUnsupportedClusteredIndexWhenBinlogIsOn = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("Cannot create clustered index table when the binlog is ON", nil)) ) diff --git a/executor/errors.go b/executor/errors.go index f8fd6f786cf7c..20e251d3bcb45 100644 --- a/executor/errors.go +++ b/executor/errors.go @@ -50,7 +50,6 @@ var ( ErrBRIERestoreFailed = dbterror.ClassExecutor.NewStd(mysql.ErrBRIERestoreFailed) ErrBRIEImportFailed = dbterror.ClassExecutor.NewStd(mysql.ErrBRIEImportFailed) ErrBRIEExportFailed = dbterror.ClassExecutor.NewStd(mysql.ErrBRIEExportFailed) - - errUnsupportedFlashbackTmpTable = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("Recover/flashback table is not supported on temporary tables", nil)) - errTruncateWrongInsertValue = dbterror.ClassTable.NewStdErr(mysql.ErrTruncatedWrongValue, parser_mysql.Message("Incorrect %-.32s value: '%-.128s' for column '%.192s' at row %d", nil)) + + errTruncateWrongInsertValue = dbterror.ClassTable.NewStdErr(mysql.ErrTruncatedWrongValue, parser_mysql.Message("Incorrect %-.32s value: '%-.128s' for column '%.192s' at row %d", nil)) )