github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/go-xorm/builder/cond_compare.go (about) 1 package builder 2 3 import "fmt" 4 5 // WriteMap 6 func WriteMap(w Writer, data map[string]interface{}, op string) error { 7 var args = make([]interface{}, 0, len(data)) 8 var i = 0 9 for k, v := range data { 10 switch v.(type) { 11 case expr: 12 if _, err := fmt.Fprintf(w, "%s%s(", k, op); err != nil { 13 return err 14 } 15 16 if err := v.(expr).WriteTo(w); err != nil { 17 return err 18 } 19 20 if _, err := fmt.Fprintf(w, ")"); err != nil { 21 return err 22 } 23 case *Builder: 24 if _, err := fmt.Fprintf(w, "%s%s(", k, op); err != nil { 25 return err 26 } 27 28 if err := v.(*Builder).WriteTo(w); err != nil { 29 return err 30 } 31 32 if _, err := fmt.Fprintf(w, ")"); err != nil { 33 return err 34 } 35 default: 36 if _, err := fmt.Fprintf(w, "%s%s?", k, op); err != nil { 37 return err 38 } 39 args = append(args, v) 40 } 41 if i != len(data)-1 { 42 if _, err := fmt.Fprint(w, " AND "); err != nil { 43 return err 44 } 45 } 46 i = i + 1 47 } 48 w.Append(args...) 49 return nil 50 } 51 52 // Lt 53 type Lt map[string]interface{} 54 55 var _ Cond = Lt{} 56 57 func (lt Lt) WriteTo(w Writer) error { 58 return WriteMap(w, lt, "<") 59 } 60 61 func (lt Lt) And(conds ...Cond) Cond { 62 return condAnd{lt, And(conds...)} 63 } 64 65 func (lt Lt) Or(conds ...Cond) Cond { 66 return condOr{lt, Or(conds...)} 67 } 68 69 func (lt Lt) IsValid() bool { 70 return len(lt) > 0 71 } 72 73 // Lte 74 type Lte map[string]interface{} 75 76 var _ Cond = Lte{} 77 78 func (lte Lte) WriteTo(w Writer) error { 79 return WriteMap(w, lte, "<=") 80 } 81 82 func (lte Lte) And(conds ...Cond) Cond { 83 return And(lte, And(conds...)) 84 } 85 86 func (lte Lte) Or(conds ...Cond) Cond { 87 return Or(lte, Or(conds...)) 88 } 89 90 func (lte Lte) IsValid() bool { 91 return len(lte) > 0 92 } 93 94 // Gt 95 type Gt map[string]interface{} 96 97 var _ Cond = Gt{} 98 99 func (gt Gt) WriteTo(w Writer) error { 100 return WriteMap(w, gt, ">") 101 } 102 103 func (gt Gt) And(conds ...Cond) Cond { 104 return And(gt, And(conds...)) 105 } 106 107 func (gt Gt) Or(conds ...Cond) Cond { 108 return Or(gt, Or(conds...)) 109 } 110 111 func (gt Gt) IsValid() bool { 112 return len(gt) > 0 113 } 114 115 // Gte 116 type Gte map[string]interface{} 117 118 var _ Cond = Gte{} 119 120 func (gte Gte) WriteTo(w Writer) error { 121 return WriteMap(w, gte, ">=") 122 } 123 124 func (gte Gte) And(conds ...Cond) Cond { 125 return And(gte, And(conds...)) 126 } 127 128 func (gte Gte) Or(conds ...Cond) Cond { 129 return Or(gte, Or(conds...)) 130 } 131 132 func (gte Gte) IsValid() bool { 133 return len(gte) > 0 134 }