google-cloud-go icon indicating copy to clipboard operation
google-cloud-go copied to clipboard

spanner/spansql: spansql.ParseDDL is fialing on a valid query syntax

Open Arsen-Zhakypbek-Uulu opened this issue 1 year ago • 2 comments

Client Spanner

Go Environment go version go1.20.4 darwin/arm64 Code

schema.sql file
CREATE VIEW ListDeployments
SQL SECURITY INVOKER AS
SELECT
    user_id,
    ARRAY_AGG(STRUCT<first_name STRING, last_name STRING>(first_name, last_name)) AS user_details
FROM Users;

func main() {
	filename := "schema.sql"
	bs, err := os.ReadFile(filename)
	if err != nil {
		log.Println("error reading schema file: %w", err)
	}

	ddl, err := spansql.ParseDDL(filename, string(bs))
	if err != nil {
		log.Printf("error parsing schema file: %v\n", err)
	}

	if ddl != nil {
		log.Println(ddl.List)
	}
}

Expected behavior Should be able to parse the DDL

Actual behavior 2024/03/20 17:41:27 error parsing schema file: schema.sql:5: unexpected token "STRING"

Additional context spanner client lib version: cloud.google.com/go/spanner v1.59.0

If I create the view with Spanner Studio no issue

Arsen-Zhakypbek-Uulu avatar Mar 20 '24 22:03 Arsen-Zhakypbek-Uulu

Any updates here?

Arsen-Zhakypbek-Uulu avatar Mar 22 '24 14:03 Arsen-Zhakypbek-Uulu

Thanks @Arsen-Zhakypbek-Uulu, struct types is not supported in aggregate functions, more limitations can be found here https://github.com/googleapis/google-cloud-go/tree/main/spanner/spannertest, its recommended to use https://cloud.google.com/spanner/docs/emulator for local validation of spanner sql.

Feel free to raise PR for struct support, but we are are right now tagging parser feature request as p2 or p3 as of now.

rahul2393 avatar Apr 05 '24 06:04 rahul2393