diff --git a/executor/executor_test.go b/executor/executor_test.go index b02fbadbabbbd..c9c2b162b1901 100644 --- a/executor/executor_test.go +++ b/executor/executor_test.go @@ -431,6 +431,7 @@ func checkCases(tests []testCase, ld *executor.LoadDataInfo, ctx.GetSessionVars().StmtCtx.DupKeyAsWarning = true ctx.GetSessionVars().StmtCtx.BadNullAsWarning = true ctx.GetSessionVars().StmtCtx.InLoadDataStmt = true + ctx.GetSessionVars().StmtCtx.InDeleteStmt = false data, reachLimit, err1 := ld.InsertData(tt.data1, tt.data2) c.Assert(err1, IsNil) c.Assert(reachLimit, IsFalse) diff --git a/types/convert.go b/types/convert.go index 5e16ad43ac2d1..7b4925a544eb7 100644 --- a/types/convert.go +++ b/types/convert.go @@ -580,6 +580,10 @@ func ConvertJSONToDecimal(sc *stmtctx.StatementContext, j json.BinaryJSON) (*MyD // getValidFloatPrefix gets prefix of string which can be successfully parsed as float. func getValidFloatPrefix(sc *stmtctx.StatementContext, s string) (valid string, err error) { + if sc.InDeleteStmt && s == "" { + return "0", nil + } + var ( sawDot bool sawDigit bool diff --git a/types/convert_test.go b/types/convert_test.go index c591650952056..c9665a55f8603 100644 --- a/types/convert_test.go +++ b/types/convert_test.go @@ -461,6 +461,29 @@ func (s *testTypeConvertSuite) TestStrToNum(c *C) { testStrToFloat(c, "1e649", math.MaxFloat64, false, nil) testStrToFloat(c, "-1e649", -math.MaxFloat64, true, ErrTruncatedWrongVal) testStrToFloat(c, "-1e649", -math.MaxFloat64, false, nil) + + // for issue #10806 + testDeleteEmptyStringError(c) +} + +func testDeleteEmptyStringError(c *C) { + sc := new(stmtctx.StatementContext) + sc.InDeleteStmt = true + + str := "" + expect := 0 + + val, err := StrToInt(sc, str) + c.Assert(err, IsNil) + c.Assert(val, Equals, int64(expect)) + + val1, err := StrToUint(sc, str) + c.Assert(err, IsNil) + c.Assert(val1, Equals, uint64(expect)) + + val2, err := StrToFloat(sc, str) + c.Assert(err, IsNil) + c.Assert(val2, Equals, float64(expect)) } func (s *testTypeConvertSuite) TestFieldTypeToStr(c *C) {