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)) }