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 }