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  }