aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorRafael Mendonça França <rafaelmfranca@gmail.com>2014-05-27 11:28:00 -0300
committerRafael Mendonça França <rafaelmfranca@gmail.com>2014-05-27 11:28:00 -0300
commit52434e9a512477d632b492793bcae5b4732ea689 (patch)
treecc72e7f445021e721832a817679fcf0d4a5cab05 /activerecord
parent3067aee91fa4eaaa82a58a79d32c72fd9b9b3f51 (diff)
parent6b46106d65c749d4eba304b753f9a70ede6ed5d9 (diff)
downloadrails-52434e9a512477d632b492793bcae5b4732ea689.tar.gz
rails-52434e9a512477d632b492793bcae5b4732ea689.tar.bz2
rails-52434e9a512477d632b492793bcae5b4732ea689.zip
Merge pull request #15295 from sgrif/sg-deprecate-decimals
Deprecate decimal columns being automatically treated as integers
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract_adapter.rb1
-rw-r--r--activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb2
-rw-r--r--activerecord/lib/active_record/properties.rb14
-rw-r--r--activerecord/test/cases/base_test.rb4
-rw-r--r--activerecord/test/cases/calculations_test.rb4
-rw-r--r--activerecord/test/cases/helper.rb1
-rw-r--r--activerecord/test/cases/migration_test.rb5
7 files changed, 29 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb
index ca5db4095e..6ecd4efdc8 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb
@@ -396,6 +396,7 @@ module ActiveRecord
precision = extract_precision(sql_type)
if scale == 0
+ # FIXME: Remove this class as well
Type::DecimalWithoutScale.new(precision: precision)
else
Type::Decimal.new(precision: precision, scale: scale)
diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
index 1f327d1f2f..027169ae3c 100644
--- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
@@ -478,6 +478,8 @@ module ActiveRecord
# places after decimal = fmod - 4 & 0xffff
# places before decimal = (fmod - 4) >> 16 & 0xffff
if fmod && (fmod - 4 & 0xffff).zero?
+ # FIXME: Remove this class, and the second argument to
+ # lookups on PG
Type::DecimalWithoutScale.new(precision: precision)
else
OID::Decimal.new(precision: precision, scale: scale)
diff --git a/activerecord/lib/active_record/properties.rb b/activerecord/lib/active_record/properties.rb
index a5d724de0e..39c39ad9ff 100644
--- a/activerecord/lib/active_record/properties.rb
+++ b/activerecord/lib/active_record/properties.rb
@@ -64,7 +64,19 @@ module ActiveRecord
# Returns an array of column objects for the table associated with this class.
def columns
- @columns ||= add_user_provided_columns(connection.schema_cache.columns(table_name))
+ @columns ||= add_user_provided_columns(connection.schema_cache.columns(table_name)).each do |column|
+ if Type::DecimalWithoutScale === column.cast_type
+ ActiveSupport::Deprecation.warn <<-MESSAGE.strip_heredoc
+ Decimal columns with 0 scale being automatically treated as integers
+ is deprecated, and will be removed in a future version of Rails. If
+ you'd like to keep this behavior, add
+
+ property :#{column.name}, Type::Integer.new
+
+ to your #{name} model.
+ MESSAGE
+ end
+ end
end
# Returns a hash of column objects for the table associated with this class.
diff --git a/activerecord/test/cases/base_test.rb b/activerecord/test/cases/base_test.rb
index 1b3aa84a06..d65c4b0638 100644
--- a/activerecord/test/cases/base_test.rb
+++ b/activerecord/test/cases/base_test.rb
@@ -984,6 +984,10 @@ class BasicsTest < ActiveRecord::TestCase
class NumericData < ActiveRecord::Base
self.table_name = 'numeric_data'
+
+ property :world_population, Type::Integer.new
+ property :my_house_population, Type::Integer.new
+ property :atoms_in_universe, Type::Integer.new
end
def test_big_decimal_conditions
diff --git a/activerecord/test/cases/calculations_test.rb b/activerecord/test/cases/calculations_test.rb
index b8de78934e..b9445ee072 100644
--- a/activerecord/test/cases/calculations_test.rb
+++ b/activerecord/test/cases/calculations_test.rb
@@ -15,6 +15,10 @@ Company.has_many :accounts
class NumericData < ActiveRecord::Base
self.table_name = 'numeric_data'
+
+ property :world_population, Type::Integer.new
+ property :my_house_population, Type::Integer.new
+ property :atoms_in_universe, Type::Integer.new
end
class CalculationsTest < ActiveRecord::TestCase
diff --git a/activerecord/test/cases/helper.rb b/activerecord/test/cases/helper.rb
index eaf2cada9d..937646b09a 100644
--- a/activerecord/test/cases/helper.rb
+++ b/activerecord/test/cases/helper.rb
@@ -9,6 +9,7 @@ require 'active_record'
require 'cases/test_case'
require 'active_support/dependencies'
require 'active_support/logger'
+require 'active_support/core_ext/string/strip'
require 'support/config'
require 'support/connection'
diff --git a/activerecord/test/cases/migration_test.rb b/activerecord/test/cases/migration_test.rb
index 455ec78f68..46f43f60ac 100644
--- a/activerecord/test/cases/migration_test.rb
+++ b/activerecord/test/cases/migration_test.rb
@@ -11,7 +11,10 @@ require MIGRATIONS_ROOT + "/rename/1_we_need_things"
require MIGRATIONS_ROOT + "/rename/2_rename_things"
require MIGRATIONS_ROOT + "/decimal/1_give_me_big_numbers"
-class BigNumber < ActiveRecord::Base; end
+class BigNumber < ActiveRecord::Base
+ property :world_population, Type::Integer.new
+ property :my_house_population, Type::Integer.new
+end
class Reminder < ActiveRecord::Base; end