Skip to content

Commit

Permalink
Fix IsFinal not taken into account in filter and sorts
Browse files Browse the repository at this point in the history
  • Loading branch information
System-Glitch committed Aug 2, 2022
1 parent 70465fd commit e305b7f
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 1 deletion.
2 changes: 1 addition & 1 deletion settings.go
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,7 @@ func getField(field string, sch *schema.Schema, blacklist *Blacklist) (*schema.F
rel := field[:i]
field = field[i+1:]
for _, v := range strings.Split(rel, ".") {
if blacklist != nil && sliceutil.ContainsStr(blacklist.RelationsBlacklist, v) {
if blacklist != nil && (sliceutil.ContainsStr(blacklist.RelationsBlacklist, v) || blacklist.IsFinal) {
return nil, nil, ""
}
relation, ok := s.Relationships.Relations[v]
Expand Down
24 changes: 24 additions & 0 deletions settings_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -767,3 +767,27 @@ func TestSelectScope(t *testing.T) {
db = db.Scopes(selectScope(schema.Table, []string{}, true)).Select("*, 1 + 1 AS count").Find(nil)
assert.Equal(t, []string{"1"}, db.Statement.Selects)
}

func TestGetFieldFinalRelation(t *testing.T) {
db, _ := gorm.Open(&tests.DummyDialector{}, nil)
schema, err := parseModel(db, &FilterTestModel{})
if !assert.Nil(t, err) {
return
}

settings := &Settings{Blacklist: Blacklist{IsFinal: true}}
field, sch, joinName := getField("Relation.name", schema, &settings.Blacklist)
assert.Nil(t, field)
assert.Nil(t, sch)
assert.Empty(t, joinName)

settings = &Settings{Blacklist: Blacklist{
Relations: map[string]*Blacklist{
"Relation": {IsFinal: true},
},
}}
field, sch, joinName = getField("Relation.NestedRelation.field", schema, &settings.Blacklist)
assert.Nil(t, field)
assert.Nil(t, sch)
assert.Empty(t, joinName)
}

0 comments on commit e305b7f

Please sign in to comment.