github.com/kcmvp/gob@v1.0.17/dbx/clause.go (about) 1 package dbx 2 3 import ( 4 "fmt" 5 6 "github.com/kcmvp/gob/internal" 7 "github.com/samber/lo" 8 ) 9 10 type IEntity interface { 11 Table() string 12 } 13 14 type Key interface { 15 string | int64 16 } 17 18 type SQL interface { 19 SQLStr() string 20 } 21 22 type Order string 23 24 const ( 25 ASC Order = "ASC" 26 DESC Order = "DESC" 27 ) 28 29 type Attr internal.Mapper 30 31 func (a Attr) SQLStr() string { 32 return a.B 33 } 34 35 type Set lo.Tuple2[Attr, any] 36 37 // Criteria attribute predicate 38 type Criteria struct { 39 expression string 40 } 41 42 func (criteria Criteria) SQLStr() string { 43 return criteria.expression 44 } 45 46 func (criteria Criteria) Or(rp Criteria) Criteria { 47 return Criteria{ 48 expression: fmt.Sprintf("(%s or %s)", criteria.expression, rp.SQLStr()), 49 } 50 } 51 52 func (criteria Criteria) Add(rp Criteria) Criteria { 53 return Criteria{ 54 expression: fmt.Sprintf("(%s and %s)", criteria.expression, rp.SQLStr()), 55 } 56 } 57 58 func LT(attr Attr) Criteria { 59 return Criteria{expression: fmt.Sprintf("%s < ?", attr.SQLStr())} 60 } 61 62 func LTE(attr Attr) Criteria { 63 return Criteria{expression: fmt.Sprintf("%s <= ?", attr.SQLStr())} 64 } 65 66 func GT(attr Attr) Criteria { 67 return Criteria{expression: fmt.Sprintf("%s > ?", attr.SQLStr())} 68 } 69 70 func GTE(attr Attr) Criteria { 71 return Criteria{expression: fmt.Sprintf("%s >= ?", attr.SQLStr())} 72 } 73 74 func Null(attr Attr) Criteria { 75 return Criteria{expression: fmt.Sprintf("%s is null", attr.SQLStr())} 76 } 77 78 func NotNull(attr Attr) Criteria { 79 return Criteria{expression: fmt.Sprintf("%s is not null", attr.SQLStr())} 80 } 81 82 func Like(attr Attr) Criteria { 83 return Criteria{expression: fmt.Sprintf("%s like '%%?%%'", attr.SQLStr())} 84 } 85 86 func NotLike(attr Attr) Criteria { 87 return Criteria{expression: fmt.Sprintf("%s not like '%%?%%'", attr.SQLStr())} 88 } 89 90 func Prefix(attr Attr) Criteria { 91 return Criteria{expression: fmt.Sprintf("%s like '?%%'", attr.SQLStr())} 92 } 93 94 func Suffix[E IEntity](attr Attr) Criteria { 95 return Criteria{expression: fmt.Sprintf("%s like '%%?'", attr.SQLStr())} 96 } 97 98 type OrderBy lo.Tuple2[Attr, Order] 99 100 func (orderBy OrderBy) SQLStr() string { 101 return fmt.Sprintf("%s %s", orderBy.A.SQLStr(), orderBy.B) 102 } 103 104 var ( 105 _ SQL = (*Attr)(nil) 106 _ SQL = (*Criteria)(nil) 107 _ SQL = (*OrderBy)(nil) 108 )