github.com/systematiccaos/gorm@v1.22.6/clause/limit.go (about) 1 package clause 2 3 import "strconv" 4 5 // Limit limit clause 6 type Limit struct { 7 Limit int 8 Offset int 9 } 10 11 // Name where clause name 12 func (limit Limit) Name() string { 13 return "LIMIT" 14 } 15 16 // Build build where clause 17 func (limit Limit) Build(builder Builder) { 18 if limit.Limit > 0 { 19 builder.WriteString("LIMIT ") 20 builder.WriteString(strconv.Itoa(limit.Limit)) 21 } 22 if limit.Offset > 0 { 23 if limit.Limit > 0 { 24 builder.WriteString(" ") 25 } 26 builder.WriteString("OFFSET ") 27 builder.WriteString(strconv.Itoa(limit.Offset)) 28 } 29 } 30 31 // MergeClause merge order by clauses 32 func (limit Limit) MergeClause(clause *Clause) { 33 clause.Name = "" 34 35 if v, ok := clause.Expression.(Limit); ok { 36 if limit.Limit == 0 && v.Limit != 0 { 37 limit.Limit = v.Limit 38 } 39 40 if limit.Offset == 0 && v.Offset > 0 { 41 limit.Offset = v.Offset 42 } else if limit.Offset < 0 { 43 limit.Offset = 0 44 } 45 } 46 47 clause.Expression = limit 48 }