From 73bba4c1e1f7fa23aa1a126971338d94ae42398f Mon Sep 17 00:00:00 2001 From: Tadas Tamosauskas Date: Sat, 28 Sep 2013 16:10:59 +0100 Subject: Serialize postgres' hstore, json and array types correctly in AR update methods. Fixes #12261. Closes #12395. Conflicts: activerecord/CHANGELOG.md activerecord/test/cases/adapters/postgresql/array_test.rb activerecord/test/cases/adapters/postgresql/json_test.rb --- activerecord/test/cases/adapters/postgresql/array_test.rb | 6 ++++++ activerecord/test/cases/adapters/postgresql/hstore_test.rb | 6 ++++++ activerecord/test/cases/adapters/postgresql/json_test.rb | 6 ++++++ 3 files changed, 18 insertions(+) (limited to 'activerecord/test/cases') diff --git a/activerecord/test/cases/adapters/postgresql/array_test.rb b/activerecord/test/cases/adapters/postgresql/array_test.rb index b0870e2256..cf059d20e2 100644 --- a/activerecord/test/cases/adapters/postgresql/array_test.rb +++ b/activerecord/test/cases/adapters/postgresql/array_test.rb @@ -128,6 +128,12 @@ class PostgresqlArrayTest < ActiveRecord::TestCase assert_equal("[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ...]", record.attribute_for_inspect(:ratings)) end + def test_update_all + PgArray.create! tags: ["one", "two", "three"] + PgArray.update_all tags: ["four", "five"] + assert_equal ["four", "five"], PgArray.first.tags + end + private def assert_cycle field, array # test creation diff --git a/activerecord/test/cases/adapters/postgresql/hstore_test.rb b/activerecord/test/cases/adapters/postgresql/hstore_test.rb index 2845413575..730020b5c8 100644 --- a/activerecord/test/cases/adapters/postgresql/hstore_test.rb +++ b/activerecord/test/cases/adapters/postgresql/hstore_test.rb @@ -206,6 +206,12 @@ class PostgresqlHstoreTest < ActiveRecord::TestCase def test_multiline assert_cycle("a\nb" => "c\nd") end + + def test_update_all + Hstore.create! tags: { "one" => "two" } + Hstore.update_all tags: { "three" => "four" } + assert_equal({ "three" => "four" }, Hstore.first.tags) + end end private diff --git a/activerecord/test/cases/adapters/postgresql/json_test.rb b/activerecord/test/cases/adapters/postgresql/json_test.rb index c33c7ef968..10efa8b802 100644 --- a/activerecord/test/cases/adapters/postgresql/json_test.rb +++ b/activerecord/test/cases/adapters/postgresql/json_test.rb @@ -121,4 +121,10 @@ class PostgresqlJSONTest < ActiveRecord::TestCase x = JsonDataType.first assert_equal "640×1136", x.resolution end + + def test_update_all + JsonDataType.create! payload: { "one" => "two" } + JsonDataType.update_all payload: { "three" => "four" } + assert_equal({ "three" => "four" }, JsonDataType.first.payload) + end end -- cgit v1.2.3