diff --git a/persistence/album_repository.go b/persistence/album_repository.go index f04f12dd8..c4229389c 100644 --- a/persistence/album_repository.go +++ b/persistence/album_repository.go @@ -27,7 +27,7 @@ func NewAlbumRepository(ctx context.Context, o orm.QueryExecutor) model.AlbumRep "name": "order_album_name asc, order_album_artist_name asc", "artist": "compilation asc, order_album_artist_name asc, order_album_name asc", "random": "RANDOM()", - "max_year": "max_year asc, name, order_album_name asc", + "max_year": "max_year, coalesce(nullif(original_date, ''), nullif(release_date, '')), name, order_album_name asc", "recently_added": recentlyAddedSort(), } r.filterMappings = map[string]filterFunc{ diff --git a/persistence/sql_base_repository.go b/persistence/sql_base_repository.go index 61d68d909..d1ecf2d18 100644 --- a/persistence/sql_base_repository.go +++ b/persistence/sql_base_repository.go @@ -97,14 +97,16 @@ func (r sqlRepository) buildSortOrder(sort, order string) string { } func splitFunc(delimiter rune) func(c rune) bool { - open := false + open := 0 return func(c rune) bool { - if open { - open = c != ')' + if c == '(' { + open++ return false } - if c == '(' { - open = true + if open > 0 { + if c == ')' { + open-- + } return false } return c == delimiter diff --git a/persistence/sql_base_repository_test.go b/persistence/sql_base_repository_test.go index 42b8bc866..8309a492f 100644 --- a/persistence/sql_base_repository_test.go +++ b/persistence/sql_base_repository_test.go @@ -69,6 +69,10 @@ var _ = Describe("sqlRepository", func() { sql := r.buildSortOrder("name desc, substr(id, 7), status asc", "desc") Expect(sql).To(Equal("name asc, substr(id, 7) desc, status desc")) }) + It("handles nested functions", func() { + sql := r.buildSortOrder("name desc, coalesce(nullif(release_date, ''), nullif(original_date, '')), status asc", "desc") + Expect(sql).To(Equal("name asc, coalesce(nullif(release_date, ''), nullif(original_date, '')) desc, status desc")) + }) }) }) })