MCPcopy
hub / github.com/Masterminds/squirrel / ToSql

Method ToSql

update.go:57–145  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

55}
56
57func (d *updateData) ToSql() (sqlStr string, args []interface{}, err error) {
58 if len(d.Table) == 0 {
59 err = fmt.Errorf("update statements must specify a table")
60 return
61 }
62 if len(d.SetClauses) == 0 {
63 err = fmt.Errorf("update statements must have at least one Set clause")
64 return
65 }
66
67 sql := &bytes.Buffer{}
68
69 if len(d.Prefixes) > 0 {
70 args, err = appendToSql(d.Prefixes, sql, " ", args)
71 if err != nil {
72 return
73 }
74
75 sql.WriteString(" ")
76 }
77
78 sql.WriteString("UPDATE ")
79 sql.WriteString(d.Table)
80
81 sql.WriteString(" SET ")
82 setSqls := make([]string, len(d.SetClauses))
83 for i, setClause := range d.SetClauses {
84 var valSql string
85 if vs, ok := setClause.value.(Sqlizer); ok {
86 vsql, vargs, err := vs.ToSql()
87 if err != nil {
88 return "", nil, err
89 }
90 if _, ok := vs.(SelectBuilder); ok {
91 valSql = fmt.Sprintf("(%s)", vsql)
92 } else {
93 valSql = vsql
94 }
95 args = append(args, vargs...)
96 } else {
97 valSql = "?"
98 args = append(args, setClause.value)
99 }
100 setSqls[i] = fmt.Sprintf("%s = %s", setClause.column, valSql)
101 }
102 sql.WriteString(strings.Join(setSqls, ", "))
103
104 if d.From != nil {
105 sql.WriteString(" FROM ")
106 args, err = appendToSql([]Sqlizer{d.From}, sql, "", args)
107 if err != nil {
108 return
109 }
110 }
111
112 if len(d.WhereParts) > 0 {
113 sql.WriteString(" WHERE ")
114 args, err = appendToSql(d.WhereParts, sql, " AND ", args)

Callers

nothing calls this directly

Calls 4

appendToSqlFunction · 0.85
JoinMethod · 0.80
ToSqlMethod · 0.65
ReplacePlaceholdersMethod · 0.65

Tested by

no test coverage detected