diff options
author | Raimonds Simanovskis <raimonds.simanovskis@gmail.com> | 2010-11-07 09:54:43 -0200 |
---|---|---|
committer | Santiago Pastorino <santiago@wyeworks.com> | 2010-11-07 09:55:17 -0200 |
commit | 6709078eb1f61a1f8d54fcd82e9a07e96383ec8a (patch) | |
tree | 2767b7ab2a44ace8e11831a805096b2a28c554ae | |
parent | 1acc086278c974d7a3cdb0459cd65f73641abe33 (diff) | |
download | rails-6709078eb1f61a1f8d54fcd82e9a07e96383ec8a.tar.gz rails-6709078eb1f61a1f8d54fcd82e9a07e96383ec8a.tar.bz2 rails-6709078eb1f61a1f8d54fcd82e9a07e96383ec8a.zip |
use column names as order by complex function parameters, fix for postgresql adapter to correctly remove ASC/DESC
Signed-off-by: Santiago Pastorino <santiago@wyeworks.com>
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb | 2 | ||||
-rw-r--r-- | activerecord/test/cases/relations_test.rb | 14 |
2 files changed, 3 insertions, 13 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb index e7fb8524ce..ccc5085b84 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb @@ -937,7 +937,7 @@ module ActiveRecord # Construct a clean list of column names from the ORDER BY clause, removing # any ASC/DESC modifiers - order_columns = orders.collect { |s| s.split.first } + order_columns = orders.collect { |s| s =~ /^(.+)\s+(ASC|DESC)\s*$/i ? $1 : s } order_columns.delete_if { |c| c.blank? } order_columns = order_columns.zip((0...order_columns.size).to_a).map { |s,i| "#{s} AS alias_#{i}" } diff --git a/activerecord/test/cases/relations_test.rb b/activerecord/test/cases/relations_test.rb index fbc257195c..0fd2b99937 100644 --- a/activerecord/test/cases/relations_test.rb +++ b/activerecord/test/cases/relations_test.rb @@ -146,22 +146,12 @@ class RelationTest < ActiveRecord::TestCase end def test_finding_with_complex_order_and_limit - if current_adapter?(:SQLite3Adapter) - tags = Tag.includes(:taggings).order("MIN(1,2)").limit(1).to_a - else - tags = Tag.includes(:taggings).order("LEAST(1,COS(1)*COS(-1)*COS(RADIANS(taggings.super_tag_id)))").limit(1).to_a - end - + tags = Tag.includes(:taggings).order("REPLACE('abc', taggings.taggable_type, taggings.taggable_type)").limit(1).to_a assert_equal 1, tags.length end def test_finding_with_complex_order - if current_adapter?(:SQLite3Adapter) - tags = Tag.includes(:taggings).order("MIN(1,2)").to_a - else - tags = Tag.includes(:taggings).order("LEAST(1,COS(1)*COS(-1)*COS(RADIANS(taggings.super_tag_id)))").to_a - end - + tags = Tag.includes(:taggings).order("REPLACE('abc', taggings.taggable_type, taggings.taggable_type)").to_a assert_equal 2, tags.length end |