Support Raw func support use Limit method
This commit is contained in:
		
							parent
							
								
									2202e99cbf
								
							
						
					
					
						commit
						5eb8039603
					
				@ -28,13 +28,28 @@ func Query(db *gorm.DB) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func BuildQuerySQL(db *gorm.DB) {
 | 
			
		||||
	var hasLimitClause bool
 | 
			
		||||
	sqlStr := db.Statement.SQL.String()
 | 
			
		||||
	if db.Statement.Schema != nil && !db.Statement.Unscoped {
 | 
			
		||||
		for _, c := range db.Statement.Schema.QueryClauses {
 | 
			
		||||
			db.Statement.AddClause(c)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if db.Statement.SQL.String() == "" {
 | 
			
		||||
	for cla, _ := range db.Statement.Clauses {
 | 
			
		||||
		if cla == "LIMIT" {
 | 
			
		||||
			hasLimitClause = true
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if sqlStr != "" && !strings.Contains(strings.ToUpper(sqlStr), "LIMIT") && hasLimitClause {
 | 
			
		||||
		if !strings.HasSuffix(db.Statement.SQL.String(), " ") {
 | 
			
		||||
			db.Statement.SQL.WriteByte(' ')
 | 
			
		||||
		}
 | 
			
		||||
		db.Statement.Build("LIMIT")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if sqlStr == "" {
 | 
			
		||||
		db.Statement.SQL.Grow(100)
 | 
			
		||||
		clauseSelect := clause.Select{Distinct: db.Statement.Distinct}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										35
									
								
								chainable_api_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								chainable_api_test.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,35 @@
 | 
			
		||||
package gorm_test
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"gorm.io/gorm/callbacks"
 | 
			
		||||
	"gorm.io/gorm/utils/tests"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"gorm.io/gorm"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestDB_Raw_Limit(t *testing.T) {
 | 
			
		||||
	var (
 | 
			
		||||
		t1 *gorm.DB
 | 
			
		||||
		t2 *gorm.DB
 | 
			
		||||
		t3 *gorm.DB
 | 
			
		||||
	)
 | 
			
		||||
	tx, _ := gorm.Open(
 | 
			
		||||
		tests.DummyDialector{},
 | 
			
		||||
		//&gorm.Config{Logger: logger.Default.LogMode(logger.Info)},
 | 
			
		||||
	)
 | 
			
		||||
	t1 = tx.Table("pod_events").Limit(1)
 | 
			
		||||
	t2 = tx.Raw("SELECT * FROM `pod_events`").Limit(1)
 | 
			
		||||
	t3 = tx.Raw("SELECT * FROM `pod_events` LIMIT 1").Limit(1)
 | 
			
		||||
	t1.Statement.BuildClauses = []string{"SELECT", "FROM", "WHERE", "GROUP BY", "ORDER BY", "LIMIT", "FOR"}
 | 
			
		||||
	callbacks.BuildQuerySQL(t1)
 | 
			
		||||
	callbacks.BuildQuerySQL(t2)
 | 
			
		||||
	callbacks.BuildQuerySQL(t3)
 | 
			
		||||
	s1 := t1.Statement.SQL.String()
 | 
			
		||||
	s2 := t2.Statement.SQL.String()
 | 
			
		||||
	s3 := t3.Statement.SQL.String()
 | 
			
		||||
	if !strings.EqualFold(s1, s2) || !strings.EqualFold(s1, s3) {
 | 
			
		||||
		t.Errorf("s1 != s2 != s3\ns1 = %v\ns2 = %v\ns3 = %v\n", s1, s2, s3)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user