diff options
author | Rafael França <rafaelmfranca@gmail.com> | 2017-05-29 22:12:15 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-29 22:12:15 -0400 |
commit | 6847877a30fd8d578f72db0cf40674f71a9b6286 (patch) | |
tree | b4a49bb98258e075c853afe89a54e32adf43fd39 /activerecord/lib | |
parent | 0aa6bcdf612aa05e422f1f55278bab49a7a9153e (diff) | |
parent | 71cd0659699a539ef8713faf776d12bef9ff0ce8 (diff) | |
download | rails-6847877a30fd8d578f72db0cf40674f71a9b6286.tar.gz rails-6847877a30fd8d578f72db0cf40674f71a9b6286.tar.bz2 rails-6847877a30fd8d578f72db0cf40674f71a9b6286.zip |
Merge pull request #29273 from kamipo/deserialize_raw_value_from_database_for_json
Deserialize a raw value from the database in `changed_in_place?` for `AbstractJson`
Diffstat (limited to 'activerecord/lib')
3 files changed, 4 insertions, 15 deletions
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 9cb7c46df5..01599985ca 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb @@ -838,11 +838,6 @@ module ActiveRecord end class MysqlJson < Type::Internal::AbstractJson # :nodoc: - def changed_in_place?(raw_old_value, new_value) - # Normalization is required because MySQL JSON data format includes - # the space between the elements. - super(serialize(deserialize(raw_old_value)), new_value) - end end class MysqlString < Type::String # :nodoc: diff --git a/activerecord/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb b/activerecord/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb index 87391b5dc7..705cb7f0b3 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb @@ -6,16 +6,6 @@ module ActiveRecord def type :jsonb end - - def changed_in_place?(raw_old_value, new_value) - # Postgres does not preserve insignificant whitespaces when - # round-tripping jsonb columns. This causes some false positives for - # the comparison here. Therefore, we need to parse and re-dump the - # raw value here to ensure the insignificant whitespaces are - # consistent with our encoder's output. - raw_old_value = serialize(deserialize(raw_old_value)) - super(raw_old_value, new_value) - end end end end diff --git a/activerecord/lib/active_record/type/internal/abstract_json.rb b/activerecord/lib/active_record/type/internal/abstract_json.rb index e19c5a14da..a8d6a63465 100644 --- a/activerecord/lib/active_record/type/internal/abstract_json.rb +++ b/activerecord/lib/active_record/type/internal/abstract_json.rb @@ -24,6 +24,10 @@ module ActiveRecord end end + def changed_in_place?(raw_old_value, new_value) + deserialize(raw_old_value) != new_value + end + def accessor ActiveRecord::Store::StringKeyedHashAccessor end |