aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwmin0 <wmin0@cobinhood.com>2019-02-18 18:52:06 +0800
committerwmin0 <wmin0@hotmail.com>2019-02-19 15:58:02 +0800
commitf3ec2d7e0044a2b97dde3cfd0cf6be00d44daf76 (patch)
tree2f6c96b01b57272c65fc991590287ce94b0c84e7
parent748c9d4ca95e9655fd5f6db24829b87d4f6e8403 (diff)
downloaddexon-f3ec2d7e0044a2b97dde3cfd0cf6be00d44daf76.tar
dexon-f3ec2d7e0044a2b97dde3cfd0cf6be00d44daf76.tar.gz
dexon-f3ec2d7e0044a2b97dde3cfd0cf6be00d44daf76.tar.bz2
dexon-f3ec2d7e0044a2b97dde3cfd0cf6be00d44daf76.tar.lz
dexon-f3ec2d7e0044a2b97dde3cfd0cf6be00d44daf76.tar.xz
dexon-f3ec2d7e0044a2b97dde3cfd0cf6be00d44daf76.tar.zst
dexon-f3ec2d7e0044a2b97dde3cfd0cf6be00d44daf76.zip
core: vm: sqlvm: parser: toDecimal handle .0
To cover the pitfall of decimal.fromString, we need to add leading 0 at '^\.[0-9]+' case.
-rw-r--r--core/vm/sqlvm/parser/parser.go3
-rw-r--r--core/vm/sqlvm/parser/parser_test.go1
2 files changed, 4 insertions, 0 deletions
diff --git a/core/vm/sqlvm/parser/parser.go b/core/vm/sqlvm/parser/parser.go
index 76fa15cdc..2e882ea3c 100644
--- a/core/vm/sqlvm/parser/parser.go
+++ b/core/vm/sqlvm/parser/parser.go
@@ -95,6 +95,9 @@ func toUint(b []byte) (uint32, errors.ErrorCode) {
}
func toDecimal(b []byte) (decimal.Decimal, errors.ErrorCode) {
+ if len(b) > 0 && b[0] == byte('.') {
+ b = append([]byte{'0'}, b...)
+ }
d, err := decimal.NewFromString(string(b))
return d, convertDecimalError(err)
}
diff --git a/core/vm/sqlvm/parser/parser_test.go b/core/vm/sqlvm/parser/parser_test.go
index 77c3c16ff..bed734c60 100644
--- a/core/vm/sqlvm/parser/parser_test.go
+++ b/core/vm/sqlvm/parser/parser_test.go
@@ -22,6 +22,7 @@ func (s *ParserTestSuite) TestParse() {
// Test expr.
s.requireParseNoError(`select 1 + 2 * 3`)
+ s.requireParseNoError(`select .0`)
s.requireParseNoError(`select a(1 + 1)`)
s.requireParseNoError(`select hEx'12'`)
s.requireParseNoError(`select x'12'`)