Add limit, order builder
This commit is contained in:
		
							parent
							
								
									1f501c36d7
								
							
						
					
					
						commit
						f0a88b68a9
					
				
							
								
								
									
										26
									
								
								dialects/common/sqlbuilder/limit.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								dialects/common/sqlbuilder/limit.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,26 @@
 | 
			
		||||
package sqlbuilder
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
 | 
			
		||||
	"github.com/jinzhu/gorm"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// BuildLimitCondition build limit condition
 | 
			
		||||
func BuildLimitCondition(tx *gorm.DB) chan *Builder {
 | 
			
		||||
	limitChan := make(chan *Builder)
 | 
			
		||||
 | 
			
		||||
	go func() {
 | 
			
		||||
		builder := &Builder{}
 | 
			
		||||
		if limit := tx.Statement.Limit; limit.Limit != nil {
 | 
			
		||||
			builder.SQL.WriteString(fmt.Sprintf(" LIMIT %d", *limit.Limit))
 | 
			
		||||
 | 
			
		||||
			if limit.Offset != nil {
 | 
			
		||||
				builder.SQL.WriteString(fmt.Sprintf(" OFFSET %d", *limit.Offset))
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		limitChan <- builder
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	return limitChan
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										30
									
								
								dialects/common/sqlbuilder/order.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								dialects/common/sqlbuilder/order.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,30 @@
 | 
			
		||||
package sqlbuilder
 | 
			
		||||
 | 
			
		||||
import "github.com/jinzhu/gorm"
 | 
			
		||||
 | 
			
		||||
// BuildOrderCondition build order condition
 | 
			
		||||
func BuildOrderCondition(tx *gorm.DB) chan *Builder {
 | 
			
		||||
	orderChan := make(chan *Builder)
 | 
			
		||||
 | 
			
		||||
	go func() {
 | 
			
		||||
		builder := &Builder{}
 | 
			
		||||
 | 
			
		||||
		if orderBy := tx.Statement.OrderBy; len(orderBy) > 0 {
 | 
			
		||||
			builder.SQL.WriteString(" ORDER BY ")
 | 
			
		||||
			for i, by := range orderBy {
 | 
			
		||||
				if i > 0 {
 | 
			
		||||
					builder.SQL.WriteString(", ")
 | 
			
		||||
				}
 | 
			
		||||
				if str, ok := by.(string); ok {
 | 
			
		||||
					builder.SQL.WriteString(str)
 | 
			
		||||
				} else {
 | 
			
		||||
					buildCondition(tx, by, builder)
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		orderChan <- builder
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	return orderChan
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user