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)},