aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Tashkinov <ivantashkinov@gmail.com>2019-10-23 17:15:48 +0300
committerIvan Tashkinov <ivantashkinov@gmail.com>2019-10-23 17:15:48 +0300
commit11cd9944258bfc2123b821b21321e12097d0f19b (patch)
tree3aae893521b4f22559bbc98d449f594fe5f1c9c4
parent7c7f90bc4f361b8bf4b49790640a4aa490ee619f (diff)
downloadpleroma-11cd9944258bfc2123b821b21321e12097d0f19b.tar.gz
[#1304] Fixed null::jsonb handling in User.Info migration.
-rw-r--r--lib/pleroma/user.ex2
-rw-r--r--priv/repo/migrations/20191009154608_copy_users_info_fields_to_users.exs17
2 files changed, 12 insertions, 7 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index e8038c1c1..7bef6e281 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -100,7 +100,7 @@ defmodule Pleroma.User do
field(:mascot, :map, default: nil)
field(:emoji, {:array, :map}, default: [])
field(:pleroma_settings_store, :map, default: %{})
- field(:fields, {:array, :map}, default: nil)
+ field(:fields, {:array, :map}, default: [])
field(:raw_fields, {:array, :map}, default: [])
field(:discoverable, :boolean, default: false)
field(:invisible, :boolean, default: false)
diff --git a/priv/repo/migrations/20191009154608_copy_users_info_fields_to_users.exs b/priv/repo/migrations/20191009154608_copy_users_info_fields_to_users.exs
index 87b1e2c8c..9dd27511c 100644
--- a/priv/repo/migrations/20191009154608_copy_users_info_fields_to_users.exs
+++ b/priv/repo/migrations/20191009154608_copy_users_info_fields_to_users.exs
@@ -1,6 +1,8 @@
defmodule Pleroma.Repo.Migrations.CopyUsersInfoFieldsToUsers do
use Ecto.Migration
+ @jsonb_array_default "'[]'::jsonb"
+
@info_fields [
:banner,
:background,
@@ -129,10 +131,10 @@ defmodule Pleroma.Repo.Migrations.CopyUsersInfoFieldsToUsers do
add(:pinned_activities, {:array, :text}, default: [])
add(:email_notifications, :map, default: %{"digest" => false})
add(:mascot, :map, default: nil)
- add(:emoji, {:array, :map}, default: [])
+ add(:emoji, :map, default: fragment(@jsonb_array_default))
add(:pleroma_settings_store, :map, default: %{})
- add(:fields, {:array, :map}, default: nil)
- add(:raw_fields, {:array, :map}, default: [])
+ add(:fields, :map, default: fragment(@jsonb_array_default))
+ add(:raw_fields, :map, default: fragment(@jsonb_array_default))
add(:discoverable, :boolean, default: false, null: false)
add(:invisible, :boolean, default: false, null: false)
add(:notification_settings, :map, default: %{})
@@ -143,12 +145,15 @@ defmodule Pleroma.Repo.Migrations.CopyUsersInfoFieldsToUsers do
for f <- @info_fields do
set_field = "update users set #{f} ="
+ # Coercion of null::jsonb to NULL
+ jsonb = "case when info->>'#{f}' IS NULL then null else info->'#{f}' end"
+
cond do
f in @jsonb_fields ->
- execute("#{set_field} info->'#{f}'")
+ execute("#{set_field} #{jsonb}")
f in @array_jsonb_fields ->
- execute("#{set_field} ARRAY(SELECT jsonb_array_elements(info->'#{f}'))")
+ execute("#{set_field} coalesce(#{jsonb}, #{@jsonb_array_default})")
f in @int_fields ->
execute("#{set_field} (info->>'#{f}')::int")
@@ -157,7 +162,7 @@ defmodule Pleroma.Repo.Migrations.CopyUsersInfoFieldsToUsers do
execute("#{set_field} coalesce((info->>'#{f}')::boolean, false)")
f in @array_text_fields ->
- execute("#{set_field} ARRAY(SELECT jsonb_array_elements_text(info->'#{f}'))")
+ execute("#{set_field} ARRAY(SELECT jsonb_array_elements_text(#{jsonb}))")
true ->
execute("#{set_field} info->>'#{f}'")