AddVar add var
(writer clause.Writer, vars ...interface{})
| 173 | |
| 174 | // AddVar add var |
| 175 | func (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 |
nothing calls this directly
no test coverage detected