GitHub - reddec/gsql: Tiny wrapper around SQLX for Generic SQL queries
source link: https://github.com/reddec/gsql
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Generic SQL
Tiny wrapper built around standard Go SQL library and SQLx with generic support.
Installation
go get -v github.com/reddec/gsql
Examples
Schema for the example
CREATE TABLE book
(
id INTEGER NOT NULL PRIMARY KEY,
title TEXT NOT NULL,
author TEXT,
year INTEGER NOT NULL
)
Type in Go
type Book struct {
ID int64
Title string
Author string
Year int
}
Initialization
// ...
conn, err := sqlx.Open("sqlite", "database.sqlite")
// ...
Get single book by ID
book, err := gsql.Get[Book](ctx, conn, "SELECT * FROM book WHERE id = ?", 1234)
List books by author
books, err := gsql.List[Book](ctx, conn, "SELECT * FROM book WHERE author = ?", "O'Really")
Iterate
Iterate each book one by one
iter := gsql.Iterate[Book](ctx, conn, "SELECT * FROM book LIMIT ?", 100)
defer iter.Close()
for iter.Next() {
book, err := iter.Get()
// ...
}
if iter.Err() != nil {
panic(iter.Err()) // use normal handling in real application
}
LazyGet
Save query which returns one object and execute it later
getBooks := gsql.LazyGet[Book](conn, "SELECT * FROM book WHERE id = ?", 123)
// ...
book, err := getBooks(ctx) // can be called many times
LazyList
Save query which returns multiple objects and execute it later
listBooks := gsql.LazyList[Book](conn, "SELECT * FROM book")
// ...
books, err := listBooks(ctx) // can be called many times
CachedGet
Save query which returns one object and execute it later. Once query executed, result will be cached until Invalidate
or Refresh
called.
cache := gsql.CachedGet[Book](conn, "SELECT * FROM book WHERE id = ?", 123)
book, err := cache.Get(ctx) // first time it will execute the query
//...
book2, err := cache.Get(ctx) // second time it will return cached information
//...
cache.Invalidate() // reset cache, the following Get will again execute the query
CachedList
Save query which returns multiple objects and execute it later. Once query executed, result will be cached
until Invalidate
or Refresh
called.
cache := gsql.CachedList[Book](conn, "SELECT * FROM book WHERE id = ?", 123)
books, err := cache.Get(ctx) // first time it will execute the query
//...
books2, err := cache.Get(ctx) // second time it will return cached information
//...
cache.Invalidate() // reset cache, the following Get will again execute the query
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK