set.go 717 B

12345678910111213141516171819202122232425262728293031323334353637
  1. package clause
  2. type Set []Assignment
  3. type Assignment struct {
  4. Column Column
  5. Value interface{}
  6. }
  7. func (set Set) Name() string {
  8. return "SET"
  9. }
  10. func (set Set) Build(builder Builder) {
  11. if len(set) > 0 {
  12. for idx, assignment := range set {
  13. if idx > 0 {
  14. builder.WriteByte(',')
  15. }
  16. builder.WriteQuoted(assignment.Column)
  17. builder.WriteByte('=')
  18. builder.Write(builder.AddVar(assignment.Value))
  19. }
  20. } else {
  21. builder.WriteQuoted(PrimaryColumn)
  22. builder.WriteByte('=')
  23. builder.WriteQuoted(PrimaryColumn)
  24. }
  25. }
  26. // MergeClause merge assignments clauses
  27. func (set Set) MergeClause(clause *Clause) {
  28. if v, ok := clause.Expression.(Set); ok {
  29. set = append(v, set...)
  30. }
  31. clause.Expression = set
  32. }