aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases/adapters/mysql2
diff options
context:
space:
mode:
authorJoseph Palermo <pair+jpalermo@pivotallabs.com>2011-10-09 04:38:36 -0700
committerJeremy Kemper <jeremy@bitsweat.net>2011-10-09 13:14:07 -0700
commitc90e5ce779dbf9bd0ee53b68aee9fde2997be123 (patch)
tree669dc5ffd58bce787a1aeb89c38d53b13a9bea28 /activerecord/test/cases/adapters/mysql2
parent8f8fd4f3aacf252aa0330798590988cc5fe39ba7 (diff)
downloadrails-c90e5ce779dbf9bd0ee53b68aee9fde2997be123.tar.gz
rails-c90e5ce779dbf9bd0ee53b68aee9fde2997be123.tar.bz2
rails-c90e5ce779dbf9bd0ee53b68aee9fde2997be123.zip
Only use LOWER for mysql case insensitive uniqueness check when column has a case sensitive collation.
Diffstat (limited to 'activerecord/test/cases/adapters/mysql2')
-rw-r--r--activerecord/test/cases/adapters/mysql2/case_sensitivity_test.rb38
1 files changed, 38 insertions, 0 deletions
diff --git a/activerecord/test/cases/adapters/mysql2/case_sensitivity_test.rb b/activerecord/test/cases/adapters/mysql2/case_sensitivity_test.rb
new file mode 100644
index 0000000000..0d5ba3079e
--- /dev/null
+++ b/activerecord/test/cases/adapters/mysql2/case_sensitivity_test.rb
@@ -0,0 +1,38 @@
+require "cases/helper"
+require 'models/person'
+
+class Mysql2CaseSensitivityTest < ActiveRecord::TestCase
+
+ class CollationTest < ActiveRecord::Base
+ validates_uniqueness_of :string_cs_column, :case_sensitive => false
+ validates_uniqueness_of :string_ci_column, :case_sensitive => false
+ end
+
+ def test_columns_include_collation_different_from_table
+ assert_equal 'utf8_bin', CollationTest.columns_hash['string_cs_column'].collation
+ assert_equal 'utf8_general_ci', CollationTest.columns_hash['string_ci_column'].collation
+ end
+
+ def test_case_sensitive
+ assert !CollationTest.columns_hash['string_ci_column'].case_sensitive?
+ assert CollationTest.columns_hash['string_cs_column'].case_sensitive?
+ end
+
+ def test_case_insensitive_comparison_for_ci_column
+ CollationTest.create!(:string_ci_column => 'A')
+ invalid = CollationTest.new(:string_ci_column => 'a')
+ queries = assert_sql { invalid.save }
+ ci_uniqueness_query = queries.detect { |q| q.match /string_ci_column/ }
+ assert_no_match(/lower/i, ci_uniqueness_query)
+ end
+
+ def test_case_insensitive_comparison_for_cs_column
+ CollationTest.create!(:string_cs_column => 'A')
+ invalid = CollationTest.new(:string_cs_column => 'a')
+ queries = assert_sql { invalid.save }
+ cs_uniqueness_query = queries.detect { |q| q.match /string_cs_column/ }
+ assert_match(/lower/i, cs_uniqueness_query)
+ end
+
+
+end \ No newline at end of file