Skip to main content

Query Module

Pagination, filter, and sort helpers for list operations.

Pagination

Offset/Limit

import "github.com/parevo/core/query"

page := query.DefaultPage().WithLimit(50).WithOffset(100)
limit, offset := page.SQL() // 50, 100

Cursor-based

cursor := query.DefaultCursor().WithAfter("last_id").WithLimit(20)

Filtering

var f query.Filters
f.Eq("status", "active")
f.Like("name", "%foo%")
f.In("tenant_id", []string{"t1", "t2"})
f.Gte("created_at", time.Now().Add(-24*time.Hour))

Operators: eq, ne, gt, gte, lt, lte, like, in, nin, null, nnull.

Sort

var s query.SortBy
s.Desc("created_at")
s.Asc("name")

SQL building

b := query.NewSQLBuilder(query.PlaceholderQ)  // MySQL
// b := query.NewSQLBuilder(query.PlaceholderDollar) // Postgres
where, args := b.Where(filters)
orderBy := b.OrderBy(sortBy)

// With whitelist (user input): use WhereSafe/OrderBySafe
b = query.NewSQLBuilder(query.PlaceholderQ).WithWhitelist([]string{"status", "name", "created_at"})
where, args, err := b.WhereSafe(filters)
// SELECT * FROM users WHERE status = ? AND name LIKE ? ORDER BY created_at DESC

Combined params

params := query.NewParams().
WithPage(query.DefaultPage().WithLimit(20)).
WithFilter(filters).
WithSort(sortBy)