MCPcopy
hub / github.com/go-gorm/gorm / AddVar

Method AddVar

statement.go:175–269  ·  view source on GitHub ↗

AddVar add var

(writer clause.Writer, vars ...interface{})

Source from the content-addressed store, hash-verified

173
174// AddVar add var
175func (stmt *Statement) AddVar(writer clause.Writer, vars ...interface{}) {
176 for idx, v := range vars {
177 if idx > 0 {
178 writer.WriteByte(',')
179 }
180
181 switch v := v.(type) {
182 case sql.NamedArg:
183 stmt.Vars = append(stmt.Vars, v.Value)
184 case clause.Column, clause.Table:
185 stmt.QuoteTo(writer, v)
186 case Valuer:
187 reflectValue := reflect.ValueOf(v)
188 if reflectValue.Kind() == reflect.Ptr && reflectValue.IsNil() {
189 stmt.AddVar(writer, nil)
190 } else {
191 stmt.AddVar(writer, v.GormValue(stmt.Context, stmt.DB))
192 }
193 case clause.Interface:
194 c := clause.Clause{Name: v.Name()}
195 v.MergeClause(&c)
196 c.Build(stmt)
197 case clause.Expression:
198 v.Build(stmt)
199 case driver.Valuer:
200 stmt.Vars = append(stmt.Vars, v)
201 stmt.DB.Dialector.BindVarTo(writer, stmt, v)
202 case []byte:
203 stmt.Vars = append(stmt.Vars, v)
204 stmt.DB.Dialector.BindVarTo(writer, stmt, v)
205 case []interface{}:
206 if len(v) > 0 {
207 writer.WriteByte('(')
208 stmt.AddVar(writer, v...)
209 writer.WriteByte(')')
210 } else {
211 writer.WriteString("(NULL)")
212 }
213 case interface{ getInstance() *DB }:
214 cv := v.getInstance()
215
216 subdb := cv.Session(&Session{Logger: logger.Discard, DryRun: true}).getInstance()
217 if cv.Statement.SQL.Len() > 0 {
218 var (
219 vars = subdb.Statement.Vars
220 sql = cv.Statement.SQL.String()
221 )
222
223 subdb.Statement.Vars = make([]interface{}, 0, len(vars))
224 for _, vv := range vars {
225 subdb.Statement.Vars = append(subdb.Statement.Vars, vv)
226 bindvar := strings.Builder{}
227 cv.BindVarTo(&bindvar, subdb.Statement, vv)
228 sql = strings.Replace(sql, bindvar.String(), "?", 1)
229 }
230
231 subdb.Statement.SQL.Reset()
232 subdb.Statement.Vars = stmt.Vars

Callers

nothing calls this directly

Calls 15

QuoteToMethod · 0.95
BuildMethod · 0.95
SessionMethod · 0.80
LenMethod · 0.80
ResetMethod · 0.80
ContainsMethod · 0.80
ExecuteMethod · 0.80
QueryMethod · 0.80
WriteByteMethod · 0.65
GormValueMethod · 0.65
NameMethod · 0.65
MergeClauseMethod · 0.65

Tested by

no test coverage detected