converter/app/db/types.go
2025-06-22 22:09:21 -04:00

51 lines
800 B
Go

package db
import (
"database/sql"
"fmt"
"strings"
)
type QueryOptions struct {
Select []string
Where string
OrderBy string
Limit uint
Offset uint
}
func (o *QueryOptions) Build(conn *sql.DB, table string) (*sql.Stmt, error) {
sel := "*"
where := ""
orderby := ""
limit := ""
if o.Select != nil {
sel = strings.Join(o.Select, ", ")
}
if o.Where != "" {
where = fmt.Sprintf(
`WHERE
%v`, o.Where)
}
if o.OrderBy != "" {
orderby = fmt.Sprintf(
`ORDER BY
%v`, o.OrderBy)
}
if o.Limit != 0 && o.Offset != 0 {
limit = fmt.Sprintf(
`LIMIT %v OFFSET %v;`, o.Limit, o.Offset)
} else if o.Limit != 0 {
limit = fmt.Sprintf(
`LIMIT %v`, o.Limit)
}
return conn.Prepare(fmt.Sprintf(
`SELECT
%v
FROM
%v
%v
%v
%v;`, sel, table, where, orderby, limit))
}