func Join(queries []*Query, sep string) *Query {
	f := make([]string, 0, len(queries))
	var a []interface{}
	for _, q := range queries {
		f = append(f, q.fmt)
		a = append(a, q.args...)
	}
	return &Query{
		fmt:  strings.Join(f, " "+sep+" "),
		args: a,
	}
}
Join concatenates the elements of queries to create a single Query. The
separator string sep is placed between elements in the resulting Query.

This is commonly used to join clauses in a WHERE query. As such sep is
usually "AND" or "OR".
package sqlf
import (
	"fmt"
	"io"
	"strings"
)
type Query struct {
	fmt  string
	args []interface{}
}
func Sprintf(format string, args ...interface{}) *Query {
	f := make([]interface{}, len(args))
	a := make([]interface{}, 0, len(args))
	for i, arg := range args {
		if q, ok := arg.(*Query); ok {
			f[i] = ignoreFormat{q.fmt}
			a = append(a, q.args...)
		} else {
			f[i] = ignoreFormat{"%s"}
			a = append(a, arg)
		}
	}
	format = strings.Replace(format, "%%", "%%%%", -1)
	return &Query{
		fmt:  fmt.Sprintf(format, f...),
		args: a,
	}
}
func (q *Query) Query(binder BindVar) string {
	a := make([]interface{}, len(q.args))
	for i := range a {
		a[i] = ignoreFormat{binder.BindVar(i)}
	}
	return fmt.Sprintf(q.fmt, a...)
}
func (q *Query) Args() []interface{} {
	return q.args
}