Skip to content

Commit

Permalink
types: fix the bug about the wrong query result for decimal type (#22507
Browse files Browse the repository at this point in the history
)
  • Loading branch information
jyz0309 committed Mar 9, 2021
1 parent 7c552f5 commit aa82a03
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 0 deletions.
13 changes: 13 additions & 0 deletions executor/write_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3901,6 +3901,19 @@ func (s *testSerialSuite) TestIssue20840(c *C) {
tk.MustExec("drop table t1")
}

func (s *testSerialSuite) TestIssue22496(c *C) {
tk := testkit.NewTestKit(c, s.store)
tk.MustExec("use test")
tk.MustExec("drop table if exists t12")
tk.MustExec("create table t12(d decimal(15,2));")
_, err := tk.Exec("insert into t12 values('1,9999.00')")
c.Assert(err, NotNil)
tk.MustExec("set sql_mode=''")
tk.MustExec("insert into t12 values('1,999.00');")
tk.MustQuery("SELECT * FROM t12;").Check(testkit.Rows("1.00"))
tk.MustExec("drop table t12")
}

func (s *testSuite) TestEqualDatumsAsBinary(c *C) {
tests := []struct {
a []interface{}
Expand Down
9 changes: 9 additions & 0 deletions types/convert_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,15 @@ func (s *testTypeConvertSuite) TestConvertType(c *C) {
v, err = Convert("-10000", ft)
c.Assert(terror.ErrorEqual(err, ErrOverflow), IsTrue, Commentf("err %v", err))
c.Assert(v.(*MyDecimal).String(), Equals, "-9999.9999")
v, err = Convert("1,999.00", ft)
c.Assert(terror.ErrorEqual(err, ErrBadNumber), IsTrue, Commentf("err %v", err))
c.Assert(v.(*MyDecimal).String(), Equals, "1.0000")
v, err = Convert("1,999,999.00", ft)
c.Assert(terror.ErrorEqual(err, ErrBadNumber), IsTrue, Commentf("err %v", err))
c.Assert(v.(*MyDecimal).String(), Equals, "1.0000")
v, err = Convert("199.00 ", ft)
c.Assert(err, IsNil)
c.Assert(v.(*MyDecimal).String(), Equals, "199.0000")

// Test Datum.ToDecimal with bad number.
d := NewDatum("hello")
Expand Down
7 changes: 7 additions & 0 deletions types/mydecimal.go
Original file line number Diff line number Diff line change
Expand Up @@ -389,6 +389,8 @@ func (d *MyDecimal) ToString() (str []byte) {

// FromString parses decimal from string.
func (d *MyDecimal) FromString(str []byte) error {
// strErr is used to check str is bad number or not
var strErr error
for i := 0; i < len(str); i++ {
if !isSpace(str[i]) {
str = str[i:]
Expand Down Expand Up @@ -419,6 +421,8 @@ func (d *MyDecimal) FromString(str []byte) error {
endIdx++
}
digitsFrac = endIdx - strIdx - 1
} else if strIdx < len(str) && (str[strIdx] != 'e' && str[strIdx] != 'E' && str[strIdx] != ' ') {
strErr = ErrBadNumber
} else {
digitsFrac = 0
endIdx = strIdx
Expand Down Expand Up @@ -519,6 +523,9 @@ func (d *MyDecimal) FromString(str []byte) error {
d.negative = false
}
d.resultFrac = d.digitsFrac
if strErr != nil {
return strErr
}
return err
}

Expand Down

0 comments on commit aa82a03

Please sign in to comment.