(fmter QueryFormatter, b []byte, q *Query)
| 236 | } |
| 237 | |
| 238 | func (j *join) appendHasOneJoin(fmter QueryFormatter, b []byte, q *Query) (_ []byte, err error) { |
| 239 | isSoftDelete := j.JoinModel.Table().SoftDeleteField != nil && !q.hasFlag(allWithDeletedFlag) |
| 240 | |
| 241 | b = append(b, "LEFT JOIN "...) |
| 242 | b = fmter.FormatQuery(b, string(j.JoinModel.Table().SQLNameForSelects)) |
| 243 | b = append(b, " AS "...) |
| 244 | b = j.appendAlias(b) |
| 245 | |
| 246 | b = append(b, " ON "...) |
| 247 | |
| 248 | if isSoftDelete { |
| 249 | b = append(b, '(') |
| 250 | } |
| 251 | |
| 252 | if len(j.Rel.BaseFKs) > 1 { |
| 253 | b = append(b, '(') |
| 254 | } |
| 255 | for i, baseFK := range j.Rel.BaseFKs { |
| 256 | if i > 0 { |
| 257 | b = append(b, " AND "...) |
| 258 | } |
| 259 | b = j.appendAlias(b) |
| 260 | b = append(b, '.') |
| 261 | b = append(b, j.Rel.JoinFKs[i].Column...) |
| 262 | b = append(b, " = "...) |
| 263 | b = j.appendBaseAlias(b) |
| 264 | b = append(b, '.') |
| 265 | b = append(b, baseFK.Column...) |
| 266 | } |
| 267 | if len(j.Rel.BaseFKs) > 1 { |
| 268 | b = append(b, ')') |
| 269 | } |
| 270 | |
| 271 | for _, on := range j.on { |
| 272 | b = on.AppendSep(b) |
| 273 | b, err = on.AppendQuery(fmter, b) |
| 274 | if err != nil { |
| 275 | return nil, err |
| 276 | } |
| 277 | } |
| 278 | |
| 279 | if isSoftDelete { |
| 280 | b = append(b, ')') |
| 281 | } |
| 282 | |
| 283 | if isSoftDelete { |
| 284 | b = append(b, " AND "...) |
| 285 | b = j.appendAlias(b) |
| 286 | b = j.appendSoftDelete(b, q.flags) |
| 287 | } |
| 288 | |
| 289 | return b, nil |
| 290 | } |
| 291 | |
| 292 | type hasManyColumnsAppender struct { |
| 293 | *join |
no test coverage detected