Module: TbCore::Mysql2Extensions

Extended by:
ActiveSupport::Concern
Defined in:
lib/tb_core/mysql2_extensions.rb

Instance Method Summary collapse

Instance Method Details

#add_index(table_name, column_name, options = {}) ⇒ Object

Adds an index to the table

See parent method implementation here: api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-add_index



29
30
31
32
33
34
# File 'lib/tb_core/mysql2_extensions.rb', line 29

def add_index(table_name, column_name, options = {})
  if options[:length].nil? && @connection.query_options[:encoding] == 'utf8mb4'
    options[:length] = length_options_for_utf8mb4_string_index(table_name, column_name)
  end
  super(table_name, column_name, options)
end

#length_options_for_utf8mb4_string_index(table_name, column_names) ⇒ Object

Build a hash of length options for a given table and column name

column_name can be either a symbol or an array of symbols



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/tb_core/mysql2_extensions.rb', line 8

def length_options_for_utf8mb4_string_index(table_name, column_names)
  length_options = {}
  column_names = [column_names] unless column_names.is_a?(Array)
  column_names.each do |column_name|
    begin
      column = column_for(table_name, column_name)
      if column && column.type == :string
        length_options[column_name] = ActiveRecord::ConnectionAdapters::Mysql2Adapter::MAX_INDEX_LENGTH_FOR_UTF8MB4
      end
    rescue ActiveRecord::ActiveRecordError => e
      logger.info e.message
    end
  end
  return length_options
end