Files
kubesphere/vendor/github.com/gocraft/dbr/select_builder.go
runzexia 5a6f51d775 devops tenant api
Signed-off-by: runzexia <runzexia@yunify.com>
2019-04-24 17:35:31 +08:00

174 lines
3.9 KiB
Go

package dbr
import "context"
type SelectBuilder struct {
runner
EventReceiver
Dialect Dialect
*SelectStmt
}
func prepareSelect(a []string) []interface{} {
b := make([]interface{}, len(a))
for i := range a {
b[i] = a[i]
}
return b
}
func (sess *Session) Select(column ...string) *SelectBuilder {
return &SelectBuilder{
runner: sess,
EventReceiver: sess,
Dialect: sess.Dialect,
SelectStmt: Select(prepareSelect(column)...),
}
}
func (tx *Tx) Select(column ...string) *SelectBuilder {
return &SelectBuilder{
runner: tx,
EventReceiver: tx,
Dialect: tx.Dialect,
SelectStmt: Select(prepareSelect(column)...),
}
}
func (sess *Session) SelectBySql(query string, value ...interface{}) *SelectBuilder {
return &SelectBuilder{
runner: sess,
EventReceiver: sess,
Dialect: sess.Dialect,
SelectStmt: SelectBySql(query, value...),
}
}
func (tx *Tx) SelectBySql(query string, value ...interface{}) *SelectBuilder {
return &SelectBuilder{
runner: tx,
EventReceiver: tx,
Dialect: tx.Dialect,
SelectStmt: SelectBySql(query, value...),
}
}
// DEPRECATED: use LoadOne instead
func (b *SelectBuilder) LoadStruct(value interface{}) error {
return b.LoadOne(value)
}
// DEPRECATED: use Load instead
func (b *SelectBuilder) LoadStructs(value interface{}) (int, error) {
return b.Load(value)
}
// DEPRECATED: use LoadOne instead
func (b *SelectBuilder) LoadValue(value interface{}) error {
return b.LoadOne(value)
}
// DEPRECATED: use Load instead
func (b *SelectBuilder) LoadValues(value interface{}) (int, error) {
return b.Load(value)
}
func (b *SelectBuilder) LoadOneContext(ctx context.Context, value interface{}) error {
count, err := query(ctx, b.runner, b.EventReceiver, b, b.Dialect, value)
if err != nil {
return err
}
if count == 0 {
return ErrNotFound
}
return nil
}
func (b *SelectBuilder) LoadOne(value interface{}) error {
return b.LoadOneContext(context.Background(), value)
}
func (b *SelectBuilder) LoadContext(ctx context.Context, value interface{}) (int, error) {
return query(ctx, b.runner, b.EventReceiver, b, b.Dialect, value)
}
func (b *SelectBuilder) Load(value interface{}) (int, error) {
return b.LoadContext(context.Background(), value)
}
func (b *SelectBuilder) Join(table, on interface{}) *SelectBuilder {
b.SelectStmt.Join(table, on)
return b
}
func (b *SelectBuilder) LeftJoin(table, on interface{}) *SelectBuilder {
b.SelectStmt.LeftJoin(table, on)
return b
}
func (b *SelectBuilder) RightJoin(table, on interface{}) *SelectBuilder {
b.SelectStmt.RightJoin(table, on)
return b
}
func (b *SelectBuilder) FullJoin(table, on interface{}) *SelectBuilder {
b.SelectStmt.FullJoin(table, on)
return b
}
func (b *SelectBuilder) Distinct() *SelectBuilder {
b.SelectStmt.Distinct()
return b
}
func (b *SelectBuilder) From(table interface{}) *SelectBuilder {
b.SelectStmt.From(table)
return b
}
func (b *SelectBuilder) GroupBy(col ...string) *SelectBuilder {
b.SelectStmt.GroupBy(col...)
return b
}
func (b *SelectBuilder) Having(query interface{}, value ...interface{}) *SelectBuilder {
b.SelectStmt.Having(query, value...)
return b
}
func (b *SelectBuilder) Limit(n uint64) *SelectBuilder {
b.SelectStmt.Limit(n)
return b
}
func (b *SelectBuilder) Offset(n uint64) *SelectBuilder {
b.SelectStmt.Offset(n)
return b
}
func (b *SelectBuilder) OrderDir(col string, isAsc bool) *SelectBuilder {
if isAsc {
b.SelectStmt.OrderAsc(col)
} else {
b.SelectStmt.OrderDesc(col)
}
return b
}
func (b *SelectBuilder) Paginate(page, perPage uint64) *SelectBuilder {
b.Limit(perPage)
b.Offset((page - 1) * perPage)
return b
}
func (b *SelectBuilder) OrderBy(col string) *SelectBuilder {
b.SelectStmt.Order = append(b.SelectStmt.Order, Expr(col))
return b
}
func (b *SelectBuilder) Where(query interface{}, value ...interface{}) *SelectBuilder {
b.SelectStmt.Where(query, value...)
return b
}