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  }