Merge pull request #1 from BlueCodeSystems/AndreLesa-Issue-1339
Bug reproduction script
This commit is contained in:
		
						commit
						1efc6675c8
					
				
							
								
								
									
										67
									
								
								preload_sql.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								preload_sql.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,67 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	_ "github.com/go-sql-driver/mysql"
 | 
			
		||||
	"github.com/jinzhu/gorm"
 | 
			
		||||
	_ "github.com/lib/pq"
 | 
			
		||||
	_ "github.com/mattn/go-sqlite3"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var Db *gorm.DB
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	var err error
 | 
			
		||||
	Db, err = gorm.Open("sqlite3", "test.db")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	Db.LogMode(true)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	facilityID := "LS342"
 | 
			
		||||
	clientID := "222017"
 | 
			
		||||
 | 
			
		||||
	type TableOptionList struct {
 | 
			
		||||
		ID   int `gorm:"primary_key"`
 | 
			
		||||
		Name string
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	type TableClient struct {
 | 
			
		||||
		gorm.Model
 | 
			
		||||
		FacilityID    string            `gorm:"primary_key"`
 | 
			
		||||
		ClientID      string            `gorm:"primary_key"`
 | 
			
		||||
		SpecificNeeds []TableOptionList `gorm:"many2many:options_specific_needs;ForeignKey:facility_id,id"`
 | 
			
		||||
 | 
			
		||||
		Client   TableOptionList
 | 
			
		||||
		Facility TableOptionList
 | 
			
		||||
	}
 | 
			
		||||
	Db.AutoMigrate(&TableClient{})
 | 
			
		||||
	Db.AutoMigrate(&TableOptionList{})
 | 
			
		||||
 | 
			
		||||
	var newClient TableClient
 | 
			
		||||
	Db.FirstOrCreate(&newClient, TableClient{FacilityID: facilityID, ClientID: clientID})
 | 
			
		||||
 | 
			
		||||
	Db.Model(&newClient).Association("SpecificNeeds").Append([]TableOptionList{TableOptionList{ID: 1, Name: "Lusaka"}})
 | 
			
		||||
 | 
			
		||||
	//Test with standard Preload - wrong SQL that won't work on Sqlite because
 | 
			
		||||
	//of the IN statement
 | 
			
		||||
	var DbClient TableClient
 | 
			
		||||
	Db.Where("facility_id = ? AND client_id = ?", facilityID, clientID).
 | 
			
		||||
		Preload("SpecificNeeds").
 | 
			
		||||
		First(&DbClient)
 | 
			
		||||
 | 
			
		||||
	//Try with custom SQL - instead it runs the custom SQL then appends the bad
 | 
			
		||||
	//SQL too with an AND statement.
 | 
			
		||||
	var DbClient2 TableClient
 | 
			
		||||
	Db.Where("facility_id = ? AND client_id = ?", facilityID, clientID).
 | 
			
		||||
		Preload("SpecificNeeds", func(s *gorm.DB) *gorm.DB {
 | 
			
		||||
		return s.Where(
 | 
			
		||||
			`SELECT *
 | 
			
		||||
			FROM "table_option_lists"
 | 
			
		||||
			INNER JOIN "options_specific_needs"
 | 
			
		||||
			ON "options_specific_needs"."table_option_list_id" = "table_option_lists"."id"
 | 
			
		||||
			WHERE ("options_specific_needs"."table_client_facility_id" = ? AND "options_specific_needs"."table_client_id" = ?)`, facilityID, clientID)
 | 
			
		||||
	}).
 | 
			
		||||
		First(&DbClient2)
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user