From 945dd920ab0954acdbc9b3317145b267a9638a50 Mon Sep 17 00:00:00 2001 From: Marcel Molina Date: Thu, 5 Jan 2006 21:40:15 +0000 Subject: Don't raise an exception when there are more keys than there are named bind variables when sanitizing conditions. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3382 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- activerecord/CHANGELOG | 2 ++ activerecord/lib/active_record/base.rb | 1 - activerecord/test/deprecated_finder_test.rb | 6 ------ activerecord/test/finder_test.rb | 16 ---------------- 4 files changed, 2 insertions(+), 23 deletions(-) diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG index 590f4d8300..8841ada2be 100644 --- a/activerecord/CHANGELOG +++ b/activerecord/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Don't raise an exception when there are more keys than there are named bind variables when sanitizing conditions. [Marcel Molina Jr.] + * Multiple enhancements and adjustments to DB2 adaptor. #3377 [contact@maik-schmidt.de] * Sanitize scoped conditions. [Marcel Molina Jr.] diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index 94bdce5b19..7ba5beb12b 100755 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -1140,7 +1140,6 @@ module ActiveRecord #:nodoc: end def replace_named_bind_variables(statement, bind_vars) - raise_if_bind_arity_mismatch(statement, statement.scan(/:(\w+)/).uniq.size, bind_vars.size) statement.gsub(/:(\w+)/) do match = $1.to_sym if bind_vars.include?(match) diff --git a/activerecord/test/deprecated_finder_test.rb b/activerecord/test/deprecated_finder_test.rb index 1409e0d1d4..35c8a2379a 100755 --- a/activerecord/test/deprecated_finder_test.rb +++ b/activerecord/test/deprecated_finder_test.rb @@ -74,12 +74,6 @@ class DeprecatedFinderTest < Test::Unit::TestCase assert_nil Company.find_first(["name = :name", { :name => "37signals!" }]) assert_nil Company.find_first(["name = :name", { :name => "37signals!' OR 1=1" }]) assert_kind_of Time, Topic.find_first(["id = :id", { :id => 1 }]).written_on - assert_raises(ActiveRecord::PreparedStatementInvalid) { - Company.find_first(["id=:id and name=:name", { :id=>3 }]) - } - assert_raises(ActiveRecord::PreparedStatementInvalid) { - Company.find_first(["id=:id", { :id=>3, :name=>"37signals!" }]) - } end def test_count diff --git a/activerecord/test/finder_test.rb b/activerecord/test/finder_test.rb index 7e73eec7ad..515ec0f777 100644 --- a/activerecord/test/finder_test.rb +++ b/activerecord/test/finder_test.rb @@ -157,22 +157,6 @@ class FinderTest < Test::Unit::TestCase assert_nil Company.find(:first, :conditions => ["name = :name", { :name => "37signals!" }]) assert_nil Company.find(:first, :conditions => ["name = :name", { :name => "37signals!' OR 1=1" }]) assert_kind_of Time, Topic.find(:first, :conditions => ["id = :id", { :id => 1 }]).written_on - assert_raises(ActiveRecord::PreparedStatementInvalid) { - Company.find(:first, :conditions => ["id=:id and name=:name", { :id=>3 }]) - } - assert_raises(ActiveRecord::PreparedStatementInvalid) { - Company.find(:first, :conditions => ["id=:id", { :id=>3, :name=>"37signals!" }]) - } - end - - def test_named_bind_arity - assert_nothing_raised { bind '', {} } - assert_raises(ActiveRecord::PreparedStatementInvalid) { bind '', :a => 1 } - assert_raises(ActiveRecord::PreparedStatementInvalid) { bind ':a', {} } # ' ruby-mode - assert_nothing_raised { bind ':a', :a => 1 } # ' ruby-mode - assert_raises(ActiveRecord::PreparedStatementInvalid) { bind ':a', :a => 1, :b => 2 } # ' ruby-mode - assert_nothing_raised { bind ':a :a', :a => 1 } # ' ruby-mode - assert_raises(ActiveRecord::PreparedStatementInvalid) { bind ':a :a', :a => 1, :b => 2 } # ' ruby-mode end def test_bind_enumerable -- cgit v1.2.3