From f54bc393f184a49ad4ba7d44b304719cf2fc9ba2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohni=C4=87?= Date: Wed, 27 Aug 2008 23:38:55 +0200 Subject: [PATCH] Ensure that paginate_by_sql doesn't change the original SQL query. Closes #235 --- lib/will_paginate/finder.rb | 2 +- test/finder_test.rb | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/will_paginate/finder.rb b/lib/will_paginate/finder.rb index 852bd5d90..20d8d76fa 100644 --- a/lib/will_paginate/finder.rb +++ b/lib/will_paginate/finder.rb @@ -127,7 +127,7 @@ def paginated_each(options = {}, &block) # def paginate_by_sql(sql, options) WillPaginate::Collection.create(*wp_parse_options(options)) do |pager| - query = sanitize_sql(sql) + query = sanitize_sql(sql.dup) original_query = query.dup # add limit, offset add_limit! query, :offset => pager.offset, :limit => pager.per_page diff --git a/test/finder_test.rb b/test/finder_test.rb index 001cf3a7e..ca7afcb08 100644 --- a/test/finder_test.rb +++ b/test/finder_test.rb @@ -397,6 +397,15 @@ def test_paginating_finder_doesnt_mangle_options Developer.paginate(options) assert_equal options, options_before end + + def test_paginate_by_sql_doesnt_change_original_query + query = 'SQL QUERY' + original_query = query.dup + Developer.expects(:find_by_sql).returns([]) + + Developer.paginate_by_sql query, :page => 1 + assert_equal original_query, query + end def test_paginated_each collection = stub('collection', :size => 5, :empty? => false, :per_page => 5)