github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/go-xorm/builder/cond.go (about)

     1  package builder
     2  
     3  import (
     4  	"bytes"
     5  	"io"
     6  )
     7  
     8  type Writer interface {
     9  	io.Writer
    10  	Append(...interface{})
    11  }
    12  
    13  type stringWriter struct {
    14  	writer *bytes.Buffer
    15  	buffer []byte
    16  	args   []interface{}
    17  }
    18  
    19  func NewWriter() *stringWriter {
    20  	w := &stringWriter{}
    21  	w.writer = bytes.NewBuffer(w.buffer)
    22  	return w
    23  }
    24  
    25  func (s *stringWriter) Write(buf []byte) (int, error) {
    26  	return s.writer.Write(buf)
    27  }
    28  
    29  func (s *stringWriter) Append(args ...interface{}) {
    30  	s.args = append(s.args, args...)
    31  }
    32  
    33  type Cond interface {
    34  	WriteTo(Writer) error
    35  	And(...Cond) Cond
    36  	Or(...Cond) Cond
    37  	IsValid() bool
    38  }
    39  
    40  type condEmpty struct{}
    41  
    42  var _ Cond = condEmpty{}
    43  
    44  func NewCond() Cond {
    45  	return condEmpty{}
    46  }
    47  
    48  func (condEmpty) WriteTo(w Writer) error {
    49  	return nil
    50  }
    51  
    52  func (condEmpty) And(conds ...Cond) Cond {
    53  	return And(conds...)
    54  }
    55  
    56  func (condEmpty) Or(conds ...Cond) Cond {
    57  	return Or(conds...)
    58  }
    59  
    60  func (condEmpty) IsValid() bool {
    61  	return false
    62  }
    63  
    64  func condToSQL(cond Cond) (string, []interface{}, error) {
    65  	if cond == nil || !cond.IsValid() {
    66  		return "", nil, nil
    67  	}
    68  
    69  	w := NewWriter()
    70  	if err := cond.WriteTo(w); err != nil {
    71  		return "", nil, err
    72  	}
    73  	return w.writer.String(), w.args, nil
    74  }