ctrliq / pika

ORM style SQL builder with AIP-160 Support
Apache License 2.0
7 stars 4 forks source link

pika

ORM-like SQL builder inspired by kayak/pypika

Features

Example

Simple connect and Get

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

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)
}