fix: omit not work when use join (#5034)
This commit is contained in:
		
							parent
							
								
									98c4b78e4d
								
							
						
					
					
						commit
						c0bea447b9
					
				| @ -100,7 +100,7 @@ func BuildQuerySQL(db *gorm.DB) { | |||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if len(db.Statement.Joins) != 0 || len(joins) != 0 { | 		if len(db.Statement.Joins) != 0 || len(joins) != 0 { | ||||||
| 			if len(db.Statement.Selects) == 0 && db.Statement.Schema != nil { | 			if len(db.Statement.Selects) == 0 && len(db.Statement.Omits) == 0 && db.Statement.Schema != nil { | ||||||
| 				clauseSelect.Columns = make([]clause.Column, len(db.Statement.Schema.DBNames)) | 				clauseSelect.Columns = make([]clause.Column, len(db.Statement.Schema.DBNames)) | ||||||
| 				for idx, dbName := range db.Statement.Schema.DBNames { | 				for idx, dbName := range db.Statement.Schema.DBNames { | ||||||
| 					clauseSelect.Columns[idx] = clause.Column{Table: db.Statement.Table, Name: dbName} | 					clauseSelect.Columns[idx] = clause.Column{Table: db.Statement.Table, Name: dbName} | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ import ( | |||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func TestWithSingleConnection(t *testing.T) { | func TestWithSingleConnection(t *testing.T) { | ||||||
| 	var expectedName = "test" | 	expectedName := "test" | ||||||
| 	var actualName string | 	var actualName string | ||||||
| 
 | 
 | ||||||
| 	setSQL, getSQL := getSetSQL(DB.Dialector.Name()) | 	setSQL, getSQL := getSetSQL(DB.Dialector.Name()) | ||||||
| @ -27,7 +27,6 @@ func TestWithSingleConnection(t *testing.T) { | |||||||
| 		} | 		} | ||||||
| 		return nil | 		return nil | ||||||
| 	}) | 	}) | ||||||
| 
 |  | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		t.Errorf(fmt.Sprintf("WithSingleConnection should work, but got err %v", err)) | 		t.Errorf(fmt.Sprintf("WithSingleConnection should work, but got err %v", err)) | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -158,6 +158,22 @@ func TestJoinsWithSelect(t *testing.T) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func TestJoinWithOmit(t *testing.T) { | ||||||
|  | 	user := *GetUser("joins_with_omit", Config{Pets: 2}) | ||||||
|  | 	DB.Save(&user) | ||||||
|  | 
 | ||||||
|  | 	results := make([]*User, 0) | ||||||
|  | 
 | ||||||
|  | 	if err := DB.Table("users").Omit("name").Where("users.name = ?", "joins_with_omit").Joins("left join pets on pets.user_id = users.id").Find(&results).Error; err != nil { | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if len(results) != 2 || results[0].Name != "" || results[1].Name != "" { | ||||||
|  | 		t.Errorf("Should find all two pets with Join omit and should not find user's name, got %+v", results) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func TestJoinCount(t *testing.T) { | func TestJoinCount(t *testing.T) { | ||||||
| 	companyA := Company{Name: "A"} | 	companyA := Company{Name: "A"} | ||||||
| 	companyB := Company{Name: "B"} | 	companyB := Company{Name: "B"} | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 li-jin-gou
						li-jin-gou