Skip to content

Commit

Permalink
fix(spanner): Add ARRAY keywords to keywords (#10079)
Browse files Browse the repository at this point in the history
* fix(spanner): Add ARRAY keywords to keywords

* add tests for array functions. removed ARRAY_FILTER as lambda expressions aren't supported

---------

Co-authored-by: Sri Harsha CH <57220027+harshachinta@users.noreply.github.com>
  • Loading branch information
kai5263499 and harshachinta committed May 15, 2024
1 parent db8216e commit 8e675cd
Show file tree
Hide file tree
Showing 2 changed files with 169 additions and 0 deletions.
2 changes: 2 additions & 0 deletions spanner/spansql/keywords.go
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,9 @@ var funcNames = []string{
// Array functions.
"ARRAY",
"ARRAY_CONCAT",
"ARRAY_FIRST", "ARRAY_INCLUDES", "ARRAY_INCLUDES_ALL", "ARRAY_INCLUDES_ANY", "ARRAY_LAST",
"ARRAY_LENGTH",
"ARRAY_MAX", "ARRAY_MIN", "ARRAY_REVERSE", "ARRAY_SLICE", "ARRAY_TRANSFORM",
"ARRAY_TO_STRING",
"GENERATE_ARRAY", "GENERATE_DATE_ARRAY",
"OFFSET", "ORDINAL",
Expand Down
167 changes: 167 additions & 0 deletions spanner/spansql/parser_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1491,6 +1491,173 @@ func TestParseDDL(t *testing.T) {
Position: line(1),
},
}}},
{`ALTER TABLE products ADD COLUMN item ARRAY<STRING(MAX)> AS (ARRAY_INCLUDES(itemDetails, 'value1')) 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: "ARRAY_INCLUDES",
Args: []Expr{ID("itemDetails"), StringLiteral("value1")},
},
}},
Position: line(1),
},
}}},
{`ALTER TABLE products ADD COLUMN item STRING(MAX) AS (ARRAY_MAX(itemDetails)) STORED`, &DDL{Filename: "filename", List: []DDLStmt{
&AlterTable{
Name: "products",
Alteration: AddColumn{Def: ColumnDef{
Name: "item",
Type: Type{Base: String, Array: false, Len: MaxLen},
Position: line(1),
Generated: Func{
Name: "ARRAY_MAX",
Args: []Expr{ID("itemDetails")},
},
}},
Position: line(1),
},
}}},
{`ALTER TABLE products ADD COLUMN item STRING(MAX) AS (ARRAY_MIN(itemDetails)) STORED`, &DDL{Filename: "filename", List: []DDLStmt{
&AlterTable{
Name: "products",
Alteration: AddColumn{Def: ColumnDef{
Name: "item",
Type: Type{Base: String, Array: false, Len: MaxLen},
Position: line(1),
Generated: Func{
Name: "ARRAY_MIN",
Args: []Expr{ID("itemDetails")},
},
}},
Position: line(1),
},
}}},
{`ALTER TABLE products ADD COLUMN item ARRAY<STRING(MAX)> AS (ARRAY_REVERSE(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: "ARRAY_REVERSE",
Args: []Expr{ID("itemDetails")},
},
}},
Position: line(1),
},
}}},
{`ALTER TABLE products ADD COLUMN item ARRAY<STRING(MAX)> AS (ARRAY_SLICE(itemDetails, 1, 3)) 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: "ARRAY_SLICE",
Args: []Expr{ID("itemDetails"), IntegerLiteral(1), IntegerLiteral(3)},
},
}},
Position: line(1),
},
}}},
{`ALTER TABLE products ADD COLUMN item ARRAY<STRING(MAX)> AS (ARRAY_TRANSFORM(itemDetails, 'value1')) 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: "ARRAY_TRANSFORM",
Args: []Expr{ID("itemDetails"), StringLiteral("value1")},
},
}},
Position: line(1),
},
}}},
{`ALTER TABLE products ADD COLUMN item ARRAY<STRING(MAX)> AS (ARRAY_FIRST(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: "ARRAY_FIRST",
Args: []Expr{ID("itemDetails")},
},
}},
Position: line(1),
},
}}},

{`ALTER TABLE products ADD COLUMN item ARRAY<STRING(MAX)> AS (ARRAY_INCLUDES(itemDetails, 'value1')) 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: "ARRAY_INCLUDES",
Args: []Expr{ID("itemDetails"), StringLiteral("value1")},
},
}},
Position: line(1),
},
}}},

{`ALTER TABLE products ADD COLUMN item ARRAY<STRING(MAX)> AS (ARRAY_INCLUDES_ALL(itemDetails, ["1", "2"])) 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: "ARRAY_INCLUDES_ALL",
Args: []Expr{ID("itemDetails"), Array{StringLiteral("1"), StringLiteral("2")}},
},
}},
Position: line(1),
},
}}},
{`ALTER TABLE products ADD COLUMN item ARRAY<STRING(MAX)> AS (ARRAY_INCLUDES_ANY(itemDetails, ["1", "2"])) 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: "ARRAY_INCLUDES_ANY",
Args: []Expr{ID("itemDetails"), Array{StringLiteral("1"), StringLiteral("2")}},
},
}},
Position: line(1),
},
}}},
{`ALTER TABLE products ADD COLUMN item ARRAY<STRING(MAX)> AS (ARRAY_LAST(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: "ARRAY_LAST",
Args: []Expr{ID("itemDetails")},
},
}},
Position: line(1),
},
}}},
{
`ALTER STATISTICS auto_20191128_14_47_22UTC SET OPTIONS (allow_gc=false)`,
&DDL{
Expand Down

0 comments on commit 8e675cd

Please sign in to comment.