Add NULL FIRST and NULL LAST for most databases #1463
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.
This PR changes how
NULL FIRST
andNULL LAST
is implemented for Postgresql and also allows it to be used by other DB's. Instead of using SQL fragments, it uses Arel methods.This is related to #1373, but does not actually fix the issue for MySQL.
I may look into a PR for that at some point in the future. For example, it could be fixed with a conditional on
::ActiveRecord::Base.connection.adapter_name
and SQL fragments for MySQL.If MySQL users add this configuration, they will get
ActiveRecord::StatementInvalid
errors in some circumstances, in some other other circumstances, they may get unexpected ordering. Becuase of this, I have stated on the documentation that it does not work for MySQL. This has the advantage of just working if Arel is updated to support for MySQL. See rails/rails#50078 for a longer description of how Arel handles null_first/null_last for MySQL at the moment.