values.go 945 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package clause
  2. type Values struct {
  3. Columns []Column
  4. Values [][]interface{}
  5. }
  6. // Name from clause name
  7. func (Values) Name() string {
  8. return "VALUES"
  9. }
  10. // Build build from clause
  11. func (values Values) Build(builder Builder) {
  12. if len(values.Columns) > 0 {
  13. builder.WriteByte('(')
  14. for idx, column := range values.Columns {
  15. if idx > 0 {
  16. builder.WriteByte(',')
  17. }
  18. builder.WriteQuoted(column)
  19. }
  20. builder.WriteByte(')')
  21. builder.Write(" VALUES ")
  22. for idx, value := range values.Values {
  23. if idx > 0 {
  24. builder.WriteByte(',')
  25. }
  26. builder.WriteByte('(')
  27. builder.Write(builder.AddVar(value...))
  28. builder.WriteByte(')')
  29. }
  30. } else {
  31. builder.Write("DEFAULT VALUES")
  32. }
  33. }
  34. // MergeClause merge values clauses
  35. func (values Values) MergeClause(clause *Clause) {
  36. clause.Name = ""
  37. if v, ok := clause.Expression.(Values); ok {
  38. values.Values = append(v.Values, values.Values...)
  39. }
  40. clause.Expression = values
  41. }