class GroongaSchema::Differ
Public Class Methods
new(from, to)
click to toggle source
@param from [Schema] The original schema. @param to [Schema] The changed schema.
# File lib/groonga-schema/differ.rb, line 23 def initialize(from, to) @from = from @to = to end
Public Instance Methods
diff()
click to toggle source
# File lib/groonga-schema/differ.rb, line 28 def diff diff = Diff.new diff_plugins(diff) diff_tables(diff) diff_columns(diff) diff end
Private Instance Methods
diff_changed_column(diff, to_column)
click to toggle source
# File lib/groonga-schema/differ.rb, line 105 def diff_changed_column(diff, to_column) table_name = to_column.table_name name = to_column.name diff.changed_columns[table_name] ||= {} diff.changed_columns[table_name][name] = to_column to_column.related_columns.each do |related_column| related_table_name = related_column.table_name related_name = related_column.name diff.changed_columns[related_table_name] ||= {} diff.changed_columns[related_table_name][related_name] = related_column end end
diff_changed_table(diff, to_table)
click to toggle source
# File lib/groonga-schema/differ.rb, line 63 def diff_changed_table(diff, to_table) diff.changed_tables[to_table.name] = to_table to_table.related_tables.each do |table| diff.changed_tables[table.name] = table end to_table.related_columns.each do |column| table_name = column.table_name diff.changed_columns[table_name] ||= {} diff.changed_columns[table_name][column.name] = column end end
diff_columns(diff)
click to toggle source
# File lib/groonga-schema/differ.rb, line 77 def diff_columns(diff) @from.columns.each do |table_name, from_columns| to_columns = @to.columns[table_name] next if to_columns.nil? from_columns.each do |name, from_column| to_column = to_columns[name] if to_column.nil? diff.removed_columns[table_name] ||= {} diff.removed_columns[table_name][name] = from_column elsif from_column != to_column diff_changed_column(diff, to_column) end end end @to.columns.each do |table_name, to_columns| from_columns = @from.columns[table_name] || {} to_columns.each do |name, to_column| from_column = from_columns[name] if from_column.nil? diff.added_columns[table_name] ||= {} diff.added_columns[table_name][name] = to_column end end end end
diff_plugins(diff)
click to toggle source
# File lib/groonga-schema/differ.rb, line 37 def diff_plugins(diff) diff.removed_plugins.concat(@from.plugins - @to.plugins) diff.added_plugins.concat(@to.plugins - @from.plugins) end
diff_tables(diff)
click to toggle source
# File lib/groonga-schema/differ.rb, line 42 def diff_tables(diff) from_tables = @from.tables to_tables = @to.tables from_tables.each do |name, from_table| to_table = to_tables[name] if to_table.nil? diff.removed_tables[from_table.name] = from_table elsif from_table != to_table diff_changed_table(diff, to_table) end end to_tables.each do |name, to_table| from_table = from_tables[name] if from_table.nil? diff.added_tables[name] = to_table end end end