fix: always append the unique __id tie-breaker to the sort so paginated results are deterministic - #122
Open
ThibaudDauce wants to merge 1 commit into
Open
fix: always append the unique __id tie-breaker to the sort so paginated results are deterministic#122ThibaudDauce wants to merge 1 commit into
ThibaudDauce wants to merge 1 commit into
Conversation
…ed results are deterministic
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Downloading the metrics CSV of an organization from the front gives duplicated rows. And it's worse than duplicates: some rows are simply missing.
Following the
links.nextlike the front does, on organization534fff94a3a7292c64a77fc1(355 pages):metric_month__sort=desc(the one used by the front)__id__sort=ascThe front asks for
metric_month__sort=desc, butmetric_monthis not unique (~1500 rows share the same month here) and we only added the__idtie-breaker when no sort was requested. Postgres doesn't guarantee any order between the ties, and it changes from one query to the next, so with an offset pagination some rows come back on the following page and others are never returned.__id.ascis now always appended at the end of theORDER BY, except with aggregators since it's not in theGROUP BY.The sorts are also gathered in a single
order=now: two__sortin the same query were producing two competingorder=parameters and only one was kept.Nothing to change on the front,
metric_month__sort=desccan stay.