summaryrefslogtreecommitdiff
path: root/vendor/github.com/Masterminds/squirrel/part.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/Masterminds/squirrel/part.go')
-rw-r--r--vendor/github.com/Masterminds/squirrel/part.go63
1 files changed, 63 insertions, 0 deletions
diff --git a/vendor/github.com/Masterminds/squirrel/part.go b/vendor/github.com/Masterminds/squirrel/part.go
new file mode 100644
index 0000000..c58f68f
--- /dev/null
+++ b/vendor/github.com/Masterminds/squirrel/part.go
@@ -0,0 +1,63 @@
+package squirrel
+
+import (
+ "fmt"
+ "io"
+)
+
+type part struct {
+ pred interface{}
+ args []interface{}
+}
+
+func newPart(pred interface{}, args ...interface{}) Sqlizer {
+ return &part{pred, args}
+}
+
+func (p part) ToSql() (sql string, args []interface{}, err error) {
+ switch pred := p.pred.(type) {
+ case nil:
+ // no-op
+ case Sqlizer:
+ sql, args, err = nestedToSql(pred)
+ case string:
+ sql = pred
+ args = p.args
+ default:
+ err = fmt.Errorf("expected string or Sqlizer, not %T", pred)
+ }
+ return
+}
+
+func nestedToSql(s Sqlizer) (string, []interface{}, error) {
+ if raw, ok := s.(rawSqlizer); ok {
+ return raw.toSqlRaw()
+ } else {
+ return s.ToSql()
+ }
+}
+
+func appendToSql(parts []Sqlizer, w io.Writer, sep string, args []interface{}) ([]interface{}, error) {
+ for i, p := range parts {
+ partSql, partArgs, err := nestedToSql(p)
+ if err != nil {
+ return nil, err
+ } else if len(partSql) == 0 {
+ continue
+ }
+
+ if i > 0 {
+ _, err := io.WriteString(w, sep)
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ _, err = io.WriteString(w, partSql)
+ if err != nil {
+ return nil, err
+ }
+ args = append(args, partArgs...)
+ }
+ return args, nil
+}