Repository navigation
Expand file tree
/
Copy pathdrop.go
More file actions
153 lines (123 loc) · 3.53 KB
/
Copy pathdrop.go
File metadata and controls
153 lines (123 loc) · 3.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
package squirrel
import (
"bytes"
"database/sql"
"errors"
"github.com/lann/builder"
)
type dropStmt struct {
PlaceholderFormat PlaceholderFormat
RunWith BaseRunner
Prefixes []Sqlizer
StatementKeyword string
Table string
Suffixes []Sqlizer
}
func (d *dropStmt) Exec() (sql.Result, error) {
if d.RunWith == nil {
return nil, RunnerNotSet
}
return ExecWith(d.RunWith, d)
}
func (d *dropStmt) Query() (*sql.Rows, error) {
if d.RunWith == nil {
return nil, RunnerNotSet
}
return QueryWith(d.RunWith, d)
}
func (d *dropStmt) ToSql() (sqlStr string, args []interface{}, err error) {
if len(d.Table) == 0 {
err = errors.New("drop statements must specify a table")
return
}
sql := &bytes.Buffer{}
if len(d.Prefixes) > 0 {
args, err = appendToSql(d.Prefixes, sql, " ", args)
if err != nil {
return
}
sql.WriteString(" ")
}
if d.StatementKeyword == "" {
sql.WriteString("DROP ")
} else {
sql.WriteString(d.StatementKeyword)
sql.WriteString(" ")
}
sql.WriteString("TABLE ")
sql.WriteString(d.Table)
if err != nil {
return
}
if len(d.Suffixes) > 0 {
sql.WriteString(" ")
args, err = appendToSql(d.Suffixes, sql, " ", args)
if err != nil {
return
}
}
sqlStr, err = d.PlaceholderFormat.ReplacePlaceholders(sql.String())
return
}
// Builder
// DropBuilder builds SQL DROP statements.
type DropBuilder builder.Builder
func init() {
builder.Register(DropBuilder{}, dropStmt{})
}
// Format methods
// PlaceholderFormat sets PlaceholderFormat (e.g. Question or Dollar) for the
// query.
func (b DropBuilder) PlaceholderFormat(f PlaceholderFormat) DropBuilder {
return builder.Set(b, "PlaceholderFormat", f).(DropBuilder)
}
// Runner methods
// RunWith sets a Runner (like database/sql.DB) to be used with e.g. Exec.
func (b DropBuilder) RunWith(runner BaseRunner) DropBuilder {
return setRunWith(b, runner).(DropBuilder)
}
// Exec builds and Execs the query with the Runner set by RunWith.
func (b DropBuilder) Exec() (sql.Result, error) {
data := builder.GetStruct(b).(dropStmt)
return data.Exec()
}
// Query builds and Querys the query with the Runner set by RunWith.
func (b DropBuilder) Query() (*sql.Rows, error) {
data := builder.GetStruct(b).(dropStmt)
return data.Query()
}
// SQL methods
// ToSql builds the query into a SQL string and bound args.
func (b DropBuilder) ToSql() (string, []interface{}, error) {
data := builder.GetStruct(b).(dropStmt)
return data.ToSql()
}
// MustSql builds the query into a SQL string and bound args.
// It panics if there are any errors.
func (b DropBuilder) MustSql() (string, []interface{}) {
sql, args, err := b.ToSql()
if err != nil {
panic(err)
}
return sql, args
}
// Prefix adds an expression to the beginning of the query
func (b DropBuilder) Prefix(sql string, args ...interface{}) DropBuilder {
return b.PrefixExpr(Expr(sql, args...))
}
// PrefixExpr adds an expression to the very beginning of the query
func (b DropBuilder) PrefixExpr(expr Sqlizer) DropBuilder {
return builder.Append(b, "Prefixes", expr).(DropBuilder)
}
// Table sets the TABLE clause of the query.
func (b DropBuilder) Table(table string) DropBuilder {
return builder.Set(b, "Table", table).(DropBuilder)
}
// Suffix adds an expression to the end of the query
func (b DropBuilder) Suffix(sql string, args ...interface{}) DropBuilder {
return b.SuffixExpr(Expr(sql, args...))
}
// SuffixExpr adds an expression to the end of the query
func (b DropBuilder) SuffixExpr(expr Sqlizer) DropBuilder {
return builder.Append(b, "Suffixes", expr).(DropBuilder)
}