Merge pull request #25987 from aquajach/master

Fix does_not_support_reverse? to find sql functions with commas in nested brackets
This commit is contained in:
Rafael Mendonça França 2016-08-17 00:28:56 -03:00
commit 8debad2a18
No known key found for this signature in database
GPG Key ID: FC23B6D0F1EEE948
2 changed files with 10 additions and 1 deletions

@ -1137,7 +1137,7 @@ def reverse_sql_order(order_query)
def does_not_support_reverse?(order)
# Uses SQL function with multiple arguments.
/\([^()]*,[^()]*\)/.match?(order) ||
(order.include?(',') && order.split(',').find { |section| section.count('(') != section.count(')')}) ||
# Uses "nulls first" like construction.
/nulls (first|last)\Z/i.match?(order)
end

@ -240,6 +240,15 @@ def test_reverse_order_with_multiargument_function
assert_raises(ActiveRecord::IrreversibleOrderError) do
Topic.order("concat(author_name, title)").reverse_order
end
assert_raises(ActiveRecord::IrreversibleOrderError) do
Topic.order("concat(lower(author_name), title)").reverse_order
end
assert_raises(ActiveRecord::IrreversibleOrderError) do
Topic.order("concat(author_name, lower(title))").reverse_order
end
assert_raises(ActiveRecord::IrreversibleOrderError) do
Topic.order("concat(lower(author_name), title, length(title)").reverse_order
end
end
def test_reverse_order_with_nulls_first_or_last