Skip to content

Commit

Permalink
types: fix delete error when convert string to float or int (#10861)
Browse files Browse the repository at this point in the history
  • Loading branch information
DQinYuan authored and zz-jason committed Jul 16, 2019
1 parent f772318 commit fcc15b1
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 0 deletions.
1 change: 1 addition & 0 deletions executor/executor_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -451,6 +451,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(context.Background(), tt.data1, tt.data2)
c.Assert(err1, IsNil)
c.Assert(reachLimit, IsFalse)
Expand Down
4 changes: 4 additions & 0 deletions types/convert.go
Original file line number Diff line number Diff line change
Expand Up @@ -581,6 +581,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
Expand Down
23 changes: 23 additions & 0 deletions types/convert_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down

0 comments on commit fcc15b1

Please sign in to comment.