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