Simple search query builder on top of squirrel.
import (
"fmt"
"github.com/bsm/go-searchable"
"github.com/Masterminds/squirrel"
)
var builder = searchable.Builder{
{SQL: "users.name"},
{SQL: "users.age", Type: searchable.TypeInt},
{SQL: "users.code", Exact: true},
}
func main() {
search := builder.Search([]string{"alice", "45", "-admin"})
users := squirrel.Select("*").From("users").Where(search)
sql, args, _ := users.ToSql()
fmt.Println(sql)
// => SELECT * FROM users WHERE (((users.name IS NOT NULL AND users.name LIKE ?) OR (users.code IS NOT NULL AND users.code = ?)) AND ((users.name IS NOT NULL AND users.name LIKE ?) OR ...
fmt.Println(args)
// => [%alice% alice %45% 45 45 %admin% admin]
}