From f79959722352ead48bfb3efb3001fddd3a56db65 Mon Sep 17 00:00:00 2001 From: Wes Widner Date: Wed, 13 Mar 2024 03:31:05 -0400 Subject: [PATCH] fix(spanner): add JSON_PARSE_ARRAY to funcNames slice (#9557) Co-authored-by: rahul2393 --- spanner/spansql/keywords.go | 3 +++ spanner/spansql/parser_test.go | 45 ++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/spanner/spansql/keywords.go b/spanner/spansql/keywords.go index c81606b4d6c..b270d134172 100644 --- a/spanner/spansql/keywords.go +++ b/spanner/spansql/keywords.go @@ -277,7 +277,10 @@ var funcNames = []string{ "PENDING_COMMIT_TIMESTAMP", // JSON functions. + "JSON_QUERY", "JSON_VALUE", + "JSON_QUERY_ARRAY", + "JSON_VALUE_ARRAY", // Bit functions. "BIT_COUNT", diff --git a/spanner/spansql/parser_test.go b/spanner/spansql/parser_test.go index 62430d98fdd..bb683634d8e 100644 --- a/spanner/spansql/parser_test.go +++ b/spanner/spansql/parser_test.go @@ -1431,6 +1431,21 @@ func TestParseDDL(t *testing.T) { }, }, }, + {`ALTER TABLE products ADD COLUMN item STRING(MAX) AS (JSON_QUERY(itemDetails, '$.itemDetails')) STORED`, &DDL{Filename: "filename", List: []DDLStmt{ + &AlterTable{ + Name: "products", + Alteration: AddColumn{Def: ColumnDef{ + Name: "item", + Type: Type{Base: String, Len: MaxLen}, + Position: line(1), + Generated: Func{ + Name: "JSON_QUERY", + Args: []Expr{ID("itemDetails"), StringLiteral("$.itemDetails")}, + }, + }}, + Position: line(1), + }, + }}}, {`ALTER TABLE products ADD COLUMN item STRING(MAX) AS (JSON_VALUE(itemDetails, '$.itemDetails')) STORED`, &DDL{Filename: "filename", List: []DDLStmt{ &AlterTable{ Name: "products", @@ -1446,6 +1461,36 @@ func TestParseDDL(t *testing.T) { Position: line(1), }, }}}, + {`ALTER TABLE products ADD COLUMN item ARRAY AS (JSON_QUERY_ARRAY(itemDetails, '$.itemDetails')) STORED`, &DDL{Filename: "filename", List: []DDLStmt{ + &AlterTable{ + Name: "products", + Alteration: AddColumn{Def: ColumnDef{ + Name: "item", + Type: Type{Base: String, Array: true, Len: MaxLen}, + Position: line(1), + Generated: Func{ + Name: "JSON_QUERY_ARRAY", + Args: []Expr{ID("itemDetails"), StringLiteral("$.itemDetails")}, + }, + }}, + Position: line(1), + }, + }}}, + {`ALTER TABLE products ADD COLUMN item ARRAY AS (JSON_VALUE_ARRAY(itemDetails, '$.itemDetails')) STORED`, &DDL{Filename: "filename", List: []DDLStmt{ + &AlterTable{ + Name: "products", + Alteration: AddColumn{Def: ColumnDef{ + Name: "item", + Type: Type{Base: String, Array: true, Len: MaxLen}, + Position: line(1), + Generated: Func{ + Name: "JSON_VALUE_ARRAY", + Args: []Expr{ID("itemDetails"), StringLiteral("$.itemDetails")}, + }, + }}, + Position: line(1), + }, + }}}, { `ALTER STATISTICS auto_20191128_14_47_22UTC SET OPTIONS (allow_gc=false)`, &DDL{