class Utf8mb4rails::Migrator::DBInspector

DB introspection (only for columns)

Public Class Methods

new() click to toggle source

Initializes AR :reek: UtilityFunction

# File lib/utf8mb4rails/migrator/db_inspector.rb, line 7
def initialize
  ActiveRecord::Base.establish_connection(
    ActiveRecord::Base.connection_config.merge(adapter: 'percona')
  )
end

Public Instance Methods

column_info(table, column) click to toggle source

Returns a hash with information about the column

@param [String] table @param [String] column

@returns [Hash] { type: String, default: String or nil, charset: String or nil } :reek: FeatureEnvy

# File lib/utf8mb4rails/migrator/db_inspector.rb, line 27
def column_info(table, column)
  sql = "SELECT DATA_TYPE, COLUMN_DEFAULT, CHARACTER_SET_NAME, CHARACTER_MAXIMUM_LENGTH
  FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = '#{table}'
  AND COLUMN_NAME = '#{column}'
  AND TABLE_SCHEMA='#{database_name}'"
  result = ActiveRecord::Base.connection.execute(sql).first
  ColumnInfo.new(
    type: result[0].upcase,
    default: result[1],
    charset: result[2],
    max_length: result[3]
  )
end
columns(table) click to toggle source

@returns [Array<String>] An array with column names :reek: UtilityFunction

# File lib/utf8mb4rails/migrator/db_inspector.rb, line 16
def columns(table)
  ActiveRecord::Base.connection.columns(table).map(&:name)
end

Private Instance Methods

database_name() click to toggle source

:reek: UtilityFunction

# File lib/utf8mb4rails/migrator/db_inspector.rb, line 44
def database_name
  ActiveRecord::Base.connection.current_database
end