From b6c9284ca4f5ddc4eda75e58d77488d4a9d74fd1 Mon Sep 17 00:00:00 2001 From: wjhuang2016 Date: Wed, 20 Mar 2019 23:28:51 +0800 Subject: [PATCH 1/2] Fix int64_max --- yy_parser.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yy_parser.go b/yy_parser.go index d8094e6b6..3ab2c5901 100644 --- a/yy_parser.go +++ b/yy_parser.go @@ -205,7 +205,7 @@ func toInt(l yyLexer, lval *yySymType, str string) int { } switch { - case n < math.MaxInt64: + case n <= math.MaxInt64: lval.item = int64(n) default: lval.item = n From 868d570af5a589125f6844c332abf145a5c445c5 Mon Sep 17 00:00:00 2001 From: wjhuang2016 Date: Thu, 21 Mar 2019 12:30:27 +0800 Subject: [PATCH 2/2] Add test --- parser_test.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/parser_test.go b/parser_test.go index 95f92c372..59150d6bd 100755 --- a/parser_test.go +++ b/parser_test.go @@ -240,6 +240,24 @@ func (s *testParserSuite) TestSimple(c *C) { src = `insert into tb(v) (select v from tb);` _, err = parser.ParseOneStmt(src, "", "") c.Assert(err, IsNil) + + // for issue #9823 + src = "SELECT 9223372036854775807;" + st, err = parser.ParseOneStmt(src, "", "") + c.Assert(err, IsNil) + sel, ok := st.(*ast.SelectStmt) + c.Assert(ok, IsTrue) + expr := sel.Fields.Fields[0] + vExpr := expr.Expr.(*driver.ValueExpr) + c.Assert(vExpr.Kind(), Equals, types.KindInt64) + src = "SELECT 9223372036854775808;" + st, err = parser.ParseOneStmt(src, "", "") + c.Assert(err, IsNil) + sel, ok = st.(*ast.SelectStmt) + c.Assert(ok, IsTrue) + expr = sel.Fields.Fields[0] + vExpr = expr.Expr.(*driver.ValueExpr) + c.Assert(vExpr.Kind(), Equals, types.KindUint64) } type testCase struct {