github.com/wangyougui/gf/v2@v2.6.5/database/gdb/gdb_model_builder_whereor_prefix.go (about) 1 // Copyright GoFrame Author(https://goframe.org). All Rights Reserved. 2 // 3 // This Source Code Form is subject to the terms of the MIT License. 4 // If a copy of the MIT was not distributed with this file, 5 // You can obtain one at https://github.com/wangyougui/gf. 6 7 package gdb 8 9 // WhereOrPrefix performs as WhereOr, but it adds prefix to each field in where statement. 10 // Eg: 11 // WhereOrPrefix("order", "status", "paid") => WHERE xxx OR (`order`.`status`='paid') 12 // WhereOrPrefix("order", struct{Status:"paid", "channel":"bank"}) => WHERE xxx OR (`order`.`status`='paid' AND `order`.`channel`='bank') 13 func (b *WhereBuilder) WhereOrPrefix(prefix string, where interface{}, args ...interface{}) *WhereBuilder { 14 where, args = b.convertWhereBuilder(where, args) 15 16 builder := b.getBuilder() 17 builder.whereHolder = append(builder.whereHolder, WhereHolder{ 18 Type: whereHolderTypeDefault, 19 Operator: whereHolderOperatorOr, 20 Where: where, 21 Args: args, 22 Prefix: prefix, 23 }) 24 return builder 25 } 26 27 // WhereOrPrefixNot builds `prefix.column != value` statement in `OR` conditions. 28 func (b *WhereBuilder) WhereOrPrefixNot(prefix string, column string, value interface{}) *WhereBuilder { 29 return b.WhereOrf(`%s.%s != ?`, b.model.QuoteWord(prefix), b.model.QuoteWord(column), value) 30 } 31 32 // WhereOrPrefixLT builds `prefix.column < value` statement in `OR` conditions. 33 func (b *WhereBuilder) WhereOrPrefixLT(prefix string, column string, value interface{}) *WhereBuilder { 34 return b.WhereOrf(`%s.%s < ?`, b.model.QuoteWord(prefix), b.model.QuoteWord(column), value) 35 } 36 37 // WhereOrPrefixLTE builds `prefix.column <= value` statement in `OR` conditions. 38 func (b *WhereBuilder) WhereOrPrefixLTE(prefix string, column string, value interface{}) *WhereBuilder { 39 return b.WhereOrf(`%s.%s <= ?`, b.model.QuoteWord(prefix), b.model.QuoteWord(column), value) 40 } 41 42 // WhereOrPrefixGT builds `prefix.column > value` statement in `OR` conditions. 43 func (b *WhereBuilder) WhereOrPrefixGT(prefix string, column string, value interface{}) *WhereBuilder { 44 return b.WhereOrf(`%s.%s > ?`, b.model.QuoteWord(prefix), b.model.QuoteWord(column), value) 45 } 46 47 // WhereOrPrefixGTE builds `prefix.column >= value` statement in `OR` conditions. 48 func (b *WhereBuilder) WhereOrPrefixGTE(prefix string, column string, value interface{}) *WhereBuilder { 49 return b.WhereOrf(`%s.%s >= ?`, b.model.QuoteWord(prefix), b.model.QuoteWord(column), value) 50 } 51 52 // WhereOrPrefixBetween builds `prefix.column BETWEEN min AND max` statement in `OR` conditions. 53 func (b *WhereBuilder) WhereOrPrefixBetween(prefix string, column string, min, max interface{}) *WhereBuilder { 54 return b.WhereOrf(`%s.%s BETWEEN ? AND ?`, b.model.QuoteWord(prefix), b.model.QuoteWord(column), min, max) 55 } 56 57 // WhereOrPrefixLike builds `prefix.column LIKE 'like'` statement in `OR` conditions. 58 func (b *WhereBuilder) WhereOrPrefixLike(prefix string, column string, like interface{}) *WhereBuilder { 59 return b.WhereOrf(`%s.%s LIKE ?`, b.model.QuoteWord(prefix), b.model.QuoteWord(column), like) 60 } 61 62 // WhereOrPrefixIn builds `prefix.column IN (in)` statement in `OR` conditions. 63 func (b *WhereBuilder) WhereOrPrefixIn(prefix string, column string, in interface{}) *WhereBuilder { 64 return b.doWhereOrfType(whereHolderTypeIn, `%s.%s IN (?)`, b.model.QuoteWord(prefix), b.model.QuoteWord(column), in) 65 } 66 67 // WhereOrPrefixNull builds `prefix.columns[0] IS NULL OR prefix.columns[1] IS NULL ...` statement in `OR` conditions. 68 func (b *WhereBuilder) WhereOrPrefixNull(prefix string, columns ...string) *WhereBuilder { 69 builder := b 70 for _, column := range columns { 71 builder = builder.WhereOrf(`%s.%s IS NULL`, b.model.QuoteWord(prefix), b.model.QuoteWord(column)) 72 } 73 return builder 74 } 75 76 // WhereOrPrefixNotBetween builds `prefix.column NOT BETWEEN min AND max` statement in `OR` conditions. 77 func (b *WhereBuilder) WhereOrPrefixNotBetween(prefix string, column string, min, max interface{}) *WhereBuilder { 78 return b.WhereOrf(`%s.%s NOT BETWEEN ? AND ?`, b.model.QuoteWord(prefix), b.model.QuoteWord(column), min, max) 79 } 80 81 // WhereOrPrefixNotLike builds `prefix.column NOT LIKE 'like'` statement in `OR` conditions. 82 func (b *WhereBuilder) WhereOrPrefixNotLike(prefix string, column string, like interface{}) *WhereBuilder { 83 return b.WhereOrf(`%s.%s NOT LIKE ?`, b.model.QuoteWord(prefix), b.model.QuoteWord(column), like) 84 } 85 86 // WhereOrPrefixNotIn builds `prefix.column NOT IN (in)` statement. 87 func (b *WhereBuilder) WhereOrPrefixNotIn(prefix string, column string, in interface{}) *WhereBuilder { 88 return b.doWhereOrfType(whereHolderTypeIn, `%s.%s NOT IN (?)`, b.model.QuoteWord(prefix), b.model.QuoteWord(column), in) 89 } 90 91 // WhereOrPrefixNotNull builds `prefix.columns[0] IS NOT NULL OR prefix.columns[1] IS NOT NULL ...` statement in `OR` conditions. 92 func (b *WhereBuilder) WhereOrPrefixNotNull(prefix string, columns ...string) *WhereBuilder { 93 builder := b 94 for _, column := range columns { 95 builder = builder.WhereOrf(`%s.%s IS NOT NULL`, b.model.QuoteWord(prefix), b.model.QuoteWord(column)) 96 } 97 return builder 98 }