From 6553ad3abff1cdd084aa3a25e3bc931f25ba6ec6 Mon Sep 17 00:00:00 2001 From: Alex MacCaw Date: Sun, 4 May 2008 12:28:08 +0100 Subject: [PATCH] validates_uniqueness_of :key was failing for columns that shared the same name as SQL keywords (such as 'key') --- activerecord/test/models/guid.rb | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) create mode 100644 activerecord/test/models/guid.rb diff --git a/activerecord/test/models/guid.rb b/activerecord/test/models/guid.rb new file mode 100644 index 0000000..9208dc2 --- /dev/null +++ b/activerecord/test/models/guid.rb @@ -0,0 +1,2 @@ +class Guid < ActiveRecord::Base +end \ No newline at end of file -- 1.5.3.7 From e0a28a63d7d53dca68ca8eb183a9998d484b0778 Mon Sep 17 00:00:00 2001 From: Alex MacCaw Date: Sun, 4 May 2008 12:28:32 +0100 Subject: [PATCH] validates_uniqueness_of :key was failing for columns that shared the same name as SQL keywords (such as 'key') --- activerecord/lib/active_record/validations.rb | 2 +- activerecord/test/cases/validations_test.rb | 8 ++++++++ activerecord/test/schema/schema.rb | 4 ++++ 3 files changed, 13 insertions(+), 1 deletions(-) diff --git a/activerecord/lib/active_record/validations.rb b/activerecord/lib/active_record/validations.rb index 50db327..0a97534 100755 --- a/activerecord/lib/active_record/validations.rb +++ b/activerecord/lib/active_record/validations.rb @@ -640,7 +640,7 @@ module ActiveRecord results = finder_class.with_exclusive_scope do connection.select_all( construct_finder_sql( - :select => "#{attr_name}", + :select => "#{connection.quote_column_name(attr_name)}", :from => "#{finder_class.quoted_table_name}", :conditions => [condition_sql, *condition_params] ) diff --git a/activerecord/test/cases/validations_test.rb b/activerecord/test/cases/validations_test.rb index e3ca866..7a7d8ae 100755 --- a/activerecord/test/cases/validations_test.rb +++ b/activerecord/test/cases/validations_test.rb @@ -5,6 +5,7 @@ require 'models/reply' require 'models/person' require 'models/developer' require 'models/warehouse_thing' +require 'models/guid' # The following methods in Topic are used in test_conditional_validation_* class Topic @@ -492,6 +493,13 @@ class ValidationsTest < ActiveRecord::TestCase assert !t2.valid? end end + + def test_validate_uniqueness_with_columns_which_are_sql_keywords + Guid.validates_uniqueness_of :key + g = Guid.new + g.key = "foo" + assert_nothing_raised { !g.valid? } + end def test_validate_straight_inheritance_uniqueness w1 = IneptWizard.create(:name => "Rincewind", :city => "Ankh-Morpork") diff --git a/activerecord/test/schema/schema.rb b/activerecord/test/schema/schema.rb index 818237f..bc25661 100644 --- a/activerecord/test/schema/schema.rb +++ b/activerecord/test/schema/schema.rb @@ -402,6 +402,10 @@ ActiveRecord::Schema.define do [:circles, :squares, :triangles, :non_poly_ones, :non_poly_twos].each do |t| create_table(t, :force => true) { } end + + create_table :guids, :force => true do |t| + t.column :key, :string + end except 'SQLite' do # fk_test_has_fk should be before fk_test_has_pk -- 1.5.3.7