Commit fc59df67 authored by Jasper Maes's avatar Jasper Maes

Rails 5: include opclasses in rails 5 schema dump

parent 380c7169
---
title: 'Rails 5: include opclasses in rails 5 schema dump'
merge_request: 21416
author: Jasper Maes
type: fixed
...@@ -144,7 +144,10 @@ module ActiveRecord ...@@ -144,7 +144,10 @@ module ActiveRecord
[column, opclass] if opclass [column, opclass] if opclass
end.compact] end.compact]
IndexDefinition.new(table_name, index_name, unique, column_names, [], orders, where, nil, using, opclasses) index_attrs = [table_name, index_name, unique, column_names, [], orders, where, nil, using, opclasses]
index_attrs.insert(-2, nil) if Gitlab.rails5? # include index comment for Rails 5
IndexDefinition.new(*index_attrs)
end end
end.compact end.compact
end end
...@@ -172,29 +175,38 @@ module ActiveRecord ...@@ -172,29 +175,38 @@ module ActiveRecord
def indexes(table, stream) def indexes(table, stream)
if (indexes = @connection.indexes(table)).any? if (indexes = @connection.indexes(table)).any?
add_index_statements = indexes.map do |index| add_index_statements = indexes.map do |index|
statement_parts = [ table_name = remove_prefix_and_suffix(index.table).inspect
"add_index #{remove_prefix_and_suffix(index.table).inspect}", " add_index #{([table_name]+index_parts(index)).join(', ')}"
index.columns.inspect,
"name: #{index.name.inspect}",
]
statement_parts << 'unique: true' if index.unique
index_lengths = (index.lengths || []).compact
statement_parts << "length: #{Hash[index.columns.zip(index.lengths)].inspect}" if index_lengths.any?
index_orders = index.orders || {}
statement_parts << "order: #{index.orders.inspect}" if index_orders.any?
statement_parts << "where: #{index.where.inspect}" if index.where
statement_parts << "using: #{index.using.inspect}" if index.using
statement_parts << "type: #{index.type.inspect}" if index.type
statement_parts << "opclasses: #{index.opclasses}" if index.opclasses.present?
" #{statement_parts.join(', ')}"
end end
stream.puts add_index_statements.sort.join("\n") stream.puts add_index_statements.sort.join("\n")
stream.puts stream.puts
end end
end end
def indexes_in_create(table, stream)
if (indexes = @connection.indexes(table)).any?
index_statements = indexes.map do |index|
" t.index #{index_parts(index).join(', ')}"
end
stream.puts index_statements.sort.join("\n")
end
end
def index_parts(index)
index_parts = [
index.columns.inspect,
"name: #{index.name.inspect}",
]
index_parts << "unique: true" if index.unique
index_parts << "length: { #{format_options(index.lengths)} }" if index.lengths.present?
index_parts << "order: { #{format_options(index.orders)} }" if index.orders.present?
index_parts << "where: #{index.where.inspect}" if index.where
index_parts << "using: #{index.using.inspect}" if index.using
index_parts << "type: #{index.type.inspect}" if index.type
index_parts << "opclasses: #{index.opclasses.inspect}" if index.opclasses.present?
index_parts << "comment: #{index.comment.inspect}" if Gitlab.rails5? && index.comment
index_parts
end
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment