de8f0bc26e
- Previously each call to qm.Load would overwrite your eager loading statement. I think this was deliberate at one point but it's pretty inconsistent. If we need to overwrite we can call queries.SetLoad()
145 lines
4.1 KiB
Go
145 lines
4.1 KiB
Go
package qm
|
|
|
|
import "github.com/vattle/sqlboiler/queries"
|
|
|
|
// QueryMod to modify the query object
|
|
type QueryMod func(q *queries.Query)
|
|
|
|
// Apply the query mods to the Query object
|
|
func Apply(q *queries.Query, mods ...QueryMod) {
|
|
for _, mod := range mods {
|
|
mod(q)
|
|
}
|
|
}
|
|
|
|
// SQL allows you to execute a plain SQL statement
|
|
func SQL(sql string, args ...interface{}) QueryMod {
|
|
return func(q *queries.Query) {
|
|
queries.SetSQL(q, sql, args...)
|
|
}
|
|
}
|
|
|
|
// Load allows you to specify foreign key relationships to eager load
|
|
// for your query. Passed in relationships need to be in the format
|
|
// MyThing or MyThings.
|
|
// Relationship name plurality is important, if your relationship is
|
|
// singular, you need to specify the singular form and vice versa.
|
|
func Load(relationships ...string) QueryMod {
|
|
return func(q *queries.Query) {
|
|
queries.AppendLoad(q, relationships...)
|
|
}
|
|
}
|
|
|
|
// InnerJoin on another table
|
|
func InnerJoin(clause string, args ...interface{}) QueryMod {
|
|
return func(q *queries.Query) {
|
|
queries.AppendInnerJoin(q, clause, args...)
|
|
}
|
|
}
|
|
|
|
// Select specific columns opposed to all columns
|
|
func Select(columns ...string) QueryMod {
|
|
return func(q *queries.Query) {
|
|
queries.AppendSelect(q, columns...)
|
|
}
|
|
}
|
|
|
|
// Where allows you to specify a where clause for your statement
|
|
func Where(clause string, args ...interface{}) QueryMod {
|
|
return func(q *queries.Query) {
|
|
queries.AppendWhere(q, clause, args...)
|
|
}
|
|
}
|
|
|
|
// And allows you to specify a where clause separated by an AND for your statement
|
|
// And is a duplicate of the Where function, but allows for more natural looking
|
|
// query mod chains, for example: (Where("a=?"), And("b=?"), Or("c=?")))
|
|
func And(clause string, args ...interface{}) QueryMod {
|
|
return func(q *queries.Query) {
|
|
queries.AppendWhere(q, clause, args...)
|
|
}
|
|
}
|
|
|
|
// Or allows you to specify a where clause separated by an OR for your statement
|
|
func Or(clause string, args ...interface{}) QueryMod {
|
|
return func(q *queries.Query) {
|
|
queries.AppendWhere(q, clause, args...)
|
|
queries.SetLastWhereAsOr(q)
|
|
}
|
|
}
|
|
|
|
// WhereIn allows you to specify a "x IN (set)" clause for your where statement
|
|
// Example clauses: "column in ?", "(column1,column2) in ?"
|
|
func WhereIn(clause string, args ...interface{}) QueryMod {
|
|
return func(q *queries.Query) {
|
|
queries.AppendIn(q, clause, args...)
|
|
}
|
|
}
|
|
|
|
// AndIn allows you to specify a "x IN (set)" clause separated by an AndIn
|
|
// for your where statement. AndIn is a duplicate of the WhereIn function, but
|
|
// allows for more natural looking query mod chains, for example:
|
|
// (WhereIn("column1 in ?"), AndIn("column2 in ?"), OrIn("column3 in ?"))
|
|
func AndIn(clause string, args ...interface{}) QueryMod {
|
|
return func(q *queries.Query) {
|
|
queries.AppendIn(q, clause, args...)
|
|
}
|
|
}
|
|
|
|
// OrIn allows you to specify an IN clause separated by
|
|
// an OR for your where statement
|
|
func OrIn(clause string, args ...interface{}) QueryMod {
|
|
return func(q *queries.Query) {
|
|
queries.AppendIn(q, clause, args...)
|
|
queries.SetLastInAsOr(q)
|
|
}
|
|
}
|
|
|
|
// GroupBy allows you to specify a group by clause for your statement
|
|
func GroupBy(clause string) QueryMod {
|
|
return func(q *queries.Query) {
|
|
queries.AppendGroupBy(q, clause)
|
|
}
|
|
}
|
|
|
|
// OrderBy allows you to specify a order by clause for your statement
|
|
func OrderBy(clause string) QueryMod {
|
|
return func(q *queries.Query) {
|
|
queries.AppendOrderBy(q, clause)
|
|
}
|
|
}
|
|
|
|
// Having allows you to specify a having clause for your statement
|
|
func Having(clause string, args ...interface{}) QueryMod {
|
|
return func(q *queries.Query) {
|
|
queries.AppendHaving(q, clause, args...)
|
|
}
|
|
}
|
|
|
|
// From allows to specify the table for your statement
|
|
func From(from string) QueryMod {
|
|
return func(q *queries.Query) {
|
|
queries.AppendFrom(q, from)
|
|
}
|
|
}
|
|
|
|
// Limit the number of returned rows
|
|
func Limit(limit int) QueryMod {
|
|
return func(q *queries.Query) {
|
|
queries.SetLimit(q, limit)
|
|
}
|
|
}
|
|
|
|
// Offset into the results
|
|
func Offset(offset int) QueryMod {
|
|
return func(q *queries.Query) {
|
|
queries.SetOffset(q, offset)
|
|
}
|
|
}
|
|
|
|
// For inserts a concurrency locking clause at the end of your statement
|
|
func For(clause string) QueryMod {
|
|
return func(q *queries.Query) {
|
|
queries.SetFor(q, clause)
|
|
}
|
|
}
|