Optimize basic media_file query, avoiding adding "group by" or joining with genres if not required

This commit is contained in:
Deluan 2021-10-29 09:47:12 -04:00
parent 074732b1dc
commit f3fae7e233
1 changed files with 12 additions and 1 deletions

View File

@ -61,7 +61,18 @@ func (r *mediaFileRepository) Put(m *model.MediaFile) error {
func (r *mediaFileRepository) selectMediaFile(options ...model.QueryOptions) SelectBuilder {
sql := r.newSelectWithAnnotation("media_file.id", options...).Columns("media_file.*")
sql = r.withBookmark(sql, "media_file.id")
return r.withGenres(sql).GroupBy("media_file.id")
if len(options) > 0 && options[0].Filters != nil {
s, _, _ := options[0].Filters.ToSql()
// If there's any reference of genre in the filter, joins with genre
if strings.Contains(s, "genre") {
sql = r.withGenres(sql)
// If there's no filter on genre_id, group the results by media_file.id
if !strings.Contains(s, "genre_id") {
sql = sql.GroupBy("media_file.id")
}
}
}
return sql
}
func (r *mediaFileRepository) Get(id string) (*model.MediaFile, error) {