GORM Playground Link
https://github.com/go-gorm/playground/pull/809
Description
There is introduced a breaking change in gorm v1.6.0. We have code similar to this snippet:
func Test_gorm_query(t *testing.T) {
// Arrange
type Parent struct {
gorm.Model
Field string
}
type Child struct {
gorm.Model
ParentId uint
Parent Parent
Data string
}
setupDatabaseEnvironment(&Parent{}, &Child{})
var output Parent
Database.DB().
Joins("LEFT JOIN children ON children.parent_id = parents.id").
Where(map[string]any{
"children.data": "gorm",
}).
Limit(1).
Find(&output)
}
And when upgrading from 1.5.7 to 1.6.0 the resulting query changes causing an error.
Before:
- gorm.io/driver/mysql v1.5.7
- gorm.io/driver/postgres v1.5.11
- gorm.io/driver/sqlite v1.5.7
- gorm.io/gorm v1.25.12
- gorm.io/plugin/dbresolver v1.5.3
OK:
SELECT `parents`.`id`,`parents`.`created_at`,`parents`.`updated_at`,`parents`.`deleted_at`,`parents`.`field` FROM `parents` LEFT JOIN children ON children.parent_id = parents.id WHERE `children`.`data` = "gorm" AND `parents`.`deleted_at` IS NULL LIMIT 1
After:
- gorm.io/driver/mysql v1.6.0
- gorm.io/driver/postgres v1.6.0
- gorm.io/driver/sqlite v1.6.0
- gorm.io/gorm v1.30.0
- gorm.io/plugin/dbresolver v1.6.0
no such column: parents.children.data:
SELECT `parents`.`id`,`parents`.`created_at`,`parents`.`updated_at`,`parents`.`deleted_at`,`parents`.`field` FROM `parents` LEFT JOIN children ON children.parent_id = parents.id WHERE `parents`.`children`.`data` = "gorm" AND `parents`.`deleted_at` IS NULL LIMIT 1
Expected Behaviour
We would expect the same behaviour to continue between non-major versions.