From f2f0cf1ad9e5fb7ea35c807f313820bd6efa641c Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Wed, 15 Nov 2023 18:19:54 +0000 Subject: [PATCH] Switch to using native rails support for managing Postgres enumerations --- config/initializers/migrate.rb | 19 ------------------- db/migrate/007_add_relations.rb | 2 +- .../039_add_more_controls_to_gpx_files.rb | 2 +- db/migrate/044_create_user_roles.rb | 2 +- db/migrate/051_add_status_to_user.rb | 2 +- db/migrate/053_add_map_bug_tables.rb | 2 +- db/migrate/057_add_map_bug_comment_event.rb | 2 +- .../20110521142405_rename_bugs_to_notes.rb | 8 ++++---- db/migrate/20120214210114_add_text_format.rb | 2 +- ...0160822153055_create_issues_and_reports.rb | 2 +- .../20231029151516_add_importer_role.rb | 8 ++------ 11 files changed, 14 insertions(+), 37 deletions(-) diff --git a/config/initializers/migrate.rb b/config/initializers/migrate.rb index 43dd446a3..1af67dd10 100644 --- a/config/initializers/migrate.rb +++ b/config/initializers/migrate.rb @@ -42,25 +42,6 @@ if defined?(ActiveRecord::ConnectionAdapters::AbstractAdapter) execute "ALTER TABLE #{table_name} ADD PRIMARY KEY USING INDEX #{constraint_name}" end - - def create_enumeration(enumeration_name, values) - execute "CREATE TYPE #{enumeration_name} AS ENUM ('#{values.join '\',\''}')" - end - - def drop_enumeration(enumeration_name) - execute "DROP TYPE #{enumeration_name}" - end - - def add_enumeration_value(enumeration_name, value) - execute "ALTER TYPE #{enumeration_name} ADD VALUE '#{value}'" - end - - def rename_enumeration(old_name, new_name) - old_name = quote_table_name(old_name) - new_name = quote_table_name(new_name) - - execute "ALTER TYPE #{old_name} RENAME TO #{new_name}" - end end end end diff --git a/db/migrate/007_add_relations.rb b/db/migrate/007_add_relations.rb index 1e5bc5d3a..29ba7ee38 100644 --- a/db/migrate/007_add_relations.rb +++ b/db/migrate/007_add_relations.rb @@ -1,7 +1,7 @@ class AddRelations < ActiveRecord::Migration[4.2] def self.up # enums work like strings but are more efficient - create_enumeration :nwr_enum, %w[Node Way Relation] + create_enum :nwr_enum, %w[Node Way Relation] # a relation can have members much like a way can have nodes. # differences: diff --git a/db/migrate/039_add_more_controls_to_gpx_files.rb b/db/migrate/039_add_more_controls_to_gpx_files.rb index 728b56989..9f6d62148 100644 --- a/db/migrate/039_add_more_controls_to_gpx_files.rb +++ b/db/migrate/039_add_more_controls_to_gpx_files.rb @@ -4,7 +4,7 @@ class AddMoreControlsToGpxFiles < ActiveRecord::Migration[4.2] end def self.up - create_enumeration :gpx_visibility_enum, %w[private public trackable identifiable] + create_enum :gpx_visibility_enum, %w[private public trackable identifiable] add_column :gpx_files, :visibility, :gpx_visibility_enum, :default => "public", :null => false Trace.where(:public => false).update_all(:visibility => "private") add_index :gpx_files, [:visible, :visibility], :name => "gpx_files_visible_visibility_idx" diff --git a/db/migrate/044_create_user_roles.rb b/db/migrate/044_create_user_roles.rb index ece98a54d..ca00d15d4 100644 --- a/db/migrate/044_create_user_roles.rb +++ b/db/migrate/044_create_user_roles.rb @@ -6,7 +6,7 @@ class CreateUserRoles < ActiveRecord::Migration[4.2] end def self.up - create_enumeration :user_role_enum, %w[administrator moderator] + create_enum :user_role_enum, %w[administrator moderator] create_table :user_roles do |t| t.column :user_id, :bigint, :null => false diff --git a/db/migrate/051_add_status_to_user.rb b/db/migrate/051_add_status_to_user.rb index f170e0de8..bea9f125f 100644 --- a/db/migrate/051_add_status_to_user.rb +++ b/db/migrate/051_add_status_to_user.rb @@ -3,7 +3,7 @@ class AddStatusToUser < ActiveRecord::Migration[4.2] end def self.up - create_enumeration :user_status_enum, %w[pending active confirmed suspended deleted] + create_enum :user_status_enum, %w[pending active confirmed suspended deleted] add_column :users, :status, :user_status_enum, :null => false, :default => "pending" diff --git a/db/migrate/053_add_map_bug_tables.rb b/db/migrate/053_add_map_bug_tables.rb index 6ad3af0eb..682a736d0 100644 --- a/db/migrate/053_add_map_bug_tables.rb +++ b/db/migrate/053_add_map_bug_tables.rb @@ -1,6 +1,6 @@ class AddMapBugTables < ActiveRecord::Migration[4.2] def self.up - create_enumeration :map_bug_status_enum, %w[open closed hidden] + create_enum :map_bug_status_enum, %w[open closed hidden] create_table :map_bugs do |t| t.integer :latitude, :null => false diff --git a/db/migrate/057_add_map_bug_comment_event.rb b/db/migrate/057_add_map_bug_comment_event.rb index c88544099..087d0f692 100644 --- a/db/migrate/057_add_map_bug_comment_event.rb +++ b/db/migrate/057_add_map_bug_comment_event.rb @@ -1,6 +1,6 @@ class AddMapBugCommentEvent < ActiveRecord::Migration[4.2] def self.up - create_enumeration :map_bug_event_enum, %w[opened closed reopened commented hidden] + create_enum :map_bug_event_enum, %w[opened closed reopened commented hidden] add_column :map_bug_comment, :event, :map_bug_event_enum end diff --git a/db/migrate/20110521142405_rename_bugs_to_notes.rb b/db/migrate/20110521142405_rename_bugs_to_notes.rb index d3260dfa1..2e90b5ce8 100644 --- a/db/migrate/20110521142405_rename_bugs_to_notes.rb +++ b/db/migrate/20110521142405_rename_bugs_to_notes.rb @@ -1,7 +1,7 @@ class RenameBugsToNotes < ActiveRecord::Migration[4.2] def self.up - rename_enumeration "map_bug_status_enum", "note_status_enum" - rename_enumeration "map_bug_event_enum", "note_event_enum" + rename_enum "map_bug_status_enum", :to => "note_status_enum" + rename_enum "map_bug_event_enum", :to => "note_event_enum" rename_table :map_bugs, :notes rename_index :notes, "map_bugs_changed_idx", "notes_updated_at_idx" @@ -23,7 +23,7 @@ class RenameBugsToNotes < ActiveRecord::Migration[4.2] rename_index :notes, "notes_updated_at_idx", "map_bugs_changed_idx" rename_table :notes, :map_bugs - rename_enumeration "note_event_enum", "map_bug_event_enum" - rename_enumeration "note_status_enum", "map_bug_status_enum" + rename_enum "note_event_enum", :to => "map_bug_event_enum" + rename_enum "note_status_enum", :to => "map_bug_status_enum" end end diff --git a/db/migrate/20120214210114_add_text_format.rb b/db/migrate/20120214210114_add_text_format.rb index be8089a74..2fcb77d46 100644 --- a/db/migrate/20120214210114_add_text_format.rb +++ b/db/migrate/20120214210114_add_text_format.rb @@ -1,6 +1,6 @@ class AddTextFormat < ActiveRecord::Migration[4.2] def up - create_enumeration :format_enum, %w[html markdown text] + create_enum :format_enum, %w[html markdown text] add_column :users, :description_format, :format_enum, :null => false, :default => "html" add_column :user_blocks, :reason_format, :format_enum, :null => false, :default => "html" add_column :diary_entries, :body_format, :format_enum, :null => false, :default => "html" diff --git a/db/migrate/20160822153055_create_issues_and_reports.rb b/db/migrate/20160822153055_create_issues_and_reports.rb index 07a549820..83a9d9171 100644 --- a/db/migrate/20160822153055_create_issues_and_reports.rb +++ b/db/migrate/20160822153055_create_issues_and_reports.rb @@ -1,6 +1,6 @@ class CreateIssuesAndReports < ActiveRecord::Migration[5.0] def up - create_enumeration :issue_status_enum, %w[open ignored resolved] + create_enum :issue_status_enum, %w[open ignored resolved] create_table :issues do |t| t.string :reportable_type, :null => false diff --git a/db/migrate/20231029151516_add_importer_role.rb b/db/migrate/20231029151516_add_importer_role.rb index f3fcdb85f..9eaab1c05 100644 --- a/db/migrate/20231029151516_add_importer_role.rb +++ b/db/migrate/20231029151516_add_importer_role.rb @@ -1,9 +1,5 @@ class AddImporterRole < ActiveRecord::Migration[7.1] - def up - add_enumeration_value :user_role_enum, "importer" - end - - def down - raise ActiveRecord::IrreversibleMigration + def change + add_enum_value :user_role_enum, "importer" end end -- 2.39.5