aboutsummaryrefslogtreecommitdiff
path: root/db
diff options
context:
space:
mode:
authorTakeshi Umeda <noel.yoshiba@gmail.com>2021-01-10 11:17:55 +0900
committerGitHub <noreply@github.com>2021-01-10 11:17:55 +0900
commit98a2603dc163210d3a0aab0a0c2b8ef74c7e5eb0 (patch)
tree761694d2d697c58faf02a3ff9ef26bf045fc0274 /db
parent7cd4ed7d4298626d2b141cd6d8378e95bc248824 (diff)
parent087ed84367537ac168ed3e00bb7eb4bd582dc3d0 (diff)
downloadmastodon-feature-limited-visibility-bearcaps.tar
mastodon-feature-limited-visibility-bearcaps.tar.gz
mastodon-feature-limited-visibility-bearcaps.tar.bz2
mastodon-feature-limited-visibility-bearcaps.zip
Merge branch 'master' into feature-limited-visibility-bearcapsfeature-limited-visibility-bearcaps
Diffstat (limited to 'db')
-rw-r--r--db/migrate/20181127165847_add_show_replies_to_lists.rb23
-rw-r--r--db/migrate/20200309150742_add_forwarded_to_reports.rb5
-rw-r--r--db/migrate/20200317021758_add_expires_at_to_mutes.rb5
-rw-r--r--db/migrate/20200614002136_add_sensitized_to_accounts.rb5
-rw-r--r--db/migrate/20200620164023_add_fixed_lowercase_index_to_accounts.rb26
-rw-r--r--db/migrate/20200908193330_create_account_deletion_requests.rb8
-rw-r--r--db/migrate/20200917192924_add_notify_to_follows.rb19
-rw-r--r--db/migrate/20200917193034_add_type_to_notifications.rb5
-rw-r--r--db/migrate/20200917222316_add_index_notifications_on_type.rb7
-rw-r--r--db/migrate/20201008202037_create_ip_blocks.rb12
-rw-r--r--db/migrate/20201008220312_add_sign_up_ip_to_users.rb5
-rw-r--r--db/migrate/20201017233919_add_suspension_origin_to_accounts.rb5
-rw-r--r--db/migrate/20201206004238_create_instances.rb9
-rw-r--r--db/migrate/20201218054746_add_obfuscate_to_domain_blocks.rb15
-rw-r--r--db/post_migrate/20200917193528_migrate_notifications_type.rb22
-rw-r--r--db/post_migrate/20200917222734_remove_index_notifications_on_account_activity.rb15
-rw-r--r--db/post_migrate/20201017234926_fill_account_suspension_origin.rb11
-rw-r--r--db/schema.rb57
-rw-r--r--db/views/instances_v01.sql17
19 files changed, 265 insertions, 6 deletions
diff --git a/db/migrate/20181127165847_add_show_replies_to_lists.rb b/db/migrate/20181127165847_add_show_replies_to_lists.rb
new file mode 100644
index 000000000..f68c98daf
--- /dev/null
+++ b/db/migrate/20181127165847_add_show_replies_to_lists.rb
@@ -0,0 +1,23 @@
+require Rails.root.join('lib', 'mastodon', 'migration_helpers')
+
+class AddShowRepliesToLists < ActiveRecord::Migration[5.2]
+ include Mastodon::MigrationHelpers
+
+ disable_ddl_transaction!
+
+ def up
+ safety_assured do
+ add_column_with_default(
+ :lists,
+ :replies_policy,
+ :integer,
+ allow_null: false,
+ default: 0
+ )
+ end
+ end
+
+ def down
+ remove_column :lists, :replies_policy
+ end
+end
diff --git a/db/migrate/20200309150742_add_forwarded_to_reports.rb b/db/migrate/20200309150742_add_forwarded_to_reports.rb
new file mode 100644
index 000000000..df278240b
--- /dev/null
+++ b/db/migrate/20200309150742_add_forwarded_to_reports.rb
@@ -0,0 +1,5 @@
+class AddForwardedToReports < ActiveRecord::Migration[5.2]
+ def change
+ add_column :reports, :forwarded, :boolean
+ end
+end
diff --git a/db/migrate/20200317021758_add_expires_at_to_mutes.rb b/db/migrate/20200317021758_add_expires_at_to_mutes.rb
new file mode 100644
index 000000000..eaae8319d
--- /dev/null
+++ b/db/migrate/20200317021758_add_expires_at_to_mutes.rb
@@ -0,0 +1,5 @@
+class AddExpiresAtToMutes < ActiveRecord::Migration[5.2]
+ def change
+ add_column :mutes, :expires_at, :datetime
+ end
+end
diff --git a/db/migrate/20200614002136_add_sensitized_to_accounts.rb b/db/migrate/20200614002136_add_sensitized_to_accounts.rb
new file mode 100644
index 000000000..bc2dfcb63
--- /dev/null
+++ b/db/migrate/20200614002136_add_sensitized_to_accounts.rb
@@ -0,0 +1,5 @@
+class AddSensitizedToAccounts < ActiveRecord::Migration[5.2]
+ def change
+ add_column :accounts, :sensitized_at, :datetime
+ end
+end
diff --git a/db/migrate/20200620164023_add_fixed_lowercase_index_to_accounts.rb b/db/migrate/20200620164023_add_fixed_lowercase_index_to_accounts.rb
index c5688681f..c3aa8e33c 100644
--- a/db/migrate/20200620164023_add_fixed_lowercase_index_to_accounts.rb
+++ b/db/migrate/20200620164023_add_fixed_lowercase_index_to_accounts.rb
@@ -1,10 +1,30 @@
class AddFixedLowercaseIndexToAccounts < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
+ class CorruptionError < StandardError
+ def cause
+ nil
+ end
+
+ def backtrace
+ []
+ end
+ end
+
def up
- rename_index :accounts, 'index_accounts_on_username_and_domain_lower', 'old_index_accounts_on_username_and_domain_lower' unless index_name_exists?(:accounts, 'old_index_accounts_on_username_and_domain_lower')
- add_index :accounts, "lower (username), COALESCE(lower(domain), '')", name: 'index_accounts_on_username_and_domain_lower', unique: true, algorithm: :concurrently
- remove_index :accounts, name: 'old_index_accounts_on_username_and_domain_lower'
+ if index_name_exists?(:accounts, 'old_index_accounts_on_username_and_domain_lower') && index_name_exists?(:accounts, 'index_accounts_on_username_and_domain_lower')
+ remove_index :accounts, name: 'index_accounts_on_username_and_domain_lower'
+ elsif index_name_exists?(:accounts, 'index_accounts_on_username_and_domain_lower')
+ rename_index :accounts, 'index_accounts_on_username_and_domain_lower', 'old_index_accounts_on_username_and_domain_lower'
+ end
+
+ begin
+ add_index :accounts, "lower (username), COALESCE(lower(domain), '')", name: 'index_accounts_on_username_and_domain_lower', unique: true, algorithm: :concurrently
+ rescue ActiveRecord::RecordNotUnique
+ raise CorruptionError, 'Migration failed because of index corruption, see https://docs.joinmastodon.org/admin/troubleshooting/index-corruption/#fixing'
+ end
+
+ remove_index :accounts, name: 'old_index_accounts_on_username_and_domain_lower' if index_name_exists?(:accounts, 'old_index_accounts_on_username_and_domain_lower')
end
def down
diff --git a/db/migrate/20200908193330_create_account_deletion_requests.rb b/db/migrate/20200908193330_create_account_deletion_requests.rb
new file mode 100644
index 000000000..e03183ae4
--- /dev/null
+++ b/db/migrate/20200908193330_create_account_deletion_requests.rb
@@ -0,0 +1,8 @@
+class CreateAccountDeletionRequests < ActiveRecord::Migration[5.2]
+ def change
+ create_table :account_deletion_requests do |t|
+ t.references :account, foreign_key: { on_delete: :cascade }
+ t.timestamps
+ end
+ end
+end
diff --git a/db/migrate/20200917192924_add_notify_to_follows.rb b/db/migrate/20200917192924_add_notify_to_follows.rb
new file mode 100644
index 000000000..d27471c44
--- /dev/null
+++ b/db/migrate/20200917192924_add_notify_to_follows.rb
@@ -0,0 +1,19 @@
+require Rails.root.join('lib', 'mastodon', 'migration_helpers')
+
+class AddNotifyToFollows < ActiveRecord::Migration[5.1]
+ include Mastodon::MigrationHelpers
+
+ disable_ddl_transaction!
+
+ def up
+ safety_assured do
+ add_column_with_default :follows, :notify, :boolean, default: false, allow_null: false
+ add_column_with_default :follow_requests, :notify, :boolean, default: false, allow_null: false
+ end
+ end
+
+ def down
+ remove_column :follows, :notify
+ remove_column :follow_requests, :notify
+ end
+end
diff --git a/db/migrate/20200917193034_add_type_to_notifications.rb b/db/migrate/20200917193034_add_type_to_notifications.rb
new file mode 100644
index 000000000..002be3aa0
--- /dev/null
+++ b/db/migrate/20200917193034_add_type_to_notifications.rb
@@ -0,0 +1,5 @@
+class AddTypeToNotifications < ActiveRecord::Migration[5.2]
+ def change
+ add_column :notifications, :type, :string
+ end
+end
diff --git a/db/migrate/20200917222316_add_index_notifications_on_type.rb b/db/migrate/20200917222316_add_index_notifications_on_type.rb
new file mode 100644
index 000000000..9bd23c1d3
--- /dev/null
+++ b/db/migrate/20200917222316_add_index_notifications_on_type.rb
@@ -0,0 +1,7 @@
+class AddIndexNotificationsOnType < ActiveRecord::Migration[5.2]
+ disable_ddl_transaction!
+
+ def change
+ add_index :notifications, [:account_id, :id, :type], order: { id: :desc }, algorithm: :concurrently
+ end
+end
diff --git a/db/migrate/20201008202037_create_ip_blocks.rb b/db/migrate/20201008202037_create_ip_blocks.rb
new file mode 100644
index 000000000..32acd6ede
--- /dev/null
+++ b/db/migrate/20201008202037_create_ip_blocks.rb
@@ -0,0 +1,12 @@
+class CreateIpBlocks < ActiveRecord::Migration[5.2]
+ def change
+ create_table :ip_blocks do |t|
+ t.inet :ip, null: false, default: '0.0.0.0'
+ t.integer :severity, null: false, default: 0
+ t.datetime :expires_at
+ t.text :comment, null: false, default: ''
+
+ t.timestamps
+ end
+ end
+end
diff --git a/db/migrate/20201008220312_add_sign_up_ip_to_users.rb b/db/migrate/20201008220312_add_sign_up_ip_to_users.rb
new file mode 100644
index 000000000..66cd624bb
--- /dev/null
+++ b/db/migrate/20201008220312_add_sign_up_ip_to_users.rb
@@ -0,0 +1,5 @@
+class AddSignUpIpToUsers < ActiveRecord::Migration[5.2]
+ def change
+ add_column :users, :sign_up_ip, :inet
+ end
+end
diff --git a/db/migrate/20201017233919_add_suspension_origin_to_accounts.rb b/db/migrate/20201017233919_add_suspension_origin_to_accounts.rb
new file mode 100644
index 000000000..f0db02143
--- /dev/null
+++ b/db/migrate/20201017233919_add_suspension_origin_to_accounts.rb
@@ -0,0 +1,5 @@
+class AddSuspensionOriginToAccounts < ActiveRecord::Migration[5.2]
+ def change
+ add_column :accounts, :suspension_origin, :integer
+ end
+end
diff --git a/db/migrate/20201206004238_create_instances.rb b/db/migrate/20201206004238_create_instances.rb
new file mode 100644
index 000000000..a4b866894
--- /dev/null
+++ b/db/migrate/20201206004238_create_instances.rb
@@ -0,0 +1,9 @@
+class CreateInstances < ActiveRecord::Migration[5.2]
+ def change
+ create_view :instances, materialized: true
+
+ # To be able to refresh the view concurrently,
+ # at least one unique index is required
+ safety_assured { add_index :instances, :domain, unique: true }
+ end
+end
diff --git a/db/migrate/20201218054746_add_obfuscate_to_domain_blocks.rb b/db/migrate/20201218054746_add_obfuscate_to_domain_blocks.rb
new file mode 100644
index 000000000..26f4ddb85
--- /dev/null
+++ b/db/migrate/20201218054746_add_obfuscate_to_domain_blocks.rb
@@ -0,0 +1,15 @@
+require Rails.root.join('lib', 'mastodon', 'migration_helpers')
+
+class AddObfuscateToDomainBlocks < ActiveRecord::Migration[5.2]
+ include Mastodon::MigrationHelpers
+
+ disable_ddl_transaction!
+
+ def up
+ safety_assured { add_column_with_default :domain_blocks, :obfuscate, :boolean, default: false, allow_null: false }
+ end
+
+ def down
+ remove_column :domain_blocks, :obfuscate
+ end
+end
diff --git a/db/post_migrate/20200917193528_migrate_notifications_type.rb b/db/post_migrate/20200917193528_migrate_notifications_type.rb
new file mode 100644
index 000000000..88e423084
--- /dev/null
+++ b/db/post_migrate/20200917193528_migrate_notifications_type.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+class MigrateNotificationsType < ActiveRecord::Migration[5.2]
+ disable_ddl_transaction!
+
+ TYPES_TO_MIGRATE = {
+ 'Mention' => :mention,
+ 'Status' => :reblog,
+ 'Follow' => :follow,
+ 'FollowRequest' => :follow_request,
+ 'Favourite' => :favourite,
+ 'Poll' => :poll,
+ }.freeze
+
+ def up
+ TYPES_TO_MIGRATE.each_pair do |activity_type, type|
+ Notification.where(activity_type: activity_type, type: nil).in_batches.update_all(type: type)
+ end
+ end
+
+ def down; end
+end
diff --git a/db/post_migrate/20200917222734_remove_index_notifications_on_account_activity.rb b/db/post_migrate/20200917222734_remove_index_notifications_on_account_activity.rb
new file mode 100644
index 000000000..cb7f78e53
--- /dev/null
+++ b/db/post_migrate/20200917222734_remove_index_notifications_on_account_activity.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+class RemoveIndexNotificationsOnAccountActivity < ActiveRecord::Migration[5.2]
+ disable_ddl_transaction!
+
+ def up
+ remove_index :notifications, name: :account_activity
+ remove_index :notifications, name: :index_notifications_on_account_id_and_id
+ end
+
+ def down
+ add_index :notifications, [:account_id, :activity_id, :activity_type], unique: true, name: 'account_activity', algorithm: :concurrently
+ add_index :notifications, [:account_id, :id], order: { id: :desc }, algorithm: :concurrently
+ end
+end
diff --git a/db/post_migrate/20201017234926_fill_account_suspension_origin.rb b/db/post_migrate/20201017234926_fill_account_suspension_origin.rb
new file mode 100644
index 000000000..ab7407d79
--- /dev/null
+++ b/db/post_migrate/20201017234926_fill_account_suspension_origin.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+class FillAccountSuspensionOrigin < ActiveRecord::Migration[5.2]
+ disable_ddl_transaction!
+
+ def up
+ Account.suspended.where(suspension_origin: nil).in_batches.update_all(suspension_origin: :local)
+ end
+
+ def down; end
+end
diff --git a/db/schema.rb b/db/schema.rb
index c04d7047e..f076b47d3 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 2020_08_27_205543) do
+ActiveRecord::Schema.define(version: 2020_12_18_054746) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -36,6 +36,13 @@ ActiveRecord::Schema.define(version: 2020_08_27_205543) do
t.index ["conversation_id"], name: "index_account_conversations_on_conversation_id"
end
+ create_table "account_deletion_requests", force: :cascade do |t|
+ t.bigint "account_id"
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
+ t.index ["account_id"], name: "index_account_deletion_requests_on_account_id"
+ end
+
create_table "account_domain_blocks", force: :cascade do |t|
t.string "domain"
t.datetime "created_at", null: false
@@ -182,6 +189,8 @@ ActiveRecord::Schema.define(version: 2020_08_27_205543) do
t.integer "avatar_storage_schema_version"
t.integer "header_storage_schema_version"
t.string "devices_url"
+ t.integer "suspension_origin"
+ t.datetime "sensitized_at"
t.index "(((setweight(to_tsvector('simple'::regconfig, (display_name)::text), 'A'::\"char\") || setweight(to_tsvector('simple'::regconfig, (username)::text), 'B'::\"char\")) || setweight(to_tsvector('simple'::regconfig, (COALESCE(domain, ''::character varying))::text), 'C'::\"char\")))", name: "search_index", using: :gin
t.index "lower((username)::text), COALESCE(lower((domain)::text), ''::text)", name: "index_accounts_on_username_and_domain_lower", unique: true
t.index ["moved_to_account_id"], name: "index_accounts_on_moved_to_account_id"
@@ -354,6 +363,7 @@ ActiveRecord::Schema.define(version: 2020_08_27_205543) do
t.boolean "reject_reports", default: false, null: false
t.text "private_comment"
t.text "public_comment"
+ t.boolean "obfuscate", default: false, null: false
t.index ["domain"], name: "index_domain_blocks_on_domain", unique: true
end
@@ -407,6 +417,7 @@ ActiveRecord::Schema.define(version: 2020_08_27_205543) do
t.bigint "target_account_id", null: false
t.boolean "show_reblogs", default: true, null: false
t.string "uri"
+ t.boolean "notify", default: false, null: false
t.index ["account_id", "target_account_id"], name: "index_follow_requests_on_account_id_and_target_account_id", unique: true
end
@@ -417,6 +428,7 @@ ActiveRecord::Schema.define(version: 2020_08_27_205543) do
t.bigint "target_account_id", null: false
t.boolean "show_reblogs", default: true, null: false
t.string "uri"
+ t.boolean "notify", default: false, null: false
t.index ["account_id", "target_account_id"], name: "index_follows_on_account_id_and_target_account_id", unique: true
t.index ["target_account_id"], name: "index_follows_on_target_account_id"
end
@@ -457,6 +469,15 @@ ActiveRecord::Schema.define(version: 2020_08_27_205543) do
t.index ["user_id"], name: "index_invites_on_user_id"
end
+ create_table "ip_blocks", force: :cascade do |t|
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
+ t.datetime "expires_at"
+ t.inet "ip", default: "0.0.0.0", null: false
+ t.integer "severity", default: 0, null: false
+ t.text "comment", default: "", null: false
+ end
+
create_table "list_accounts", force: :cascade do |t|
t.bigint "list_id", null: false
t.bigint "account_id", null: false
@@ -471,6 +492,7 @@ ActiveRecord::Schema.define(version: 2020_08_27_205543) do
t.string "title", default: "", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
+ t.integer "replies_policy", default: 0, null: false
t.index ["account_id"], name: "index_lists_on_account_id"
end
@@ -529,6 +551,7 @@ ActiveRecord::Schema.define(version: 2020_08_27_205543) do
t.boolean "hide_notifications", default: true, null: false
t.bigint "account_id", null: false
t.bigint "target_account_id", null: false
+ t.datetime "expires_at"
t.index ["account_id", "target_account_id"], name: "index_mutes_on_account_id_and_target_account_id", unique: true
t.index ["target_account_id"], name: "index_mutes_on_target_account_id"
end
@@ -540,8 +563,8 @@ ActiveRecord::Schema.define(version: 2020_08_27_205543) do
t.datetime "updated_at", null: false
t.bigint "account_id", null: false
t.bigint "from_account_id", null: false
- t.index ["account_id", "activity_id", "activity_type"], name: "account_activity", unique: true
- t.index ["account_id", "id"], name: "index_notifications_on_account_id_and_id", order: { id: :desc }
+ t.string "type"
+ t.index ["account_id", "id", "type"], name: "index_notifications_on_account_id_and_id_and_type", order: { id: :desc }
t.index ["activity_id", "activity_type"], name: "index_notifications_on_activity_id_and_activity_type"
t.index ["from_account_id"], name: "index_notifications_on_from_account_id"
end
@@ -698,6 +721,7 @@ ActiveRecord::Schema.define(version: 2020_08_27_205543) do
t.bigint "target_account_id", null: false
t.bigint "assigned_account_id"
t.string "uri"
+ t.boolean "forwarded"
t.index ["account_id"], name: "index_reports_on_account_id"
t.index ["target_account_id"], name: "index_reports_on_target_account_id"
end
@@ -892,6 +916,7 @@ ActiveRecord::Schema.define(version: 2020_08_27_205543) do
t.string "sign_in_token"
t.datetime "sign_in_token_sent_at"
t.string "webauthn_id"
+ t.inet "sign_up_ip"
t.index ["account_id"], name: "index_users_on_account_id"
t.index ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true
t.index ["created_by_application_id"], name: "index_users_on_created_by_application_id"
@@ -936,6 +961,7 @@ ActiveRecord::Schema.define(version: 2020_08_27_205543) do
add_foreign_key "account_aliases", "accounts", on_delete: :cascade
add_foreign_key "account_conversations", "accounts", on_delete: :cascade
add_foreign_key "account_conversations", "conversations", on_delete: :cascade
+ add_foreign_key "account_deletion_requests", "accounts", on_delete: :cascade
add_foreign_key "account_domain_blocks", "accounts", name: "fk_206c6029bd", on_delete: :cascade
add_foreign_key "account_identity_proofs", "accounts", on_delete: :cascade
add_foreign_key "account_migrations", "accounts", column: "target_account_id", on_delete: :nullify
@@ -1033,4 +1059,29 @@ ActiveRecord::Schema.define(version: 2020_08_27_205543) do
add_foreign_key "web_push_subscriptions", "users", on_delete: :cascade
add_foreign_key "web_settings", "users", name: "fk_11910667b2", on_delete: :cascade
add_foreign_key "webauthn_credentials", "users"
+
+ create_view "instances", materialized: true, sql_definition: <<-SQL
+ WITH domain_counts(domain, accounts_count) AS (
+ SELECT accounts.domain,
+ count(*) AS accounts_count
+ FROM accounts
+ WHERE (accounts.domain IS NOT NULL)
+ GROUP BY accounts.domain
+ )
+ SELECT domain_counts.domain,
+ domain_counts.accounts_count
+ FROM domain_counts
+ UNION
+ SELECT domain_blocks.domain,
+ COALESCE(domain_counts.accounts_count, (0)::bigint) AS accounts_count
+ FROM (domain_blocks
+ LEFT JOIN domain_counts ON (((domain_counts.domain)::text = (domain_blocks.domain)::text)))
+ UNION
+ SELECT domain_allows.domain,
+ COALESCE(domain_counts.accounts_count, (0)::bigint) AS accounts_count
+ FROM (domain_allows
+ LEFT JOIN domain_counts ON (((domain_counts.domain)::text = (domain_allows.domain)::text)));
+ SQL
+ add_index "instances", ["domain"], name: "index_instances_on_domain", unique: true
+
end
diff --git a/db/views/instances_v01.sql b/db/views/instances_v01.sql
new file mode 100644
index 000000000..94acd61a1
--- /dev/null
+++ b/db/views/instances_v01.sql
@@ -0,0 +1,17 @@
+WITH domain_counts(domain, accounts_count)
+AS (
+ SELECT domain, COUNT(*) as accounts_count
+ FROM accounts
+ WHERE domain IS NOT NULL
+ GROUP BY domain
+)
+SELECT domain, accounts_count
+FROM domain_counts
+UNION
+SELECT domain_blocks.domain, COALESCE(domain_counts.accounts_count, 0)
+FROM domain_blocks
+LEFT OUTER JOIN domain_counts ON domain_counts.domain = domain_blocks.domain
+UNION
+SELECT domain_allows.domain, COALESCE(domain_counts.accounts_count, 0)
+FROM domain_allows
+LEFT OUTER JOIN domain_counts ON domain_counts.domain = domain_allows.domain