51 lines
800 B
Go
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))
|
|
}
|