- // Copyright 2016 The Xorm Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
-
- package builder
-
- import (
- "bytes"
- "io"
- )
-
- // Writer defines the interface
- type Writer interface {
- io.Writer
- Append(...interface{})
- }
-
- var _ Writer = NewWriter()
-
- // BytesWriter implments Writer and save SQL in bytes.Buffer
- type BytesWriter struct {
- writer *bytes.Buffer
- buffer []byte
- args []interface{}
- }
-
- // NewWriter creates a new string writer
- func NewWriter() *BytesWriter {
- w := &BytesWriter{}
- w.writer = bytes.NewBuffer(w.buffer)
- return w
- }
-
- // Write writes data to Writer
- func (s *BytesWriter) Write(buf []byte) (int, error) {
- return s.writer.Write(buf)
- }
-
- // Append appends args to Writer
- func (s *BytesWriter) Append(args ...interface{}) {
- s.args = append(s.args, args...)
- }
-
- // Cond defines an interface
- type Cond interface {
- WriteTo(Writer) error
- And(...Cond) Cond
- Or(...Cond) Cond
- IsValid() bool
- }
-
- type condEmpty struct{}
-
- var _ Cond = condEmpty{}
-
- // NewCond creates an empty condition
- func NewCond() Cond {
- return condEmpty{}
- }
-
- func (condEmpty) WriteTo(w Writer) error {
- return nil
- }
-
- func (condEmpty) And(conds ...Cond) Cond {
- return And(conds...)
- }
-
- func (condEmpty) Or(conds ...Cond) Cond {
- return Or(conds...)
- }
-
- func (condEmpty) IsValid() bool {
- return false
- }
-
- func condToSQL(cond Cond) (string, []interface{}, error) {
- if cond == nil || !cond.IsValid() {
- return "", nil, nil
- }
-
- w := NewWriter()
- if err := cond.WriteTo(w); err != nil {
- return "", nil, err
- }
- return w.writer.String(), w.args, nil
- }
|