group_by.go 794 B

12345678910111213141516171819202122232425262728293031323334353637
  1. package clause
  2. // GroupBy group by clause
  3. type GroupBy struct {
  4. Columns []Column
  5. Having Where
  6. }
  7. // Name from clause name
  8. func (groupBy GroupBy) Name() string {
  9. return "GROUP BY"
  10. }
  11. // Build build group by clause
  12. func (groupBy GroupBy) Build(builder Builder) {
  13. for idx, column := range groupBy.Columns {
  14. if idx > 0 {
  15. builder.WriteByte(',')
  16. }
  17. builder.WriteQuoted(column)
  18. }
  19. if len(groupBy.Having.Exprs) > 0 {
  20. builder.Write(" HAVING ")
  21. groupBy.Having.Build(builder)
  22. }
  23. }
  24. // MergeClause merge group by clause
  25. func (groupBy GroupBy) MergeClause(clause *Clause) {
  26. if v, ok := clause.Expression.(GroupBy); ok {
  27. groupBy.Columns = append(v.Columns, groupBy.Columns...)
  28. groupBy.Having.Exprs = append(v.Having.Exprs, groupBy.Having.Exprs...)
  29. }
  30. clause.Expression = groupBy
  31. }