From a6df7f57200fef85125619d890486b6834d2a3bf Mon Sep 17 00:00:00 2001 From: Dan Hansen Date: Wed, 28 Feb 2024 11:16:27 -0800 Subject: [PATCH] [String] Use direct string value from ZetaSQL (#29) --- internal/encoder.go | 7 +++---- query_test.go | 9 +++++++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/internal/encoder.go b/internal/encoder.go index 38d68bd..aa6aa16 100644 --- a/internal/encoder.go +++ b/internal/encoder.go @@ -151,7 +151,9 @@ func ValueFromZetaSQLValue(v types.Value) (Value, error) { return boolValueFromLiteral(v.SQLLiteral(0)) case types.FLOAT, types.DOUBLE: return floatValueFromLiteral(v.SQLLiteral(0)) - case types.STRING, types.ENUM: + case types.STRING: + return StringValue(v.StringValue()), nil + case types.ENUM: return stringValueFromLiteral(v.SQLLiteral(0)) case types.BYTES: return bytesValueFromLiteral(v.SQLLiteral(0)) @@ -206,9 +208,6 @@ func floatValueFromLiteral(lit string) (FloatValue, error) { } func stringValueFromLiteral(lit string) (StringValue, error) { - if strings.HasPrefix(lit, `'`) { - return StringValue(strings.Trim(lit, `'`)), nil - } v, err := strconv.Unquote(lit) if err != nil { return "", fmt.Errorf("failed to unquote from string literal: %w", err) diff --git a/query_test.go b/query_test.go index 45a1db4..2e9e668 100644 --- a/query_test.go +++ b/query_test.go @@ -3716,6 +3716,15 @@ WITH markdown AS ( {"

Another heading

"}, }, }, + // Regression tests for goccy/go-zetasqlite#178 + { + name: "regexp_replace quoted", + query: `SELECT REGEXP_REPLACE('"quote123"', r'["\d]', '')`, + expectedRows: [][]interface{}{ + {"quote"}, + }, + }, + { name: "regexp_replace null", query: `SELECT REGEXP_REPLACE(NULL, r'\:\d\d\d', ''), REGEXP_REPLACE('abc', NULL, ''), REGEXP_REPLACE('abc', r'\:\d\d\d', NULL)`,