123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- package clause
- // Select select attrs when querying, updating, creating
- type Select struct {
- Distinct bool
- Columns []Column
- Expression Expression
- }
- func (s Select) Name() string {
- return "SELECT"
- }
- func (s Select) Build(builder Builder) {
- if len(s.Columns) > 0 {
- if s.Distinct {
- builder.WriteString("DISTINCT ")
- }
- for idx, column := range s.Columns {
- if idx > 0 {
- builder.WriteByte(',')
- }
- builder.WriteQuoted(column)
- }
- } else {
- builder.WriteByte('*')
- }
- }
- func (s Select) MergeClause(clause *Clause) {
- if s.Expression != nil {
- if s.Distinct {
- if expr, ok := s.Expression.(Expr); ok {
- expr.SQL = "DISTINCT " + expr.SQL
- clause.Expression = expr
- return
- }
- }
- clause.Expression = s.Expression
- } else {
- clause.Expression = s
- }
- }
|