Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/einride/spanner-aip-go
Go SDK for implementing Spanner persistance for resource-oriented APIs.
https://github.com/einride/spanner-aip-go
aip cloud-spanner go golang grpc spanner
Last synced: 3 months ago
JSON representation
Go SDK for implementing Spanner persistance for resource-oriented APIs.
- Host: GitHub
- URL: https://github.com/einride/spanner-aip-go
- Owner: einride
- License: mit
- Created: 2021-01-05T12:43:55.000Z (about 4 years ago)
- Default Branch: master
- Last Pushed: 2024-11-04T14:58:58.000Z (3 months ago)
- Last Synced: 2024-11-04T15:46:28.216Z (3 months ago)
- Topics: aip, cloud-spanner, go, golang, grpc, spanner
- Language: Go
- Homepage: https://pkg.go.dev/go.einride.tech/aip-spanner
- Size: 703 KB
- Stars: 8
- Watchers: 7
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Codeowners: .github/CODEOWNERS
- Security: SECURITY.md
Awesome Lists containing this project
README
# Spanner AIP Go
[![PkgGoDev](https://pkg.go.dev/badge/go.einride.tech/spanner-aip)](https://pkg.go.dev/go.einride.tech/spanner-aip)
[![GoReportCard](https://goreportcard.com/badge/go.einride.tech/spanner-aip)](https://goreportcard.com/report/go.einride.tech/spanner-aip)
[![Codecov](https://codecov.io/gh/einride/spanner-aip-go/branch/master/graph/badge.svg)](https://codecov.io/gh/einride/spanner-aip-go)Add-on to the [AIP Go SDK](https://github.com/einride/aip-go) for implementing
[Cloud Spanner](https://cloud.google.com/spanner) persistance for
[resource-oriented APIs](https://aip.dev).**Experimental**: This library is under active development and breaking changes
to config files, APIs and generated code are expected between releases.## Documentation
See [https://aip.dev](https://aip.dev) for the full AIP documentation and the
[Cloud Spanner documentation](https://cloud.google.com/spanner/docs).## Usage
### Installing
```bash
$ go get -u go.einride.tech/spanner-aip
```### Code generation config
Use a YAML config file to specify the schema to generate code from:
```yaml
databases:
- name: music
schema:
- "testdata/migrations/music/*.up.sql"
package:
name: musicdb
path: ./internal/examples/musicdb
```### Code generation
```bash
$ go run go.einride.tech/spanner-aip generate
```### Reading data
#### Get
```go
package mainimport (
"context""cloud.google.com/go/spanner"
"go.einride.tech/spanner-aip/internal/examples/musicdb"
)func main() {
ctx := context.Background()
client, err := spanner.NewClient(
ctx, "projects//instances//databases/",
)
if err != nil {
panic(err) // TODO: Handle error.
}
singer, err := musicdb.Singers(client.Single()).Get(ctx, musicdb.SingersKey{
SingerId: 42,
})
if err != nil {
panic(err) // TODO: Handle error.
}
_ = singer // TODO: Use singer.
}
```#### List
```go
package mainimport (
"context""cloud.google.com/go/spanner"
"cloud.google.com/go/spanner/spansql"
"go.einride.tech/spanner-aip/internal/examples/musicdb"
)func main() {
ctx := context.Background()
client, err := spanner.NewClient(
ctx, "projects//instances//databases/",
)
if err != nil {
panic(err) // TODO: Handle error.
}
// SELECT * FROM Singers
// WHERE LastName = "Sinatra"
// ORDER BY FirstName DESC
// LIMIT 5
// OFFSET 10
if err := musicdb.Singers(client.Single()).List(ctx, musicdb.ListQuery{
Where: spansql.ComparisonOp{
Op: spansql.Eq,
LHS: musicdb.Descriptor().Singers().LastName().ColumnID(),
RHS: spansql.StringLiteral("Sinatra"),
},
Order: []spansql.Order{
{Expr: musicdb.Descriptor().Singers().FirstName().ColumnID(), Desc: true},
},
Limit: 5,
Offset: 10,
}).Do(func(singer *musicdb.SingersRow) error {
_ = singer // TODO: Use singer.
return nil
}); err != nil {
panic(err) // TODO: Handle error.
}
}
```