Skip to content

Commit

Permalink
Don't override the from clauses, close #4129
Browse files Browse the repository at this point in the history
  • Loading branch information
jinzhu committed Mar 4, 2021
1 parent 90476fe commit 6647552
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 0 deletions.
5 changes: 5 additions & 0 deletions callbacks/query.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,11 @@ func BuildQuerySQL(db *gorm.DB) {
}

joins := []clause.Join{}

if fromClause, ok := db.Statement.Clauses["FROM"].Expression.(clause.From); ok {
joins = fromClause.Joins
}

for _, join := range db.Statement.Joins {
if db.Statement.Schema == nil {
joins = append(joins, clause.Join{
Expand Down
45 changes: 45 additions & 0 deletions tests/sql_builder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"testing"

"gorm.io/gorm"
"gorm.io/gorm/clause"
. "gorm.io/gorm/utils/tests"
)

Expand Down Expand Up @@ -242,3 +243,47 @@ func TestCombineStringConditions(t *testing.T) {
t.Fatalf("invalid sql generated, got %v", sql)
}
}

func TestFromWithJoins(t *testing.T) {
var result User

newDB := DB.Session(&gorm.Session{NewDB: true, DryRun: true}).Table("users")

newDB.Clauses(
clause.From{
Tables: []clause.Table{{Name: "users"}},
Joins: []clause.Join{
{
Table: clause.Table{Name: "companies", Raw: false},
ON: clause.Where{
Exprs: []clause.Expression{
clause.Eq{
Column: clause.Column{
Table: "users",
Name: "company_id",
},
Value: clause.Column{
Table: "companies",
Name: "id",
},
},
},
},
},
},
},
)

newDB.Joins("inner join rgs on rgs.id = user.id")

stmt := newDB.First(&result).Statement
str := stmt.SQL.String()

if !strings.Contains(str, "rgs.id = user.id") {
t.Errorf("The second join condition is over written instead of combining")
}

if !strings.Contains(str, "`users`.`company_id` = `companies`.`id`") && !strings.Contains(str, "\"users\".\"company_id\" = \"companies\".\"id\"") {
t.Errorf("The first join condition is over written instead of combining")
}
}

0 comments on commit 6647552

Please sign in to comment.