From b7ed3589a86f36f2a54f85df6f8b955638b6f873 Mon Sep 17 00:00:00 2001 From: Martin Angers Date: Wed, 10 Nov 2021 12:24:19 -0500 Subject: [PATCH] Fix where clause building with right hosts alias (#2875) --- server/datastore/mysql/hosts.go | 2 +- server/datastore/mysql/labels.go | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/server/datastore/mysql/hosts.go b/server/datastore/mysql/hosts.go index b37a6294c0..841f3a460d 100644 --- a/server/datastore/mysql/hosts.go +++ b/server/datastore/mysql/hosts.go @@ -737,7 +737,7 @@ func (d *Datastore) SearchHosts(ctx context.Context, filter fleet.TeamFilter, qu } args = append(args, in) sqlb.WriteString(" id NOT IN (?) AND ") - sqlb.WriteString(d.whereFilterHostsByTeams(filter, "hosts")) + sqlb.WriteString(d.whereFilterHostsByTeams(filter, "h")) sqlb.WriteString(` ORDER BY hst.seen_time DESC LIMIT 10`) sql, args, err := sqlx.In(sqlb.String(), args...) diff --git a/server/datastore/mysql/labels.go b/server/datastore/mysql/labels.go index a9a338f8a4..4a9dbc295d 100644 --- a/server/datastore/mysql/labels.go +++ b/server/datastore/mysql/labels.go @@ -443,6 +443,7 @@ func (d *Datastore) ListHostsInLabel(ctx context.Context, filter fleet.TeamFilte return hosts, nil } +// NOTE: the hosts table must be aliased to `h` in the query passed to this function. func (d *Datastore) applyHostLabelFilters(filter fleet.TeamFilter, lid uint, query string, opt fleet.HostListOptions) (string, []interface{}) { params := []interface{}{lid} @@ -456,7 +457,7 @@ func (d *Datastore) applyHostLabelFilters(filter fleet.TeamFilter, lid uint, que } func (d *Datastore) CountHostsInLabel(ctx context.Context, filter fleet.TeamFilter, lid uint, opt fleet.HostListOptions) (int, error) { - query := `SELECT count(*) FROM label_membership lm + query := `SELECT count(*) FROM label_membership lm JOIN hosts h ON (lm.host_id = h.id) LEFT JOIN host_seen_times hst ON (h.id=hst.host_id) WHERE lm.label_id = ?`