From 501ae92a32285528c8bbdcf2af422eadb6a63c0e Mon Sep 17 00:00:00 2001 From: Ryuta Kamizono Date: Tue, 26 Nov 2013 04:59:18 +0900 Subject: Only use BINARY for mysql case sensitive uniqueness check when column has a case insensitive collation. --- .../lib/active_record/connection_adapters/abstract_adapter.rb | 5 +++++ .../active_record/connection_adapters/abstract_mysql_adapter.rb | 8 ++++++++ 2 files changed, 13 insertions(+) (limited to 'activerecord/lib/active_record/connection_adapters') diff --git a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb index 8aa1ce5c04..21829b4932 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb @@ -334,6 +334,11 @@ module ActiveRecord node end + def case_sensitive_comparison(table, attribute, column, value) + value = case_sensitive_modifier(value) unless value.nil? + table[attribute].eq(value) + end + def case_insensitive_comparison(table, attribute, column, value) table[attribute].lower.eq(table.lower(value)) end diff --git a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb index dcbc3466b2..b17ac5ebf6 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb @@ -585,6 +585,14 @@ module ActiveRecord Arel::Nodes::Bin.new(node) end + def case_sensitive_comparison(table, attribute, column, value) + if column.case_sensitive? + table[attribute].eq(value) + else + super + end + end + def case_insensitive_comparison(table, attribute, column, value) if column.case_sensitive? super -- cgit v1.2.3 From 398b4de011e5bbfd10408ed591e92f192cb37327 Mon Sep 17 00:00:00 2001 From: Vipul A M Date: Mon, 3 Mar 2014 02:35:42 +0530 Subject: Fix warnings due to: - unused variable in PG Adapter. - Ambiguous argument warning from range_test for use - to + Infinity range without brackets. --- .../lib/active_record/connection_adapters/postgresql_adapter.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'activerecord/lib/active_record/connection_adapters') diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb index d1fb132b60..9f18fdd3e5 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb @@ -822,7 +822,7 @@ module ActiveRecord # populate range types ranges.find_all { |row| type_map.key? row['rngsubtype'].to_i }.each do |row| subtype = type_map[row['rngsubtype'].to_i] - range = OID::Range.new type_map[row['rngsubtype'].to_i] + range = OID::Range.new subtype type_map[row['oid'].to_i] = range end end -- cgit v1.2.3 From 3413b88a3d6b2b022dfb57e42565446b1e024314 Mon Sep 17 00:00:00 2001 From: Erik Michaels-Ober Date: Mon, 3 Mar 2014 19:23:22 -0800 Subject: Replace map.flatten with flat_map in activerecord --- .../lib/active_record/connection_adapters/abstract_mysql_adapter.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'activerecord/lib/active_record/connection_adapters') diff --git a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb index 23edc8b955..baac9522b6 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb @@ -459,7 +459,7 @@ module ActiveRecord end def bulk_change_table(table_name, operations) #:nodoc: - sqls = operations.map do |command, args| + sqls = operations.flat_map do |command, args| table, arguments = args.shift, args method = :"#{command}_sql" @@ -468,7 +468,7 @@ module ActiveRecord else raise "Unknown method called : #{method}(#{arguments.inspect})" end - end.flatten.join(", ") + end.join(", ") execute("ALTER TABLE #{quote_table_name(table_name)} #{sqls}") end -- cgit v1.2.3 From 5c55aafd38f45ac019573f98438ffdbdc8c580f9 Mon Sep 17 00:00:00 2001 From: Dieter Komendera Date: Mon, 9 Dec 2013 18:52:36 +0100 Subject: Add Enum type to postgresql adapter's oids to prevent unknown OID warnings. --- .../lib/active_record/connection_adapters/postgresql/oid.rb | 6 ++++++ .../lib/active_record/connection_adapters/postgresql_adapter.rb | 6 ++++++ 2 files changed, 12 insertions(+) (limited to 'activerecord/lib/active_record/connection_adapters') diff --git a/activerecord/lib/active_record/connection_adapters/postgresql/oid.rb b/activerecord/lib/active_record/connection_adapters/postgresql/oid.rb index e7df073627..697915f3e9 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql/oid.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql/oid.rb @@ -229,6 +229,12 @@ This is not reliable and will be removed in the future. end end + class Enum < Type + def type_cast(value) + value.to_s + end + end + class Hstore < Type def type_cast_for_write(value) ConnectionAdapters::PostgreSQLColumn.hstore_to_string value diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb index 9f18fdd3e5..a56ef91d07 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb @@ -801,6 +801,12 @@ module ActiveRecord leaves, nodes = nodes.partition { |row| row['typelem'] == '0' } arrays, nodes = nodes.partition { |row| row['typinput'] == 'array_in' } + # populate the enum types + enums, leaves = leaves.partition { |row| row['typinput'] == 'enum_in' } + enums.each do |row| + type_map[row['oid'].to_i] = OID::Enum.new + end + # populate the base types leaves.find_all { |row| OID.registered_type? row['typname'] }.each do |row| type_map[row['oid'].to_i] = OID::NAMES[row['typname']] -- cgit v1.2.3 From b3e0da3062f809599fb4da9f9a29ed45aebd1ff6 Mon Sep 17 00:00:00 2001 From: lsylvester Date: Tue, 11 Mar 2014 08:10:25 +1100 Subject: register OID for PostgreSQL citex datatype [Troy Kruthoff & Lachlan Sylvester] citext makes it possible to use AR Hash finders for case-insensitive matching as sql UPPER/LOWER functions are not needed. --- .../lib/active_record/connection_adapters/postgresql/oid.rb | 1 + .../lib/active_record/connection_adapters/postgresql_adapter.rb | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) (limited to 'activerecord/lib/active_record/connection_adapters') diff --git a/activerecord/lib/active_record/connection_adapters/postgresql/oid.rb b/activerecord/lib/active_record/connection_adapters/postgresql/oid.rb index 697915f3e9..5d32aaed50 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql/oid.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql/oid.rb @@ -375,6 +375,7 @@ This is not reliable and will be removed in the future. register_type 'circle', OID::Text.new register_type 'hstore', OID::Hstore.new register_type 'json', OID::Json.new + register_type 'citext', OID::Text.new register_type 'ltree', OID::Text.new register_type 'cidr', OID::Cidr.new diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb index a56ef91d07..f7b053aec6 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb @@ -215,6 +215,8 @@ module ActiveRecord # Character types when /^(?:character varying|bpchar)(?:\(\d+\))?$/ :string + when /^citext(?:\(\d+\))?$/ + :citext # Binary data types when 'bytea' :binary @@ -393,6 +395,10 @@ module ActiveRecord column name, type, options end + def citext(name, options = {}) + column(name, 'citext', options) + end + def column(name, type = nil, options = {}) super column = self[name] @@ -441,7 +447,8 @@ module ActiveRecord macaddr: { name: "macaddr" }, uuid: { name: "uuid" }, json: { name: "json" }, - ltree: { name: "ltree" } + ltree: { name: "ltree" }, + citext: { name: "citext" } } include Quoting -- cgit v1.2.3 From 3f5339f48e3ce3eb40eb51fb1b686914a719a26a Mon Sep 17 00:00:00 2001 From: Yves Senn Date: Tue, 11 Mar 2014 08:27:59 +0100 Subject: `change_table` supports `citext`. Follow up to #12523. --- .../lib/active_record/connection_adapters/postgresql_adapter.rb | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'activerecord/lib/active_record/connection_adapters') diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb index f7b053aec6..e5f7913c70 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb @@ -355,6 +355,10 @@ module ActiveRecord def json(name, options = {}) column(name, 'json', options) end + + def citext(name, options = {}) + column(name, 'citext', options) + end end class TableDefinition < ActiveRecord::ConnectionAdapters::TableDefinition -- cgit v1.2.3 From df5a38fc6aeb8dfaa816fcbe0efb3fe4de169833 Mon Sep 17 00:00:00 2001 From: Tatsuhiko Miyagawa Date: Mon, 12 Nov 2012 13:48:50 -0800 Subject: MySQL 5.6 and later supports microsecond precision in datetime. You might want to branch it to include this only for 5.6, but passing these values to < 5.6 doesn't cause issues either. --- .../lib/active_record/connection_adapters/mysql2_adapter.rb | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'activerecord/lib/active_record/connection_adapters') diff --git a/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb b/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb index b07b0cb826..2b5049f5a5 100644 --- a/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb @@ -83,6 +83,14 @@ module ActiveRecord @connection.escape(string) end + def quoted_date(value) + if value.acts_like?(:time) && value.respond_to?(:usec) + "#{super}.#{sprintf("%06d", value.usec)}" + else + super + end + end + # CONNECTION MANAGEMENT ==================================== def active? -- cgit v1.2.3