123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- package sqlbuilder
- import (
- "fmt"
- )
- type Builder interface {
- Build() (sql string, args []interface{})
- BuildWithFlavor(flavor Flavor, initialArg ...interface{}) (sql string, args []interface{})
- }
- type compiledBuilder struct {
- args *Args
- format string
- }
- func (cb *compiledBuilder) Build() (sql string, args []interface{}) {
- return cb.args.Compile(cb.format)
- }
- func (cb *compiledBuilder) BuildWithFlavor(flavor Flavor, initialArg ...interface{}) (sql string, args []interface{}) {
- return cb.args.CompileWithFlavor(cb.format, flavor, initialArg...)
- }
- type flavoredBuilder struct {
- builder Builder
- flavor Flavor
- }
- func (fb *flavoredBuilder) Build() (sql string, args []interface{}) {
- return fb.builder.BuildWithFlavor(fb.flavor)
- }
- func (fb *flavoredBuilder) BuildWithFlavor(flavor Flavor, initialArg ...interface{}) (sql string, args []interface{}) {
- return fb.builder.BuildWithFlavor(flavor, initialArg...)
- }
- func WithFlavor(builder Builder, flavor Flavor) Builder {
- return &flavoredBuilder{
- builder: builder,
- flavor: flavor,
- }
- }
- func Buildf(format string, arg ...interface{}) Builder {
- args := &Args{
- Flavor: DefaultFlavor,
- }
- vars := make([]interface{}, 0, len(arg))
- for _, a := range arg {
- vars = append(vars, args.Add(a))
- }
- return &compiledBuilder{
- args: args,
- format: fmt.Sprintf(Escape(format), vars...),
- }
- }
- func Build(format string, arg ...interface{}) Builder {
- args := &Args{
- Flavor: DefaultFlavor,
- }
- for _, a := range arg {
- args.Add(a)
- }
- return &compiledBuilder{
- args: args,
- format: format,
- }
- }
- func BuildNamed(format string, named map[string]interface{}) Builder {
- args := &Args{
- Flavor: DefaultFlavor,
- onlyNamed: true,
- }
- for n, v := range named {
- args.Add(Named(n, v))
- }
- return &compiledBuilder{
- args: args,
- format: format,
- }
- }
|