Added table identifier to OrderBy to avoid column ambiguity on joins

Co-Authored-By: Richard <1252123+kharenis@users.noreply.github.com>
(cherry picked from commit c57ceac4debf7419be84096f997ba7b75c906586)

Closes #3993
pull/4741/head
Qstick 9 months ago committed by Bogdan
parent 7c4f0c597e
commit daf8b94c8e

@ -429,7 +429,7 @@ namespace NzbDrone.Core.Datastore
var sortKey = TableMapping.Mapper.GetSortKey(pagingSpec.SortKey); var sortKey = TableMapping.Mapper.GetSortKey(pagingSpec.SortKey);
var sortDirection = pagingSpec.SortDirection == SortDirection.Descending ? "DESC" : "ASC"; var sortDirection = pagingSpec.SortDirection == SortDirection.Descending ? "DESC" : "ASC";
var pagingOffset = Math.Max(pagingSpec.Page - 1, 0) * pagingSpec.PageSize; 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(); return queryFunc(builder).ToList();
} }

@ -92,33 +92,28 @@ namespace NzbDrone.Core.Datastore
return true; return true;
} }
public string GetSortKey(string sortKey) public (string Table, string Column) GetSortKey(string sortKey)
{ {
string table = null; string table = null;
if (sortKey.Contains('.')) if (sortKey.Contains('.'))
{ {
var split = sortKey.Split('.'); 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)) sortKey = _allowedOrderBy.FirstOrDefault(x => x.Equals(sortKey, StringComparison.OrdinalIgnoreCase)) ?? sortKey;
{
return sortKey.FirstCharToUpper();
}
return _allowedOrderBy.First(x => x.Equals(sortKey, StringComparison.OrdinalIgnoreCase)); return (table, sortKey.FirstCharToUpper());
} }
} }

Loading…
Cancel
Save