49 lines
1.7 KiB
Ruby
49 lines
1.7 KiB
Ruby
# This patches ActiveRecord so indexes created using the MySQL adapter ignore
|
|
# any PostgreSQL specific options (e.g. `using: :gin`).
|
|
#
|
|
# These patches do the following for MySQL:
|
|
#
|
|
# 1. Indexes created using the :opclasses option are ignored (as they serve no
|
|
# purpose on MySQL).
|
|
# 2. When creating an index with `using: :gin` the `using` option is discarded
|
|
# as :gin is not a valid value for MySQL.
|
|
# 3. The `:opclasses` option is stripped from add_index_options in case it's
|
|
# used anywhere other than in the add_index methods.
|
|
|
|
if defined?(ActiveRecord::ConnectionAdapters::Mysql2Adapter)
|
|
module ActiveRecord
|
|
module ConnectionAdapters
|
|
class Mysql2Adapter < AbstractMysqlAdapter
|
|
alias_method :__gitlab_add_index, :add_index
|
|
alias_method :__gitlab_add_index_sql, :add_index_sql
|
|
alias_method :__gitlab_add_index_options, :add_index_options
|
|
|
|
def add_index(table_name, column_name, options = {})
|
|
unless options[:opclasses]
|
|
__gitlab_add_index(table_name, column_name, options)
|
|
end
|
|
end
|
|
|
|
def add_index_sql(table_name, column_name, options = {})
|
|
unless options[:opclasses]
|
|
__gitlab_add_index_sql(table_name, column_name, options)
|
|
end
|
|
end
|
|
|
|
def add_index_options(table_name, column_name, options = {})
|
|
if options[:using] and options[:using] == :gin
|
|
options = options.dup
|
|
options.delete(:using)
|
|
end
|
|
|
|
if options[:opclasses]
|
|
options = options.dup
|
|
options.delete(:opclasses)
|
|
end
|
|
|
|
__gitlab_add_index_options(table_name, column_name, options)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|