Skip to content

Commit 9ba5342

Browse files
authored
Optimize ResultSet.Intersect method (#312)
1 parent 79f8ec6 commit 9ba5342

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

pkg/authz/query/resultset.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,14 @@ func (rs *ResultSet) Union(other *ResultSet) *ResultSet {
109109

110110
func (rs *ResultSet) Intersect(other *ResultSet) *ResultSet {
111111
resultSet := NewResultSet()
112-
for iter := rs.List(); iter != nil; iter = iter.Next() {
112+
var iter *ResultSetNode
113+
if rs.Len() < other.Len() {
114+
iter = rs.List()
115+
} else {
116+
iter = other.List()
117+
}
118+
119+
for iter != nil {
113120
if other.Has(iter.ObjectType, iter.ObjectId, iter.Relation) {
114121
otherRes := other.Get(iter.ObjectType, iter.ObjectId, iter.Relation)
115122
if !otherRes.IsImplicit {
@@ -118,6 +125,8 @@ func (rs *ResultSet) Intersect(other *ResultSet) *ResultSet {
118125
resultSet.Add(iter.ObjectType, iter.ObjectId, iter.Relation, iter.Warrant, iter.IsImplicit)
119126
}
120127
}
128+
129+
iter = iter.Next()
121130
}
122131

123132
return resultSet

0 commit comments

Comments
 (0)