Order by concurrency_key before distinct
#539
Merged
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.
Microsoft SQL Server requires a deterministic order when using
limit(aka you have to provideORDER BY). By default, in the MSSQL adapter, we inject aORDER BY [primary_key]clause to achieve so, if not anyorderhas been specified in the query.This now leads to an issue in Solid Queue, where
concurrency_keyis selected and MSSQL complains thatidis not in itsSELECTclause.I first looked into fixing this in the SQL adapter, but then found a test in
activerecorditself (test_pluck_and_distinct) that orders first before callingdistinct. So I would suggest to align Solid Queue here and order byconcurrency_keyprior to callingdistinct.I am aware that the existing code works with SQlite, MySQL and PostgreSQL as these do not require to pass an
ORDER BYclause withLIMIT. But I don't think this small addition will cause any troubles on the other DBMS systems.