github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/go-xorm/builder/cond_eq.go (about) 1 package builder 2 3 import "fmt" 4 5 type Incr int 6 7 type Decr int 8 9 type Eq map[string]interface{} 10 11 var _ Cond = Eq{} 12 13 func (eq Eq) opWriteTo(op string, w Writer) error { 14 var i = 0 15 for k, v := range eq { 16 switch v.(type) { 17 case []int, []int64, []string, []int32, []int16, []int8, []uint, []uint64, []uint32, []uint16, []interface{}: 18 if err := In(k, v).WriteTo(w); err != nil { 19 return err 20 } 21 case expr: 22 if _, err := fmt.Fprintf(w, "%s=(", k); err != nil { 23 return err 24 } 25 26 if err := v.(expr).WriteTo(w); err != nil { 27 return err 28 } 29 30 if _, err := fmt.Fprintf(w, ")"); err != nil { 31 return err 32 } 33 case *Builder: 34 if _, err := fmt.Fprintf(w, "%s=(", k); err != nil { 35 return err 36 } 37 38 if err := v.(*Builder).WriteTo(w); err != nil { 39 return err 40 } 41 42 if _, err := fmt.Fprintf(w, ")"); err != nil { 43 return err 44 } 45 case Incr: 46 if _, err := fmt.Fprintf(w, "%s=%s+?", k, k); err != nil { 47 return err 48 } 49 w.Append(int(v.(Incr))) 50 case Decr: 51 if _, err := fmt.Fprintf(w, "%s=%s-?", k, k); err != nil { 52 return err 53 } 54 w.Append(int(v.(Decr))) 55 default: 56 if _, err := fmt.Fprintf(w, "%s=?", k); err != nil { 57 return err 58 } 59 w.Append(v) 60 } 61 if i != len(eq)-1 { 62 if _, err := fmt.Fprint(w, op); err != nil { 63 return err 64 } 65 } 66 i = i + 1 67 } 68 return nil 69 } 70 71 func (eq Eq) WriteTo(w Writer) error { 72 return eq.opWriteTo(" AND ", w) 73 } 74 75 func (eq Eq) And(conds ...Cond) Cond { 76 return And(eq, And(conds...)) 77 } 78 79 func (eq Eq) Or(conds ...Cond) Cond { 80 return Or(eq, Or(conds...)) 81 } 82 83 func (eq Eq) IsValid() bool { 84 return len(eq) > 0 85 }