From 880a5eb25cc62d2181b34a21985addee847cbb49 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 13 Jul 2017 03:12:25 +0200 Subject: [PATCH] Fix boolean columns sometimes having a null value (#4162) * Fix boolean columns sometimes having a null value * Fix wrong value being set instead of null --- app/models/domain_block.rb | 2 +- app/models/import.rb | 2 +- app/models/status.rb | 5 +++-- app/models/user.rb | 4 ++-- db/migrate/20170711225116_fix_null_booleans.rb | 17 +++++++++++++++++ db/schema.rb | 14 +++++++------- 6 files changed, 31 insertions(+), 13 deletions(-) create mode 100644 db/migrate/20170711225116_fix_null_booleans.rb diff --git a/app/models/domain_block.rb b/app/models/domain_block.rb index 99dae9c1d..f26e8183f 100644 --- a/app/models/domain_block.rb +++ b/app/models/domain_block.rb @@ -8,7 +8,7 @@ # created_at :datetime not null # updated_at :datetime not null # severity :integer default("silence") -# reject_media :boolean +# reject_media :boolean default(FALSE), not null # class DomainBlock < ApplicationRecord diff --git a/app/models/import.rb b/app/models/import.rb index 8c6253d49..815e02589 100644 --- a/app/models/import.rb +++ b/app/models/import.rb @@ -6,7 +6,7 @@ # id :integer not null, primary key # account_id :integer not null # type :integer not null -# approved :boolean +# approved :boolean default(FALSE), not null # created_at :datetime not null # updated_at :datetime not null # data_file_name :string diff --git a/app/models/status.rb b/app/models/status.rb index edf805336..65db7579a 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -12,12 +12,12 @@ # in_reply_to_id :integer # reblog_of_id :integer # url :string -# sensitive :boolean default(FALSE) +# sensitive :boolean default(FALSE), not null # visibility :integer default("public"), not null # in_reply_to_account_id :integer # application_id :integer # spoiler_text :text default(""), not null -# reply :boolean default(FALSE) +# reply :boolean default(FALSE), not null # favourites_count :integer default(0), not null # reblogs_count :integer default(0), not null # language :string @@ -249,6 +249,7 @@ class Status < ApplicationRecord def set_visibility self.visibility = (account.locked? ? :private : :public) if visibility.nil? + self.sensitive = false if sensitive.nil? end def set_sensitivity diff --git a/app/models/user.rb b/app/models/user.rb index c80115a08..86e578225 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -17,7 +17,7 @@ # last_sign_in_at :datetime # current_sign_in_ip :inet # last_sign_in_ip :inet -# admin :boolean default(FALSE) +# admin :boolean default(FALSE), not null # confirmation_token :string # confirmed_at :datetime # confirmation_sent_at :datetime @@ -27,7 +27,7 @@ # encrypted_otp_secret_iv :string # encrypted_otp_secret_salt :string # consumed_timestep :integer -# otp_required_for_login :boolean +# otp_required_for_login :boolean default(FALSE), not null # last_emailed_at :datetime # otp_backup_codes :string is an Array # filtered_languages :string default([]), not null, is an Array diff --git a/db/migrate/20170711225116_fix_null_booleans.rb b/db/migrate/20170711225116_fix_null_booleans.rb new file mode 100644 index 000000000..5b319471d --- /dev/null +++ b/db/migrate/20170711225116_fix_null_booleans.rb @@ -0,0 +1,17 @@ +class FixNullBooleans < ActiveRecord::Migration[5.1] + def change + change_column_default :domain_blocks, :reject_media, false + change_column_null :domain_blocks, :reject_media, false, false + + change_column_default :imports, :approved, false + change_column_null :imports, :approved, false, false + + change_column_null :statuses, :sensitive, false, false + change_column_null :statuses, :reply, false, false + + change_column_null :users, :admin, false, false + + change_column_default :users, :otp_required_for_login, false + change_column_null :users, :otp_required_for_login, false, false + end +end diff --git a/db/schema.rb b/db/schema.rb index 159704c6a..0d5c73e2e 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: 20170625140443) do +ActiveRecord::Schema.define(version: 20170711225116) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -89,7 +89,7 @@ ActiveRecord::Schema.define(version: 20170625140443) do t.datetime "created_at", null: false t.datetime "updated_at", null: false t.integer "severity", default: 0 - t.boolean "reject_media" + t.boolean "reject_media", default: false, null: false t.index ["domain"], name: "index_domain_blocks_on_domain", unique: true end @@ -121,7 +121,7 @@ ActiveRecord::Schema.define(version: 20170625140443) do create_table "imports", id: :serial, force: :cascade do |t| t.integer "account_id", null: false t.integer "type", null: false - t.boolean "approved" + t.boolean "approved", default: false, null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false t.string "data_file_name" @@ -281,12 +281,12 @@ ActiveRecord::Schema.define(version: 20170625140443) do t.bigint "in_reply_to_id" t.bigint "reblog_of_id" t.string "url" - t.boolean "sensitive", default: false + t.boolean "sensitive", default: false, null: false t.integer "visibility", default: 0, null: false t.integer "in_reply_to_account_id" t.integer "application_id" t.text "spoiler_text", default: "", null: false - t.boolean "reply", default: false + t.boolean "reply", default: false, null: false t.integer "favourites_count", default: 0, null: false t.integer "reblogs_count", default: 0, null: false t.string "language" @@ -350,7 +350,7 @@ ActiveRecord::Schema.define(version: 20170625140443) do t.datetime "last_sign_in_at" t.inet "current_sign_in_ip" t.inet "last_sign_in_ip" - t.boolean "admin", default: false + t.boolean "admin", default: false, null: false t.string "confirmation_token" t.datetime "confirmed_at" t.datetime "confirmation_sent_at" @@ -360,7 +360,7 @@ ActiveRecord::Schema.define(version: 20170625140443) do t.string "encrypted_otp_secret_iv" t.string "encrypted_otp_secret_salt" t.integer "consumed_timestep" - t.boolean "otp_required_for_login" + t.boolean "otp_required_for_login", default: false, null: false t.datetime "last_emailed_at" t.string "otp_backup_codes", array: true t.string "filtered_languages", default: [], null: false, array: true