mirror of
https://github.com/peridotbuild/peridot.git
synced 2024-12-26 20:20:55 +00:00
77 lines
No EOL
1.7 KiB
Markdown
Vendored
77 lines
No EOL
1.7 KiB
Markdown
Vendored
# pika
|
|
ORM-like SQL builder
|
|
|
|
# Features
|
|
* Any feature supported by sqlx
|
|
* Support for [AIP-160](https://google.aip.dev/160) filtering
|
|
* Utilities to help with [AIP-132](https://google.aip.dev/132) for List calls
|
|
* Support for determining filters based on Protobuf messages
|
|
* Automatically selecting columns in struct
|
|
* Count, Get, All, Create, Update, Delete and more.
|
|
* Support for simple joins
|
|
|
|
# Example
|
|
|
|
### Simple connect and Get
|
|
```go
|
|
package main
|
|
|
|
import (
|
|
"go.ciq.dev/pika"
|
|
"log"
|
|
)
|
|
|
|
type User struct {
|
|
PikaTableName string `pika:"users"`
|
|
ID int64 `db:"id" pika:"omitempty"`
|
|
Name string `db:"name"`
|
|
}
|
|
|
|
func main() {
|
|
psql, _ := pika.NewPostgreSQL("postgres://postgres:postgres@localhost:5432/test")
|
|
args := pika.NewArgs()
|
|
args.Set("id", 1)
|
|
qs := pika.Q[User](psql).Filter("id=:id").Args(args)
|
|
user, _ := qs.Get()
|
|
|
|
log.Println(user)
|
|
}
|
|
```
|
|
|
|
### AIP-160
|
|
```go
|
|
package main
|
|
|
|
import (
|
|
"go.ciq.dev/pika"
|
|
"log"
|
|
)
|
|
|
|
type Article struct {
|
|
PikaTableName string `pika:"users"`
|
|
ID int64 `db:"id" pika:"omitempty"`
|
|
CreatedAt time.Time `db:"created_at" pika:"omitempty"`
|
|
Title string `db:"title"`
|
|
Body string `db:"body"`
|
|
}
|
|
|
|
func main() {
|
|
psql, _ := pika.NewPostgreSQL("postgres://postgres:postgres@localhost:5432/test")
|
|
|
|
qs := pika.Q[Article](s.db)
|
|
// Get the following articles
|
|
// * The title MUST contain Hello and the body MUST contain World
|
|
// * If the above is not match, the article MUST be created before 2023-07-30
|
|
qs, err := qs.AIP160(`(title:"Hello" AND body:"World") OR (created_at < 2023-07-30T00:00:00Z)`, pika.AIPFilterOptions{})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
rows, err := qs.All()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
log.Println(rows)
|
|
}
|
|
``` |