Skip to content

Commit 7845576

Browse files
authored
Merge pull request rails#54585 from byroot/deserialize-column-defaults
Deserialize column defaults
2 parents 6a76cae + 13bc31e commit 7845576

File tree

4 files changed

+12
-9
lines changed

4 files changed

+12
-9
lines changed

activerecord/lib/active_record/attributes.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,10 @@ def _default_attributes # :nodoc:
244244
# TODO: Remove the need for a connection after we release 8.1.
245245
attributes_hash = with_connection do |connection|
246246
columns_hash.transform_values do |column|
247-
ActiveModel::Attribute.from_database(column.name, column.default, type_for_column(connection, column))
247+
type = type_for_column(connection, column)
248+
default = column.default
249+
default = type.deserialize(default) unless default.nil?
250+
ActiveModel::Attribute.from_database(column.name, default, type)
248251
end
249252
end
250253

activerecord/test/cases/adapters/postgresql/geometric_test.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -131,11 +131,11 @@ def test_legacy_column
131131
end
132132

133133
def test_legacy_default
134-
assert_equal [12.2, 13.3], PostgresqlPoint.column_defaults["legacy_y"]
135-
assert_equal [12.2, 13.3], PostgresqlPoint.new.legacy_y
134+
assert_equal ActiveRecord::Point.new(12.2, 13.3), PostgresqlPoint.column_defaults["legacy_y"]
135+
assert_equal ActiveRecord::Point.new(12.2, 13.3), PostgresqlPoint.new.legacy_y
136136

137-
assert_equal [14.4, 15.5], PostgresqlPoint.column_defaults["legacy_z"]
138-
assert_equal [14.4, 15.5], PostgresqlPoint.new.legacy_z
137+
assert_equal ActiveRecord::Point.new(14.4, 15.5), PostgresqlPoint.column_defaults["legacy_z"]
138+
assert_equal ActiveRecord::Point.new(14.4, 15.5), PostgresqlPoint.new.legacy_z
139139
end
140140

141141
def test_legacy_schema_dumping

activerecord/test/cases/adapters/postgresql/money_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def test_column
3737
def test_default
3838
assert_equal BigDecimal("150.55"), PostgresqlMoney.column_defaults["depth"]
3939
assert_equal BigDecimal("150.55"), PostgresqlMoney.new.depth
40-
assert_equal "150.55", PostgresqlMoney.new.depth_before_type_cast
40+
assert_equal BigDecimal("150.55"), PostgresqlMoney.new.depth_before_type_cast
4141
end
4242

4343
def test_money_values

activerecord/test/cases/defaults_test.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,19 +42,19 @@ class DefaultNumber < ActiveRecord::Base; end
4242
def test_default_positive_integer
4343
record = DefaultNumber.new
4444
assert_equal 7, record.positive_integer
45-
assert_equal "7", record.positive_integer_before_type_cast
45+
assert_equal 7, record.positive_integer_before_type_cast
4646
end
4747

4848
def test_default_negative_integer
4949
record = DefaultNumber.new
5050
assert_equal (-5), record.negative_integer
51-
assert_equal "-5", record.negative_integer_before_type_cast
51+
assert_equal (-5), record.negative_integer_before_type_cast
5252
end
5353

5454
def test_default_decimal_number
5555
record = DefaultNumber.new
5656
assert_equal BigDecimal("2.78"), record.decimal_number
57-
assert_equal "2.78", record.decimal_number_before_type_cast
57+
assert_equal BigDecimal("2.78"), record.decimal_number_before_type_cast
5858
end
5959
end
6060

0 commit comments

Comments
 (0)