Skip to content

Commit ce5f7d9

Browse files
authored
Merge pull request #86 from hunsra/hunsra-multiple-order-fix
fix: #85
2 parents 20240e6 + 99704ec commit ce5f7d9

File tree

2 files changed

+34
-8
lines changed

2 files changed

+34
-8
lines changed

Postgrest/Table.cs

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -655,15 +655,28 @@ public string GenerateUrl()
655655
foreach (var parsedFilter in _filters.Select(PrepareFilter))
656656
query.Add(parsedFilter.Key, parsedFilter.Value);
657657

658-
foreach (var orderer in _orderers)
658+
if (_orderers.Count > 0)
659659
{
660-
var nullPosAttr = orderer.NullPosition.GetAttribute<MapToAttribute>();
661-
var orderingAttr = orderer.Ordering.GetAttribute<MapToAttribute>();
660+
var order = new StringBuilder();
662661

663-
if (nullPosAttr == null || orderingAttr == null) continue;
662+
foreach (var orderer in _orderers)
663+
{
664+
var nullPosAttr = orderer.NullPosition.GetAttribute<MapToAttribute>();
665+
var orderingAttr = orderer.Ordering.GetAttribute<MapToAttribute>();
666+
667+
if (nullPosAttr == null || orderingAttr == null) continue;
668+
669+
if (order.Length > 0)
670+
order.Append(",");
671+
672+
var selector = !string.IsNullOrEmpty(orderer.ForeignTable)
673+
? orderer.ForeignTable + "(" + orderer.Column + ")"
674+
: orderer.Column;
675+
676+
order.Append($"{selector}.{orderingAttr.Mapping}.{nullPosAttr.Mapping}");
677+
}
664678

665-
var key = !string.IsNullOrEmpty(orderer.ForeignTable) ? $"{orderer.ForeignTable}.order" : "order";
666-
query.Add(key, $"{orderer.Column}.{orderingAttr.Mapping}.{nullPosAttr.Mapping}");
679+
query.Add("order", order.ToString());
667680
}
668681

669682
if (!string.IsNullOrEmpty(_columnQuery))

PostgrestTests/ClientTests.cs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -424,13 +424,26 @@ public async Task TestOrderBy()
424424
{
425425
var client = new Client(BaseUrl);
426426

427+
// Test with a single orderer specified
427428
var orderedResponse = await client.Table<User>().Order("username", Ordering.Descending).Get();
428429
var unorderedResponse = await client.Table<User>().Get();
429430

430-
var supaOrderedUsers = orderedResponse.Models;
431431
var linqOrderedUsers = unorderedResponse.Models.OrderByDescending(u => u.Username).ToList();
432432

433-
CollectionAssert.AreEqual(linqOrderedUsers, supaOrderedUsers);
433+
CollectionAssert.AreEqual(linqOrderedUsers, orderedResponse.Models);
434+
435+
// Test with multiple orderers specified
436+
var multipleOrderedResponse = await client.Table<User>()
437+
.Order(u => u.Username!, Ordering.Descending)
438+
.Order(u => u.Status!, Ordering.Descending)
439+
.Get();
440+
441+
linqOrderedUsers = unorderedResponse.Models
442+
.OrderByDescending(u => u.Username)
443+
.ThenByDescending(u => u.Status)
444+
.ToList();
445+
446+
CollectionAssert.AreEqual(linqOrderedUsers, multipleOrderedResponse.Models);
434447
}
435448

436449
[TestMethod("limit: basic")]

0 commit comments

Comments
 (0)