-
Notifications
You must be signed in to change notification settings - Fork 28
Labels
priority: p3Desirable enhancement or fix. May not be included in next release.Desirable enhancement or fix. May not be included in next release.type: feature request‘Nice-to-have’ improvement, new feature or different behavior or design.‘Nice-to-have’ improvement, new feature or different behavior or design.
Description
https://pkg.go.dev/cloud.google.com/go/spanner supports structs https://pkg.go.dev/cloud.google.com/go/spanner#hdr-Structs, however this feature is not exposed directly in go-sql-spanner.
For example the following code fails due to the check in
Line 748 in 94bc417
| func checkIsValidType(v driver.Value) bool { |
package main
import (
"context"
"database/sql"
"fmt"
_ "github.com/googleapis/go-sql-spanner"
"github.com/googleapis/go-sql-spanner/examples"
)
func helloWorld(projectId, instanceId, databaseId string) error {
ctx := context.Background()
db, err := sql.Open("spanner", fmt.Sprintf("projects/%s/instances/%s/databases/%s", projectId, instanceId, databaseId))
if err != nil {
return fmt.Errorf("failed to open database connection: %v\n", err)
}
defer db.Close()
type Entry struct {
ID int64
Name string
}
entries := []Entry{
{ID: 0, Name: "Hello"},
{ID: 1, Name: "World"},
}
rows, err := db.QueryContext(ctx, "SELECT id, name FROM UNNEST(@entries)", entries)
if err != nil {
return fmt.Errorf("failed to execute query: %v", err)
}
defer rows.Close()
for rows.Next() {
var id int64
var name string
if err := rows.Scan(&id, &name); err != nil {
return fmt.Errorf("failed to scan row values: %v", err)
}
fmt.Printf("%v %v\n", id, name)
}
if err := rows.Err(); err != nil {
return fmt.Errorf("failed to execute query: %v", err)
}
return nil
}
func main() {
examples.RunSampleOnEmulator(helloWorld)
}
If I change changeIsValidType to always return true, then the code above passes without problems.
There's probably a workaround for this, but I haven't, yet discovered it. Nevertheless, it would be nice to support struct and array of struct directly in go-sql-spanner.
Metadata
Metadata
Assignees
Labels
priority: p3Desirable enhancement or fix. May not be included in next release.Desirable enhancement or fix. May not be included in next release.type: feature request‘Nice-to-have’ improvement, new feature or different behavior or design.‘Nice-to-have’ improvement, new feature or different behavior or design.