mirror of
https://gitee.com/johng/gf.git
synced 2024-11-30 03:07:45 +08:00
94 lines
4.7 KiB
Go
94 lines
4.7 KiB
Go
// Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
|
|
//
|
|
// This Source Code Form is subject to the terms of the MIT License.
|
|
// If a copy of the MIT was not distributed with this file,
|
|
// You can obtain one at https://github.com/gogf/gf.
|
|
|
|
package gdb
|
|
|
|
// WhereOrPrefix performs as WhereOr, but it adds prefix to each field in where statement.
|
|
// Eg:
|
|
// WhereOrPrefix("order", "status", "paid") => WHERE xxx OR (`order`.`status`='paid')
|
|
// WhereOrPrefix("order", struct{Status:"paid", "channel":"bank"}) => WHERE xxx OR (`order`.`status`='paid' AND `order`.`channel`='bank')
|
|
func (b *WhereBuilder) WhereOrPrefix(prefix string, where interface{}, args ...interface{}) *WhereBuilder {
|
|
where, args = b.convertWhereBuilder(where, args)
|
|
|
|
builder := b.getBuilder()
|
|
builder.whereHolder = append(builder.whereHolder, WhereHolder{
|
|
Type: whereHolderTypeDefault,
|
|
Operator: whereHolderOperatorOr,
|
|
Where: where,
|
|
Args: args,
|
|
Prefix: prefix,
|
|
})
|
|
return builder
|
|
}
|
|
|
|
// WhereOrPrefixLT builds `prefix.column < value` statement in `OR` conditions..
|
|
func (b *WhereBuilder) WhereOrPrefixLT(prefix string, column string, value interface{}) *WhereBuilder {
|
|
return b.WhereOrf(`%s.%s < ?`, b.model.QuoteWord(prefix), b.model.QuoteWord(column), value)
|
|
}
|
|
|
|
// WhereOrPrefixLTE builds `prefix.column <= value` statement in `OR` conditions..
|
|
func (b *WhereBuilder) WhereOrPrefixLTE(prefix string, column string, value interface{}) *WhereBuilder {
|
|
return b.WhereOrf(`%s.%s <= ?`, b.model.QuoteWord(prefix), b.model.QuoteWord(column), value)
|
|
}
|
|
|
|
// WhereOrPrefixGT builds `prefix.column > value` statement in `OR` conditions..
|
|
func (b *WhereBuilder) WhereOrPrefixGT(prefix string, column string, value interface{}) *WhereBuilder {
|
|
return b.WhereOrf(`%s.%s > ?`, b.model.QuoteWord(prefix), b.model.QuoteWord(column), value)
|
|
}
|
|
|
|
// WhereOrPrefixGTE builds `prefix.column >= value` statement in `OR` conditions..
|
|
func (b *WhereBuilder) WhereOrPrefixGTE(prefix string, column string, value interface{}) *WhereBuilder {
|
|
return b.WhereOrf(`%s.%s >= ?`, b.model.QuoteWord(prefix), b.model.QuoteWord(column), value)
|
|
}
|
|
|
|
// WhereOrPrefixBetween builds `prefix.column BETWEEN min AND max` statement in `OR` conditions.
|
|
func (b *WhereBuilder) WhereOrPrefixBetween(prefix string, column string, min, max interface{}) *WhereBuilder {
|
|
return b.WhereOrf(`%s.%s BETWEEN ? AND ?`, b.model.QuoteWord(prefix), b.model.QuoteWord(column), min, max)
|
|
}
|
|
|
|
// WhereOrPrefixLike builds `prefix.column LIKE like` statement in `OR` conditions.
|
|
func (b *WhereBuilder) WhereOrPrefixLike(prefix string, column string, like interface{}) *WhereBuilder {
|
|
return b.WhereOrf(`%s.%s LIKE ?`, b.model.QuoteWord(prefix), b.model.QuoteWord(column), like)
|
|
}
|
|
|
|
// WhereOrPrefixIn builds `prefix.column IN (in)` statement in `OR` conditions.
|
|
func (b *WhereBuilder) WhereOrPrefixIn(prefix string, column string, in interface{}) *WhereBuilder {
|
|
return b.doWhereOrfType(whereHolderTypeIn, `%s.%s IN (?)`, b.model.QuoteWord(prefix), b.model.QuoteWord(column), in)
|
|
}
|
|
|
|
// WhereOrPrefixNull builds `prefix.columns[0] IS NULL OR prefix.columns[1] IS NULL ...` statement in `OR` conditions.
|
|
func (b *WhereBuilder) WhereOrPrefixNull(prefix string, columns ...string) *WhereBuilder {
|
|
builder := b
|
|
for _, column := range columns {
|
|
builder = builder.WhereOrf(`%s.%s IS NULL`, b.model.QuoteWord(prefix), b.model.QuoteWord(column))
|
|
}
|
|
return builder
|
|
}
|
|
|
|
// WhereOrPrefixNotBetween builds `prefix.column NOT BETWEEN min AND max` statement in `OR` conditions.
|
|
func (b *WhereBuilder) WhereOrPrefixNotBetween(prefix string, column string, min, max interface{}) *WhereBuilder {
|
|
return b.WhereOrf(`%s.%s NOT BETWEEN ? AND ?`, b.model.QuoteWord(prefix), b.model.QuoteWord(column), min, max)
|
|
}
|
|
|
|
// WhereOrPrefixNotLike builds `prefix.column NOT LIKE like` statement in `OR` conditions.
|
|
func (b *WhereBuilder) WhereOrPrefixNotLike(prefix string, column string, like interface{}) *WhereBuilder {
|
|
return b.WhereOrf(`%s.%s NOT LIKE ?`, b.model.QuoteWord(prefix), b.model.QuoteWord(column), like)
|
|
}
|
|
|
|
// WhereOrPrefixNotIn builds `prefix.column NOT IN (in)` statement.
|
|
func (b *WhereBuilder) WhereOrPrefixNotIn(prefix string, column string, in interface{}) *WhereBuilder {
|
|
return b.doWhereOrfType(whereHolderTypeIn, `%s.%s NOT IN (?)`, b.model.QuoteWord(prefix), b.model.QuoteWord(column), in)
|
|
}
|
|
|
|
// WhereOrPrefixNotNull builds `prefix.columns[0] IS NOT NULL OR prefix.columns[1] IS NOT NULL ...` statement in `OR` conditions.
|
|
func (b *WhereBuilder) WhereOrPrefixNotNull(prefix string, columns ...string) *WhereBuilder {
|
|
builder := b
|
|
for _, column := range columns {
|
|
builder = builder.WhereOrf(`%s.%s IS NOT NULL`, b.model.QuoteWord(prefix), b.model.QuoteWord(column))
|
|
}
|
|
return builder
|
|
}
|