Skip to content

Commit

Permalink
executor,expression: avoid to append nil to warnings (#36304) (#36929)
Browse files Browse the repository at this point in the history
close #31569
  • Loading branch information
ti-srebot authored Aug 9, 2022
1 parent 1b399aa commit ea7e708
Show file tree
Hide file tree
Showing 7 changed files with 96 additions and 37 deletions.
18 changes: 15 additions & 3 deletions executor/insert.go
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ func (e *InsertExec) updateDupRow(ctx context.Context, idxInBatch int, txn kv.Tr
oldRow = append(oldRow, extraCols...)
}

err = e.doDupRowUpdate(ctx, handle, oldRow, row.row, e.OnDuplicate)
err = e.doDupRowUpdate(ctx, handle, oldRow, row.row, e.OnDuplicate, idxInBatch)
if e.ctx.GetSessionVars().StmtCtx.DupKeyAsWarning && kv.ErrKeyExists.Equal(err) {
e.ctx.GetSessionVars().StmtCtx.AppendWarning(err)
return nil
Expand Down Expand Up @@ -375,7 +375,7 @@ func (e *InsertExec) initEvalBuffer4Dup() {

// doDupRowUpdate updates the duplicate row.
func (e *InsertExec) doDupRowUpdate(ctx context.Context, handle kv.Handle, oldRow []types.Datum, newRow []types.Datum,
cols []*expression.Assignment) error {
cols []*expression.Assignment, idxInBatch int) error {
assignFlag := make([]bool, len(e.Table.WritableCols()))
// See http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_values
e.curInsertVals.SetDatums(newRow...)
Expand All @@ -389,6 +389,8 @@ func (e *InsertExec) doDupRowUpdate(ctx context.Context, handle kv.Handle, oldRo

// Update old row when the key is duplicated.
e.evalBuffer4Dup.SetDatums(e.row4Update...)
sc := e.ctx.GetSessionVars().StmtCtx
warnCnt := int(sc.WarningCount())
for _, col := range cols {
if col.LazyErr != nil {
return col.LazyErr
Expand All @@ -397,10 +399,20 @@ func (e *InsertExec) doDupRowUpdate(ctx context.Context, handle kv.Handle, oldRo
if err1 != nil {
return err1
}
e.row4Update[col.Col.Index], err1 = table.CastValue(e.ctx, val, col.Col.ToInfo(), false, false)
c := col.Col.ToInfo()
c.Name = col.ColName
e.row4Update[col.Col.Index], err1 = table.CastValue(e.ctx, val, c, false, false)
if err1 != nil {
return err1
}
if newWarnings := sc.TruncateWarnings(warnCnt); len(newWarnings) > 0 {
for k := range newWarnings {
// Use `idxInBatch` here for simplicity, since the offset of the batch is unknown under the current context.
newWarnings[k].Err = completeInsertErr(c, &val, idxInBatch, newWarnings[k].Err)
}
sc.AppendWarnings(newWarnings)
warnCnt += len(newWarnings)
}
e.evalBuffer4Dup.SetDatum(col.Col.Index, e.row4Update[col.Col.Index])
assignFlag[col.Col.Index] = true
}
Expand Down
39 changes: 33 additions & 6 deletions executor/insert_common.go
Original file line number Diff line number Diff line change
Expand Up @@ -283,12 +283,7 @@ func insertRows(ctx context.Context, base insertCommon) (err error) {
return nil
}

func (e *InsertValues) handleErr(col *table.Column, val *types.Datum, rowIdx int, err error) error {
if err == nil {
return nil
}

// Convert the error with full messages.
func completeInsertErr(col *model.ColumnInfo, val *types.Datum, rowIdx int, err error) error {
var (
colTp byte
colName string
Expand Down Expand Up @@ -319,6 +314,20 @@ func (e *InsertValues) handleErr(col *table.Column, val *types.Datum, rowIdx int
} else if types.ErrWarnDataOutOfRange.Equal(err) {
err = types.ErrWarnDataOutOfRange.GenWithStackByArgs(colName, rowIdx+1)
}
return err
}

func (e *InsertValues) handleErr(col *table.Column, val *types.Datum, rowIdx int, err error) error {
if err == nil {
return nil
}

// Convert the error with full messages.
var c *model.ColumnInfo
if col != nil {
c = col.ColumnInfo
}
err = completeInsertErr(c, val, rowIdx, err)

if !e.ctx.GetSessionVars().StmtCtx.DupKeyAsWarning {
return err
Expand Down Expand Up @@ -346,6 +355,8 @@ func (e *InsertValues) evalRow(ctx context.Context, list []expression.Expression
}

e.evalBuffer.SetDatums(row...)
sc := e.ctx.GetSessionVars().StmtCtx
warnCnt := int(sc.WarningCount())
for i, expr := range list {
val, err := expr.Eval(e.evalBuffer.ToRow())
if err != nil {
Expand All @@ -355,6 +366,13 @@ func (e *InsertValues) evalRow(ctx context.Context, list []expression.Expression
if err = e.handleErr(e.insertColumns[i], &val, rowIdx, err); err != nil {
return nil, err
}
if newWarnings := sc.TruncateWarnings(warnCnt); len(newWarnings) > 0 {
for k := range newWarnings {
newWarnings[k].Err = completeInsertErr(e.insertColumns[i].ColumnInfo, &val, rowIdx, newWarnings[k].Err)
}
sc.AppendWarnings(newWarnings)
warnCnt += len(newWarnings)
}

offset := e.insertColumns[i].Offset
val1.Copy(&row[offset])
Expand All @@ -374,6 +392,8 @@ func (e *InsertValues) fastEvalRow(ctx context.Context, list []expression.Expres
}
row := make([]types.Datum, rowLen)
hasValue := make([]bool, rowLen)
sc := e.ctx.GetSessionVars().StmtCtx
warnCnt := int(sc.WarningCount())
for i, expr := range list {
con := expr.(*expression.Constant)
val, err := con.Eval(emptyRow)
Expand All @@ -384,6 +404,13 @@ func (e *InsertValues) fastEvalRow(ctx context.Context, list []expression.Expres
if err = e.handleErr(e.insertColumns[i], &val, rowIdx, err); err != nil {
return nil, err
}
if newWarnings := sc.TruncateWarnings(warnCnt); len(newWarnings) > 0 {
for k := range newWarnings {
newWarnings[k].Err = completeInsertErr(e.insertColumns[i].ColumnInfo, &val, rowIdx, newWarnings[k].Err)
}
sc.AppendWarnings(newWarnings)
warnCnt += len(newWarnings)
}
offset := e.insertColumns[i].Offset
row[offset], hasValue[offset] = val1, true
}
Expand Down
8 changes: 4 additions & 4 deletions executor/insert_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -372,7 +372,7 @@ func (s *testSuite3) TestInsertWrongValueForField(c *C) {
tk.MustExec(`CREATE TABLE ts (id int DEFAULT NULL, time1 TIMESTAMP NULL DEFAULT NULL)`)
tk.MustExec(`SET @@sql_mode=''`)
tk.MustExec(`INSERT INTO ts (id, time1) VALUES (1, TIMESTAMP '1018-12-23 00:00:00')`)
tk.MustQuery(`SHOW WARNINGS`).Check(testkit.Rows(`Warning 1292 Incorrect timestamp value: '1018-12-23 00:00:00'`))
tk.MustQuery(`SHOW WARNINGS`).Check(testkit.Rows(`Warning 1292 Incorrect timestamp value: '1018-12-23 00:00:00' for column 'time1' at row 1`))
tk.MustQuery(`SELECT * FROM ts ORDER BY id`).Check(testkit.Rows(`1 0000-00-00 00:00:00`))

tk.MustExec(`SET @@sql_mode='STRICT_TRANS_TABLES'`)
Expand Down Expand Up @@ -1591,7 +1591,7 @@ func (s *testSuite9) TestIssue10402(c *C) {
tk.MustExec("insert into vctt values ('ab\\n\\n\\n', 'ab\\n\\n\\n'), ('ab\\t\\t\\t', 'ab\\t\\t\\t'), ('ab ', 'ab '), ('ab\\r\\r\\r', 'ab\\r\\r\\r')")
c.Check(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(4))
warns := tk.Se.GetSessionVars().StmtCtx.GetWarnings()
c.Check(fmt.Sprintf("%v", warns), Equals, "[{Warning [types:1265]Data truncated, field len 4, data len 5} {Warning [types:1265]Data truncated, field len 4, data len 5} {Warning [types:1265]Data truncated, field len 4, data len 6} {Warning [types:1265]Data truncated, field len 4, data len 5}]")
c.Check(fmt.Sprintf("%v", warns), Equals, "[{Warning [types:1265]Data truncated for column 'v' at row 1} {Warning [types:1265]Data truncated for column 'v' at row 2} {Warning [types:1265]Data truncated for column 'v' at row 3} {Warning [types:1265]Data truncated for column 'v' at row 4}]")
tk.MustQuery("select * from vctt").Check(testkit.Rows("ab\n\n ab\n\n", "ab\t\t ab\t\t", "ab ab", "ab\r\r ab\r\r"))
tk.MustQuery("select length(v), length(c) from vctt").Check(testkit.Rows("4 4", "4 4", "4 2", "4 4"))
}
Expand Down Expand Up @@ -1799,7 +1799,7 @@ func (s *testSuite10) TestStringtoDecimal(c *C) {
tk.MustGetErrCode("insert into t values('1.2.')", errno.ErrTruncatedWrongValueForField)
tk.MustGetErrCode("insert into t values('1,999.00')", errno.ErrTruncatedWrongValueForField)
tk.MustExec("insert into t values('12e-3')")
tk.MustQuery("show warnings;").Check(testutil.RowsWithSep("|", "Warning|1292|Truncated incorrect DECIMAL value: '0.012'"))
tk.MustQuery("show warnings;").Check(testutil.RowsWithSep("|", "Warning|1366|Incorrect decimal value: '12e-3' for column 'id' at row 1"))
tk.MustQuery("select id from t").Check(testkit.Rows("0"))
tk.MustExec("drop table if exists t")
}
Expand All @@ -1812,7 +1812,7 @@ func (s *testSuite13) TestIssue17745(c *C) {
tk.MustGetErrCode("insert into tt1 values(89000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)", errno.ErrWarnDataOutOfRange)
tk.MustGetErrCode("insert into tt1 values(89123456789012345678901234567890123456789012345678901234567890123456789012345678900000000)", errno.ErrWarnDataOutOfRange)
tk.MustExec("insert ignore into tt1 values(89123456789012345678901234567890123456789012345678901234567890123456789012345678900000000)")
tk.MustQuery("show warnings;").Check(testkit.Rows(`Warning 1690 DECIMAL value is out of range in '(64, 0)'`, `Warning 1292 Truncated incorrect DECIMAL value: '789012345678901234567890123456789012345678901234567890123456789012345678900000000'`))
tk.MustQuery("show warnings;").Check(testkit.Rows(`Warning 1264 Out of range value for column 'c1' at row 1`, `Warning 1292 Truncated incorrect DECIMAL value: '789012345678901234567890123456789012345678901234567890123456789012345678900000000'`))
tk.MustQuery("select c1 from tt1").Check(testkit.Rows("9999999999999999999999999999999999999999999999999999999999999999"))
tk.MustGetErrCode("update tt1 set c1 = 89123456789012345678901234567890123456789012345678901234567890123456789012345678900000000", errno.ErrWarnDataOutOfRange)
tk.MustExec("drop table if exists tt1")
Expand Down
4 changes: 2 additions & 2 deletions executor/show_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,9 +107,9 @@ func (s *testSuite5) TestShowWarnings(c *C) {
tk.MustExec("set @@sql_mode=''")
tk.MustExec("insert show_warnings values ('a')")
c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(1))
tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|1292|Truncated incorrect DOUBLE value: 'a'"))
tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|1366|Incorrect int value: 'a' for column 'a' at row 1"))
c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(0))
tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|1292|Truncated incorrect DOUBLE value: 'a'"))
tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|1366|Incorrect int value: 'a' for column 'a' at row 1"))
c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(0))

// Test Warning level 'Error'
Expand Down
17 changes: 9 additions & 8 deletions executor/write_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,8 @@ func TestInsert(t *testing.T) {
tk.MustExec("CREATE TABLE t(a DECIMAL(4,2));")
tk.MustExec("INSERT INTO t VALUES (1.000001);")
r = tk.MustQuery("SHOW WARNINGS;")
r.Check(testkit.Rows("Warning 1292 Truncated incorrect DECIMAL value: '1.000001'"))
// TODO: MySQL8.0 reports Note 1265 Data truncated for column 'a' at row 1
r.Check(testkit.Rows("Warning 1366 Incorrect decimal value: '1.000001' for column 'a' at row 1"))
tk.MustExec("INSERT INTO t VALUES (1.000000);")
r = tk.MustQuery("SHOW WARNINGS;")
r.Check(testkit.Rows())
Expand Down Expand Up @@ -251,15 +252,14 @@ func TestInsert(t *testing.T) {
require.True(t, types.ErrWarnDataOutOfRange.Equal(err))
tk.MustExec("set @@sql_mode = '';")
tk.MustExec("insert into t value (-1);")
// TODO: the following warning messages are not consistent with MySQL, fix them in the future PRs
tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1690 constant -1 overflows bigint"))
tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1264 Out of range value for column 'a' at row 1"))
tk.MustExec("insert into t select -1;")
tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1690 constant -1 overflows bigint"))
tk.MustExec("insert into t select cast(-1 as unsigned);")
tk.MustExec("insert into t value (-1.111);")
tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1690 constant -1.111 overflows bigint"))
tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1264 Out of range value for column 'a' at row 1"))
tk.MustExec("insert into t value ('-1.111');")
tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1690 BIGINT UNSIGNED value is out of range in '-1'"))
tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1264 Out of range value for column 'a' at row 1"))
tk.MustExec("update t set a = -1 limit 1;")
tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1690 constant -1 overflows bigint"))
r = tk.MustQuery("select * from t;")
Expand All @@ -282,8 +282,8 @@ func TestInsert(t *testing.T) {
tk.MustExec("create table t(a float unsigned, b double unsigned)")
tk.MustExec("insert into t value(-1.1, -1.1), (-2.1, -2.1), (0, 0), (1.1, 1.1)")
tk.MustQuery("show warnings").
Check(testkit.Rows("Warning 1690 constant -1.1 overflows float", "Warning 1690 constant -1.1 overflows double",
"Warning 1690 constant -2.1 overflows float", "Warning 1690 constant -2.1 overflows double"))
Check(testkit.Rows("Warning 1264 Out of range value for column 'a' at row 1", "Warning 1264 Out of range value for column 'b' at row 1",
"Warning 1264 Out of range value for column 'a' at row 2", "Warning 1264 Out of range value for column 'b' at row 2"))
tk.MustQuery("select * from t").Check(testkit.Rows("0 0", "0 0", "0 0", "1.1 1.1"))

// issue 7061
Expand Down Expand Up @@ -532,7 +532,8 @@ func TestInsertIgnore(t *testing.T) {
require.NoError(t, err)
require.Empty(t, tk.Session().LastMessage())
r = tk.MustQuery("SHOW WARNINGS")
r.Check(testkit.Rows("Warning 1292 Truncated incorrect DOUBLE value: '1a'"))
// TODO: MySQL8.0 reports Warning 1265 Data truncated for column 'a' at row 1
r.Check(testkit.Rows("Warning 1366 Incorrect bigint value: '1a' for column 'a' at row 1"))

// for duplicates with warning
testSQL = `drop table if exists t;
Expand Down
42 changes: 32 additions & 10 deletions expression/integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -363,17 +363,17 @@ func TestConvertToBit(t *testing.T) {
tk.MustExec("create table t(a tinyint, b bit(63));")
tk.MustExec("insert ignore into t values(599999999, -1);")
tk.MustQuery("show warnings;").Check(testkit.Rows(
"Warning 1690 constant 599999999 overflows tinyint",
"Warning 1406 Data Too Long, field len 63"))
"Warning 1264 Out of range value for column 'a' at row 1",
"Warning 1406 Data too long for column 'b' at row 1"))
tk.MustQuery("select * from t;").Check(testkit.Rows("127 \u007f\xff\xff\xff\xff\xff\xff\xff"))

// For issue 24900
tk.MustExec("drop table if exists t;")
tk.MustExec("create table t(b bit(16));")
tk.MustExec("insert ignore into t values(0x3635313836),(0x333830);")
tk.MustQuery("show warnings;").Check(testkit.Rows(
"Warning 1406 Data Too Long, field len 16",
"Warning 1406 Data Too Long, field len 16"))
"Warning 1406 Data too long for column 'b' at row 1",
"Warning 1406 Data too long for column 'b' at row 2"))
tk.MustQuery("select * from t;").Check(testkit.Rows("\xff\xff", "\xff\xff"))
}

Expand Down Expand Up @@ -5182,7 +5182,7 @@ func TestIssue19892(t *testing.T) {

tk.MustExec("TRUNCATE TABLE dd")
tk.MustExec("INSERT INTO dd(c) values('0000-00-00 20:00:00')")
tk.MustQuery("SHOW WARNINGS").Check(testkit.Rows("Warning 1292 Incorrect timestamp value: '0000-00-00 20:00:00'"))
tk.MustQuery("SHOW WARNINGS").Check(testkit.Rows("Warning 1292 Incorrect timestamp value: '0000-00-00 20:00:00' for column 'c' at row 1"))
tk.MustQuery("SELECT c FROM dd").Check(testkit.Rows("0000-00-00 00:00:00"))

tk.MustExec("TRUNCATE TABLE dd")
Expand All @@ -5196,7 +5196,7 @@ func TestIssue19892(t *testing.T) {
{
tk.MustExec("TRUNCATE TABLE dd")
tk.MustExec("INSERT INTO dd(b) values('0000-0-00')")
tk.MustQuery("SHOW WARNINGS").Check(testkit.Rows("Warning 1292 Incorrect datetime value: '0000-0-00'"))
tk.MustQuery("SHOW WARNINGS").Check(testkit.Rows("Warning 1292 Incorrect datetime value: '0000-0-00' for column 'b' at row 1"))
tk.MustQuery("SELECT b FROM dd").Check(testkit.Rows("0000-00-00 00:00:00"))

tk.MustExec("TRUNCATE TABLE dd")
Expand All @@ -5217,7 +5217,7 @@ func TestIssue19892(t *testing.T) {
tk.MustExec("TRUNCATE TABLE dd")
tk.MustGetErrMsg("INSERT INTO dd(c) VALUES ('0000-00-00 20:00:00')", "[table:1292]Incorrect timestamp value: '0000-00-00 20:00:00' for column 'c' at row 1")
tk.MustExec("INSERT IGNORE INTO dd(c) VALUES ('0000-00-00 20:00:00')")
tk.MustQuery("SHOW WARNINGS").Check(testkit.Rows("Warning 1292 Incorrect timestamp value: '0000-00-00 20:00:00'"))
tk.MustQuery("SHOW WARNINGS").Check(testkit.Rows("Warning 1292 Incorrect timestamp value: '0000-00-00 20:00:00' for column 'c' at row 1"))
tk.MustQuery("SELECT c FROM dd").Check(testkit.Rows("0000-00-00 00:00:00"))

tk.MustExec("TRUNCATE TABLE dd")
Expand Down Expand Up @@ -5268,7 +5268,7 @@ func TestIssue19892(t *testing.T) {
{
tk.MustExec("TRUNCATE TABLE dd")
tk.MustExec("INSERT INTO dd(a) values('2000-01-00')")
tk.MustQuery("SHOW WARNINGS").Check(testkit.Rows("Warning 1292 Incorrect date value: '2000-01-00'"))
tk.MustQuery("SHOW WARNINGS").Check(testkit.Rows("Warning 1292 Incorrect date value: '2000-01-00' for column 'a' at row 1"))
tk.MustQuery("SELECT a FROM dd").Check(testkit.Rows("0000-00-00"))

tk.MustExec("TRUNCATE TABLE dd")
Expand Down Expand Up @@ -5296,7 +5296,7 @@ func TestIssue19892(t *testing.T) {
tk.MustExec("TRUNCATE TABLE dd")
tk.MustGetErrMsg("INSERT INTO dd(b) VALUES ('2000-01-00')", "[table:1292]Incorrect datetime value: '2000-01-00' for column 'b' at row 1")
tk.MustExec("INSERT IGNORE INTO dd(b) VALUES ('2000-00-01')")
tk.MustQuery("SHOW WARNINGS").Check(testkit.Rows("Warning 1292 Incorrect datetime value: '2000-00-01'"))
tk.MustQuery("SHOW WARNINGS").Check(testkit.Rows("Warning 1292 Incorrect datetime value: '2000-00-01' for column 'b' at row 1"))
tk.MustQuery("SELECT b FROM dd").Check(testkit.Rows("0000-00-00 00:00:00"))

tk.MustExec("TRUNCATE TABLE dd")
Expand Down Expand Up @@ -5349,7 +5349,7 @@ func TestIssue19892(t *testing.T) {
tk.MustExec("TRUNCATE TABLE dd")
tk.MustGetErrMsg("INSERT INTO dd(b) VALUES ('2000-01-00')", "[table:1292]Incorrect datetime value: '2000-01-00' for column 'b' at row 1")
tk.MustExec("INSERT IGNORE INTO dd(b) VALUES ('2000-00-01')")
tk.MustQuery("SHOW WARNINGS").Check(testkit.Rows("Warning 1292 Incorrect datetime value: '2000-00-01'"))
tk.MustQuery("SHOW WARNINGS").Check(testkit.Rows("Warning 1292 Incorrect datetime value: '2000-00-01' for column 'b' at row 1"))
tk.MustQuery("SELECT b FROM dd").Check(testkit.Rows("0000-00-00 00:00:00"))

tk.MustExec("TRUNCATE TABLE dd")
Expand Down Expand Up @@ -7008,3 +7008,25 @@ func TestIssue33397(t *testing.T) {
result := tk.MustQuery("select compress(a) from t").Rows()
require.Equal(t, [][]interface{}{{""}, {""}}, result)
}

func TestIssue31569(t *testing.T) {
store, clean := testkit.CreateMockStore(t)
defer clean()

tk := testkit.NewTestKit(t, store)

tk.MustExec("use test")
tk.MustExec("drop table if exists t")
tk.MustExec("create table t (c int primary key, c2 enum('a', 'b'))")
tk.MustExec("set session sql_mode = ''")
tk.MustExec("insert into t values(4, 'a')")
tk.MustExec("insert into t values(4, 0) on duplicate key update c=values(c), c2=values(c2)")
// tidb produces two warnings here (when eval (4, 0) & values(c2)), which is slightly incompatible with mysql
tk.MustQuery("show warnings").Check([][]interface{}{
{"Warning", "1265", "Data truncated for column 'c2' at row 1"},
{"Warning", "1265", "Data truncated for column 'c2' at row 1"},
})
tk.MustExec("insert into t values(4, 'a') on duplicate key update c=values(c), c2=values(c2)")
tk.MustQuery("show warnings").Check([][]interface{}{})
tk.MustExec("drop table t")
}
5 changes: 1 addition & 4 deletions expression/scalar_function.go
Original file line number Diff line number Diff line change
Expand Up @@ -371,10 +371,7 @@ func (sf *ScalarFunction) Eval(row chunk.Row) (d types.Datum, err error) {
res, err = types.ParseEnum(tp.Elems, str, tp.Collate)
if ctx := sf.GetCtx(); ctx != nil {
if sc := ctx.GetSessionVars().StmtCtx; sc != nil {
if sc.TruncateAsWarning {
ctx.GetSessionVars().StmtCtx.AppendWarning(err)
err = nil
}
err = sc.HandleTruncate(err)
}
}
} else {
Expand Down

0 comments on commit ea7e708

Please sign in to comment.