diff --git a/src/NzbDrone.Core/Datastore/BasicRepository.cs b/src/NzbDrone.Core/Datastore/BasicRepository.cs index 49013dd8a..75cc9510b 100644 --- a/src/NzbDrone.Core/Datastore/BasicRepository.cs +++ b/src/NzbDrone.Core/Datastore/BasicRepository.cs @@ -429,7 +429,7 @@ namespace NzbDrone.Core.Datastore var sortKey = TableMapping.Mapper.GetSortKey(pagingSpec.SortKey); var sortDirection = pagingSpec.SortDirection == SortDirection.Descending ? "DESC" : "ASC"; var pagingOffset = Math.Max(pagingSpec.Page - 1, 0) * pagingSpec.PageSize; - builder.OrderBy($"\"{sortKey}\" {sortDirection} LIMIT {pagingSpec.PageSize} OFFSET {pagingOffset}"); + builder.OrderBy($"\"{sortKey.Table ?? _table}\".\"{sortKey.Column}\" {sortDirection} LIMIT {pagingSpec.PageSize} OFFSET {pagingOffset}"); return queryFunc(builder).ToList(); } diff --git a/src/NzbDrone.Core/Datastore/TableMapper.cs b/src/NzbDrone.Core/Datastore/TableMapper.cs index 21e64f0c8..db006098b 100644 --- a/src/NzbDrone.Core/Datastore/TableMapper.cs +++ b/src/NzbDrone.Core/Datastore/TableMapper.cs @@ -92,33 +92,28 @@ namespace NzbDrone.Core.Datastore return true; } - public string GetSortKey(string sortKey) + public (string Table, string Column) GetSortKey(string sortKey) { string table = null; if (sortKey.Contains('.')) { var split = sortKey.Split('.'); - if (split.Length != 2) + if (split.Length == 2) { - return sortKey.FirstCharToUpper(); + table = split[0]; + sortKey = split[1]; } - - table = split[0]; - sortKey = split[1]; } - if (table != null && !TableMap.Values.Contains(table, StringComparer.OrdinalIgnoreCase)) + if (table != null) { - return sortKey.FirstCharToUpper(); + table = TableMap.Values.FirstOrDefault(x => x.Equals(table, StringComparison.OrdinalIgnoreCase)) ?? table; } - if (!_allowedOrderBy.Contains(sortKey)) - { - return sortKey.FirstCharToUpper(); - } + sortKey = _allowedOrderBy.FirstOrDefault(x => x.Equals(sortKey, StringComparison.OrdinalIgnoreCase)) ?? sortKey; - return _allowedOrderBy.First(x => x.Equals(sortKey, StringComparison.OrdinalIgnoreCase)); + return (table, sortKey.FirstCharToUpper()); } }