diff --git a/pkg/sqlite/filter.go b/pkg/sqlite/filter.go index 143487af2..81a58f74b 100644 --- a/pkg/sqlite/filter.go +++ b/pkg/sqlite/filter.go @@ -127,20 +127,27 @@ func (j join) toSQL() string { type joins []join +// addUnique only adds if not already present +// returns true if added +func (j *joins) addUnique(newJoin join) bool { + found := false + for _, jj := range *j { + if jj.equals(newJoin) { + found = true + break + } + } + + if !found { + *j = append(*j, newJoin) + } + return !found +} + func (j *joins) add(newJoins ...join) { // only add if not already joined for _, newJoin := range newJoins { - found := false - for _, jj := range *j { - if jj.equals(newJoin) { - found = true - break - } - } - - if !found { - *j = append(*j, newJoin) - } + j.addUnique(newJoin) } } diff --git a/pkg/sqlite/query.go b/pkg/sqlite/query.go index 4f4c0c8db..478543829 100644 --- a/pkg/sqlite/query.go +++ b/pkg/sqlite/query.go @@ -132,9 +132,10 @@ func (qb *queryBuilder) join(table, as, onClause string) { } func (qb *queryBuilder) addJoins(joins ...join) { - qb.joins.add(joins...) for _, j := range joins { - qb.args = append(qb.args, j.args...) + if qb.joins.addUnique(j) { + qb.args = append(qb.args, j.args...) + } } }