Source File
update.go
Belonging Package
github.com/Masterminds/squirrel
package squirrel
import (
)
type updateData struct {
PlaceholderFormat PlaceholderFormat
RunWith BaseRunner
Prefixes []Sqlizer
Table string
SetClauses []setClause
WhereParts []Sqlizer
OrderBys []string
Limit string
Offset string
Suffixes []Sqlizer
}
type setClause struct {
column string
value interface{}
}
func ( *updateData) () (sql.Result, error) {
if .RunWith == nil {
return nil, RunnerNotSet
}
return ExecWith(.RunWith, )
}
func ( *updateData) () (*sql.Rows, error) {
if .RunWith == nil {
return nil, RunnerNotSet
}
return QueryWith(.RunWith, )
}
func ( *updateData) () RowScanner {
if .RunWith == nil {
return &Row{err: RunnerNotSet}
}
, := .RunWith.(QueryRower)
if ! {
return &Row{err: RunnerNotQueryRunner}
}
return QueryRowWith(, )
}
func ( *updateData) () ( string, []interface{}, error) {
if len(.Table) == 0 {
= fmt.Errorf("update statements must specify a table")
return
}
if len(.SetClauses) == 0 {
= fmt.Errorf("update statements must have at least one Set clause")
return
}
:= &bytes.Buffer{}
if len(.Prefixes) > 0 {
, = appendToSql(.Prefixes, , " ", )
if != nil {
return
}
.WriteString(" ")
}
.WriteString("UPDATE ")
.WriteString(.Table)
.WriteString(" SET ")
:= make([]string, len(.SetClauses))
for , := range .SetClauses {
var string
if , := .value.(Sqlizer); {
, , := .ToSql()
if != nil {
return "", nil,
}
=
= append(, ...)
} else {
= "?"
= append(, .value)
}
[] = fmt.Sprintf("%s = %s", .column, )
}
.WriteString(strings.Join(, ", "))
if len(.WhereParts) > 0 {
.WriteString(" WHERE ")
, = appendToSql(.WhereParts, , " AND ", )
if != nil {
return
}
}
if len(.OrderBys) > 0 {
.WriteString(" ORDER BY ")
.WriteString(strings.Join(.OrderBys, ", "))
}
if len(.Limit) > 0 {
.WriteString(" LIMIT ")
.WriteString(.Limit)
}
if len(.Offset) > 0 {
.WriteString(" OFFSET ")
.WriteString(.Offset)
}
if len(.Suffixes) > 0 {
.WriteString(" ")
, = appendToSql(.Suffixes, , " ", )
if != nil {
return
}
}
, = .PlaceholderFormat.ReplacePlaceholders(.String())
return
}
type UpdateBuilder builder.Builder
func () {
builder.Register(UpdateBuilder{}, updateData{})
}
func ( UpdateBuilder) ( PlaceholderFormat) UpdateBuilder {
return builder.Set(, "PlaceholderFormat", ).(UpdateBuilder)
}
func ( UpdateBuilder) ( BaseRunner) UpdateBuilder {
return setRunWith(, ).(UpdateBuilder)
}
func ( UpdateBuilder) () (sql.Result, error) {
:= builder.GetStruct().(updateData)
return .Exec()
}
func ( UpdateBuilder) () (*sql.Rows, error) {
:= builder.GetStruct().(updateData)
return .Query()
}
func ( UpdateBuilder) () RowScanner {
:= builder.GetStruct().(updateData)
return .QueryRow()
}
func ( UpdateBuilder) ( ...interface{}) error {
return .QueryRow().Scan(...)
}
func ( UpdateBuilder) () (string, []interface{}, error) {
:= builder.GetStruct().(updateData)
return .ToSql()
}
func ( UpdateBuilder) ( string, ...interface{}) UpdateBuilder {
return .PrefixExpr(Expr(, ...))
}
func ( UpdateBuilder) ( Sqlizer) UpdateBuilder {
return builder.Append(, "Prefixes", ).(UpdateBuilder)
}
func ( UpdateBuilder) ( string) UpdateBuilder {
return builder.Set(, "Table", ).(UpdateBuilder)
}
func ( UpdateBuilder) ( string, interface{}) UpdateBuilder {
return builder.Append(, "SetClauses", setClause{column: , value: }).(UpdateBuilder)
}
func ( UpdateBuilder) ( map[string]interface{}) UpdateBuilder {
:= make([]string, len())
:= 0
for := range {
[] =
++
}
sort.Strings()
for , := range {
, := []
= .Set(, )
}
return
}
func ( UpdateBuilder) ( interface{}, ...interface{}) UpdateBuilder {
return builder.Append(, "WhereParts", newWherePart(, ...)).(UpdateBuilder)
}
func ( UpdateBuilder) ( ...string) UpdateBuilder {
return builder.Extend(, "OrderBys", ).(UpdateBuilder)
}
func ( UpdateBuilder) ( uint64) UpdateBuilder {
return builder.Set(, "Limit", fmt.Sprintf("%d", )).(UpdateBuilder)
}
func ( UpdateBuilder) ( uint64) UpdateBuilder {
return builder.Set(, "Offset", fmt.Sprintf("%d", )).(UpdateBuilder)
}
func ( UpdateBuilder) ( string, ...interface{}) UpdateBuilder {
return .SuffixExpr(Expr(, ...))
}
func ( UpdateBuilder) ( Sqlizer) UpdateBuilder {
return builder.Append(, "Suffixes", ).(UpdateBuilder)
![]() |
The pages are generated with Golds v0.3.2-preview. (GOOS=darwin GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |