select.go 794 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package clause
  2. // Select select attrs when querying, updating, creating
  3. type Select struct {
  4. Distinct bool
  5. Columns []Column
  6. Expression Expression
  7. }
  8. func (s Select) Name() string {
  9. return "SELECT"
  10. }
  11. func (s Select) Build(builder Builder) {
  12. if len(s.Columns) > 0 {
  13. if s.Distinct {
  14. builder.WriteString("DISTINCT ")
  15. }
  16. for idx, column := range s.Columns {
  17. if idx > 0 {
  18. builder.WriteByte(',')
  19. }
  20. builder.WriteQuoted(column)
  21. }
  22. } else {
  23. builder.WriteByte('*')
  24. }
  25. }
  26. func (s Select) MergeClause(clause *Clause) {
  27. if s.Expression != nil {
  28. if s.Distinct {
  29. if expr, ok := s.Expression.(Expr); ok {
  30. expr.SQL = "DISTINCT " + expr.SQL
  31. clause.Expression = expr
  32. return
  33. }
  34. }
  35. clause.Expression = s.Expression
  36. } else {
  37. clause.Expression = s
  38. }
  39. }