Skip to content

Commit

Permalink
Fix Count methods
Browse files Browse the repository at this point in the history
  • Loading branch information
deluan committed Jul 20, 2021
1 parent 20b7e5c commit a0cd585
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 30 deletions.
21 changes: 8 additions & 13 deletions persistence/album_repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,24 +82,22 @@ func artistFilter(field string, value interface{}) Sqlizer {
}

func (r *albumRepository) CountAll(options ...model.QueryOptions) (int64, error) {
sql := r.selectAlbum()
sql = sql.LeftJoin("album_genres ag on album.id = ag.album_id").
LeftJoin("genre on ag.genre_id = genre.id").
GroupBy("album.id")

sql := r.newSelectWithAnnotation("album.id")
sql = r.withGenres(sql)
return r.count(sql, options...)
}

func (r *albumRepository) Exists(id string) (bool, error) {
return r.exists(Select().Where(Eq{"id": id}))
return r.exists(Select().Where(Eq{"album.id": id}))
}

func (r *albumRepository) selectAlbum(options ...model.QueryOptions) SelectBuilder {
return r.newSelectWithAnnotation("album.id", options...).Columns("album.*")
sql := r.newSelectWithAnnotation("album.id", options...).Columns("album.*")
return r.withGenres(sql).GroupBy("album.id")
}

func (r *albumRepository) Get(id string) (*model.Album, error) {
sq := r.selectAlbum().Where(Eq{"id": id})
sq := r.selectAlbum().Where(Eq{"album.id": id})
var res model.Albums
if err := r.queryAll(sq, &res); err != nil {
return nil, err
Expand All @@ -123,10 +121,7 @@ func (r *albumRepository) Put(m *model.Album) error {
}

func (r *albumRepository) GetAll(options ...model.QueryOptions) (model.Albums, error) {
sq := r.selectAlbum(options...).
LeftJoin("album_genres ag on album.id = ag.album_id").
LeftJoin("genre on ag.genre_id = genre.id").
GroupBy("album.id")
sq := r.selectAlbum(options...)
res := model.Albums{}
err := r.queryAll(sq, &res)
if err != nil {
Expand Down Expand Up @@ -398,7 +393,7 @@ func (r *albumRepository) NewInstance() interface{} {
}

func (r albumRepository) Delete(id string) error {
return r.delete(Eq{"id": id})
return r.delete(Eq{"album.id": id})
}

func (r albumRepository) Save(entity interface{}) (string, error) {
Expand Down
12 changes: 4 additions & 8 deletions persistence/artist_repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,14 +45,13 @@ func NewArtistRepository(ctx context.Context, o orm.Ormer) model.ArtistRepositor
}

func (r *artistRepository) selectArtist(options ...model.QueryOptions) SelectBuilder {
return r.newSelectWithAnnotation("artist.id", options...).Columns("artist.*")
sql := r.newSelectWithAnnotation("artist.id", options...).Columns("artist.*")
return r.withGenres(sql).GroupBy("artist.id")
}

func (r *artistRepository) CountAll(options ...model.QueryOptions) (int64, error) {
sql := r.newSelectWithAnnotation("artist.id")
sql = sql.LeftJoin("artist_genres ag on artist.id = ag.artist_id").
LeftJoin("genre on ag.genre_id = genre.id").
GroupBy("artist.id")
sql = r.withGenres(sql)
return r.count(sql, options...)
}

Expand Down Expand Up @@ -88,10 +87,7 @@ func (r *artistRepository) Get(id string) (*model.Artist, error) {
}

func (r *artistRepository) GetAll(options ...model.QueryOptions) (model.Artists, error) {
sel := r.selectArtist(options...).
LeftJoin("artist_genres ag on artist.id = ag.artist_id").
LeftJoin("genre on ag.genre_id = genre.id").
GroupBy("artist.id")
sel := r.selectArtist(options...)
var dba []dbArtist
err := r.queryAll(sel, &dba)
if err != nil {
Expand Down
12 changes: 4 additions & 8 deletions persistence/mediafile_repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,7 @@ func NewMediaFileRepository(ctx context.Context, o orm.Ormer) *mediaFileReposito

func (r *mediaFileRepository) CountAll(options ...model.QueryOptions) (int64, error) {
sql := r.newSelectWithAnnotation("media_file.id")
sql = sql.LeftJoin("media_file_genres mfg on media_file.id = mfg.media_file_id").
LeftJoin("genre on mfg.genre_id = genre.id").
GroupBy("media_file.id")
sql = r.withGenres(sql)
return r.count(sql, options...)
}

Expand All @@ -64,7 +62,8 @@ 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.*")
return r.withBookmark(sql, "media_file.id")
sql = r.withBookmark(sql, "media_file.id")
return r.withGenres(sql).GroupBy("media_file.id")
}

func (r *mediaFileRepository) Get(id string) (*model.MediaFile, error) {
Expand All @@ -81,10 +80,7 @@ func (r *mediaFileRepository) Get(id string) (*model.MediaFile, error) {
}

func (r *mediaFileRepository) GetAll(options ...model.QueryOptions) (model.MediaFiles, error) {
sq := r.selectMediaFile(options...).
LeftJoin("media_file_genres mfg on media_file.id = mfg.media_file_id").
LeftJoin("genre on mfg.genre_id = genre.id").
GroupBy("media_file.id")
sq := r.selectMediaFile(options...)
res := model.MediaFiles{}
err := r.queryAll(sq, &res)
if err != nil {
Expand Down
2 changes: 1 addition & 1 deletion persistence/sql_base_repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ func (r sqlRepository) exists(existsQuery SelectBuilder) (bool, error) {
}

func (r sqlRepository) count(countQuery SelectBuilder, options ...model.QueryOptions) (int64, error) {
countQuery = countQuery.Columns("count(*) as count").From(r.tableName)
countQuery = countQuery.Columns("count(distinct " + r.tableName + ".id) as count").From(r.tableName)
countQuery = r.applyFilters(countQuery, options...)
var res struct{ Count int64 }
err := r.queryOne(countQuery, &res)
Expand Down
5 changes: 5 additions & 0 deletions persistence/sql_genres.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@ import (
"github.com/navidrome/navidrome/model"
)

func (r sqlRepository) withGenres(sql SelectBuilder) SelectBuilder {
return sql.LeftJoin(r.tableName + "_genres ag on " + r.tableName + ".id = ag." + r.tableName + "_id").
LeftJoin("genre on ag.genre_id = genre.id")
}

func (r *sqlRepository) updateGenres(id string, tableName string, genres model.Genres) error {
var ids []string
for _, g := range genres {
Expand Down

0 comments on commit a0cd585

Please sign in to comment.