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 anyorder
has been specified in the query.This now leads to an issue in Solid Queue, where
concurrency_key
is selected and MSSQL complains thatid
is not in itsSELECT
clause.I first looked into fixing this in the SQL adapter, but then found a test in
activerecord
itself (test_pluck_and_distinct
) that orders first before callingdistinct
. So I would suggest to align Solid Queue here and order byconcurrency_key
prior to callingdistinct
.I am aware that the existing code works with SQlite, MySQL and PostgreSQL as these do not require to pass an
ORDER BY
clause withLIMIT
. But I don't think this small addition will cause any troubles on the other DBMS systems.