spanner/spansql: parse 0X-prefixed number correctly
Add ` || strings.HasPrefix(p.s[i:], "0X")` to `if` condition for checking hexdecimal
number prefix simply.
Fixed #1544
Change-Id: I73153f01da26b6a106014f42b244b8174a2b9d9b
Reviewed-on: https://code-review.googlesource.com/c/gocloud/+/44352
Reviewed-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: David Symonds <dsymonds@golang.org>
diff --git a/spanner/spansql/parser.go b/spanner/spansql/parser.go
index acd2987..75a3381 100644
--- a/spanner/spansql/parser.go
+++ b/spanner/spansql/parser.go
@@ -237,7 +237,7 @@
[-]0—9+
hex_value:
- [-]0x{0—9|a—f|A—F}+
+ [-]0[xX]{0—9|a—f|A—F}+
(float64_value is not formally specified)
@@ -257,7 +257,7 @@
// https://cloud.google.com/spanner/docs/lexical#integer-literals
i++
}
- if strings.HasPrefix(p.s[i:], "0x") {
+ if strings.HasPrefix(p.s[i:], "0x") || strings.HasPrefix(p.s[i:], "0X") {
base = 16
i += 2
}
diff --git a/spanner/spansql/parser_test.go b/spanner/spansql/parser_test.go
index 4dbf995..8f123df 100644
--- a/spanner/spansql/parser_test.go
+++ b/spanner/spansql/parser_test.go
@@ -96,6 +96,8 @@
{`4.940656458412465441765687928682213723651e-324`, FloatLiteral(math.SmallestNonzeroFloat64)},
{`0xf00d`, IntegerLiteral(0xf00d)},
{`-0xbeef`, IntegerLiteral(-0xbeef)},
+ {`0XabCD`, IntegerLiteral(0xabcd)},
+ {`-0XBEEF`, IntegerLiteral(-0xbeef)},
{`123.456e-67`, FloatLiteral(123.456e-67)},
{`-123.456e-67`, FloatLiteral(-123.456e-67)},
{`.1E4`, FloatLiteral(0.1e4)},