123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- package sqlbuilder
- import (
- "bytes"
- "strings"
- )
- func NewCreateTableBuilder() *CreateTableBuilder {
- return DefaultFlavor.NewCreateTableBuilder()
- }
- func newCreateTableBuilder() *CreateTableBuilder {
- args := &Args{}
- return &CreateTableBuilder{
- verb: "CREATE TABLE",
- args: args,
- }
- }
- type CreateTableBuilder struct {
- verb string
- ifNotExists bool
- table string
- defs [][]string
- options [][]string
- args *Args
- }
- func (ctb *CreateTableBuilder) CreateTable(table string) *CreateTableBuilder {
- ctb.table = Escape(table)
- return ctb
- }
- func (ctb *CreateTableBuilder) CreateTempTable(table string) *CreateTableBuilder {
- ctb.verb = "CREATE TEMPORARY TABLE"
- ctb.table = Escape(table)
- return ctb
- }
- func (ctb *CreateTableBuilder) IfNotExists() *CreateTableBuilder {
- ctb.ifNotExists = true
- return ctb
- }
- func (ctb *CreateTableBuilder) Define(def ...string) *CreateTableBuilder {
- ctb.defs = append(ctb.defs, def)
- return ctb
- }
- func (ctb *CreateTableBuilder) Option(opt ...string) *CreateTableBuilder {
- ctb.options = append(ctb.options, opt)
- return ctb
- }
- func (ctb *CreateTableBuilder) String() string {
- s, _ := ctb.Build()
- return s
- }
- func (ctb *CreateTableBuilder) Build() (sql string, args []interface{}) {
- return ctb.BuildWithFlavor(ctb.args.Flavor)
- }
- func (ctb *CreateTableBuilder) BuildWithFlavor(flavor Flavor, initialArg ...interface{}) (sql string, args []interface{}) {
- buf := &bytes.Buffer{}
- buf.WriteString(ctb.verb)
- if ctb.ifNotExists {
- buf.WriteString(" IF NOT EXISTS")
- }
- buf.WriteRune(' ')
- buf.WriteString(ctb.table)
- buf.WriteString(" (")
- defs := make([]string, 0, len(ctb.defs))
- for _, def := range ctb.defs {
- defs = append(defs, strings.Join(def, " "))
- }
- buf.WriteString(strings.Join(defs, ", "))
- buf.WriteRune(')')
- if len(ctb.options) > 0 {
- buf.WriteRune(' ')
- opts := make([]string, 0, len(ctb.options))
- for _, opt := range ctb.options {
- opts = append(opts, strings.Join(opt, " "))
- }
- buf.WriteString(strings.Join(opts, ", "))
- }
- return ctb.args.CompileWithFlavor(buf.String(), flavor, initialArg...)
- }
- func (ctb *CreateTableBuilder) SetFlavor(flavor Flavor) (old Flavor) {
- old = ctb.args.Flavor
- ctb.args.Flavor = flavor
- return
- }
|