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  }