Class: Utf8mb4rails::Migrator::Runner
- Inherits:
-
Object
- Object
- Utf8mb4rails::Migrator::Runner
- Defined in:
- lib/utf8mb4rails/migrator/runner.rb
Overview
This class will perform the actual migration, will run sql queries that alters tables
Constant Summary collapse
- NEW_COLLATION =
ENV.fetch('COLLATION', 'utf8mb4_unicode_520_ci').freeze
Instance Attribute Summary collapse
-
#inspector ⇒ Object
readonly
Returns the value of attribute inspector.
Instance Method Summary collapse
-
#initialize ⇒ Runner
constructor
A new instance of Runner.
-
#migrate_column!(table, column) ⇒ Object
:reek:FeatureEnvy.
- #migrate_table!(table) ⇒ Object
Constructor Details
#initialize ⇒ Runner
Returns a new instance of Runner.
12 13 14 |
# File 'lib/utf8mb4rails/migrator/runner.rb', line 12 def initialize @inspector = DBInspector.new end |
Instance Attribute Details
#inspector ⇒ Object (readonly)
Returns the value of attribute inspector.
10 11 12 |
# File 'lib/utf8mb4rails/migrator/runner.rb', line 10 def inspector @inspector end |
Instance Method Details
#migrate_column!(table, column) ⇒ Object
:reek:FeatureEnvy
17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/utf8mb4rails/migrator/runner.rb', line 17 def migrate_column!(table, column) column_info = inspector.column_info(table, column) if column_info.utf8mb4? puts " Skipping column #{column} (already in utf8mb4)'" return end return unless column_info.text_column? sql = "ALTER TABLE `#{table}` DROP COLUMN \`#{column}`\ , ADD COLUMN \`#{column}`\ #{column_info.new_type_for_sql} CHARACTER SET utf8mb4 COLLATE #{NEW_COLLATION} #{column_info.default_value_for_sql}" ActiveRecord::Base.connection.execute(sql) end |
#migrate_table!(table) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/utf8mb4rails/migrator/runner.rb', line 30 def migrate_table!(table) sql = [] inspector.columns(table).each do |column| column_info = inspector.column_info(table, column) next if column_info.utf8mb4? || !column_info.text_column? || skipped_column?(column) sql << "DROP COLUMN \`#{column}`" sql << "ADD COLUMN \`#{column}`\ #{column_info.new_type_for_sql} \ CHARACTER SET utf8mb4 COLLATE #{NEW_COLLATION} #{column_info.default_value_for_sql}" end sql << "CONVERT TO CHARACTER SET utf8mb4 COLLATE #{NEW_COLLATION}" ActiveRecord::Base.connection.execute("ALTER TABLE `#{table}` #{sql.join(' , ')};") rescue puts "Problems accesing the table #{table}" puts $ERROR_INFO exit 1 end |