https://github.com/bsm/go-searchable
https://github.com/bsm/go-searchable
Last synced: about 1 year ago
JSON representation
- Host: GitHub
- URL: https://github.com/bsm/go-searchable
- Owner: bsm
- License: apache-2.0
- Created: 2019-11-04T18:47:58.000Z (over 6 years ago)
- Default Branch: main
- Last Pushed: 2022-05-17T12:06:07.000Z (about 4 years ago)
- Last Synced: 2025-04-13T05:54:46.025Z (about 1 year ago)
- Language: Go
- Size: 22.5 KB
- Stars: 0
- Watchers: 2
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Go Searchable
[](https://pkg.go.dev/github.com/bsm/go-searchable)[](https://opensource.org/licenses/Apache-2.0)
Simple search query builder, compatible with [squirrel](https://github.com/Masterminds/squirrel).
## Usage
```go
import (
"fmt"
"github.com/bsm/go-searchable"
"github.com/Masterminds/squirrel"
)
var builder = searchable.Builder{
Fields: []searchable.Field{
{SQL: "users.name"},
{SQL: "users.age", Type: searchable.FieldInt},
{SQL: "users.code", Match: searchable.MatchExact},
},
}
func main() {
search := builder.Search([]searchable.Token{
{Term: "alice"},
{Term: "45"},
{Term: "admin", Negate: true},
})
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 $1) OR (users.code IS NOT NULL AND users.code = $2)) AND ((users.name IS NOT NULL AND users.name LIKE $3) OR ...
fmt.Println(args)
// => [%alice% alice %45% 45 45 %admin% admin]
}
```