1 defmodule Pleroma.Repo.Migrations.CopyUsersInfoFieldsToUsers do
4 @jsonb_array_default "'[]'::jsonb"
14 :confirmation_pending,
15 :password_reset_pending,
33 :hide_followers_count,
38 :unread_conversation_count,
43 :pleroma_settings_store,
48 :skip_thread_containment,
49 :notification_settings
59 :pleroma_settings_store,
60 :notification_settings
63 @array_jsonb_fields [:emoji, :fields, :raw_fields]
65 @int_fields [:note_count, :follower_count, :following_count, :unread_conversation_count]
69 :confirmation_pending,
70 :password_reset_pending,
77 :hide_followers_count,
84 :skip_thread_containment
98 if direction() == :up do
100 for f <- @info_fields do
103 # Coercion of null::jsonb to NULL
104 jsonb = "case when info->>'#{f}' IS NULL then null else info->'#{f}' end"
107 f in @jsonb_fields ->
108 "#{set_field} #{jsonb}"
110 f in @array_jsonb_fields ->
111 "#{set_field} coalesce(#{jsonb}, #{@jsonb_array_default})"
114 "#{set_field} (info->>'#{f}')::int"
116 f in @boolean_fields ->
117 "#{set_field} coalesce((info->>'#{f}')::boolean, false)"
119 f in @array_text_fields ->
120 "#{set_field} ARRAY(SELECT jsonb_array_elements_text(#{jsonb}))"
123 "#{set_field} info->>'#{f}'"
128 execute("update users set " <> sets)
131 :users_deactivated_index,
132 :users_is_moderator_index,
133 :users_is_admin_index,
134 :users_subscribers_index
136 drop_if_exists(index(:users, [], name: index_name))
140 create_if_not_exists(index(:users, [:deactivated]))
141 create_if_not_exists(index(:users, [:is_moderator]))
142 create_if_not_exists(index(:users, [:is_admin]))
143 create_if_not_exists(index(:users, [:subscribers]))