Kouhei Sutou
null+****@clear*****
Mon Aug 8 13:42:45 JST 2016
Kouhei Sutou 2016-08-08 13:42:45 +0900 (Mon, 08 Aug 2016) New Revision: 79b9f33fff05f1f63c61a6208fdaf6cbc62b98bc https://github.com/groonga/groonga-schema/commit/79b9f33fff05f1f63c61a6208fdaf6cbc62b98bc Message: differ: support diffing columns Modified files: lib/groonga-schema/column.rb lib/groonga-schema/differ.rb test/test-differ.rb Modified: lib/groonga-schema/column.rb (+11 -0) =================================================================== --- lib/groonga-schema/column.rb 2016-08-08 13:41:52 +0900 (08fb508) +++ lib/groonga-schema/column.rb 2016-08-08 13:42:45 +0900 (d20566f) @@ -36,6 +36,17 @@ module GroongaSchema applier.apply end + def ==(other) + return false unless other.is_a?(self.class) + + @table_name == other.table_name and + @name == other.name and + @type == other.type and + @flags.sort == other.flags.sort and + @value_type == other.value_type and + @sources == other.sources + end + class CommandApplier def initialize(column, command) @column = column Modified: lib/groonga-schema/differ.rb (+24 -0) =================================================================== --- lib/groonga-schema/differ.rb 2016-08-08 13:41:52 +0900 (4b08abc) +++ lib/groonga-schema/differ.rb 2016-08-08 13:42:45 +0900 (3c942b5) @@ -61,6 +61,30 @@ module GroongaSchema end def diff_columns(diff) + @from.columns.each do |table_name, from_columns| + to_columns =****@to*****[table_name] || {} + 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_columns[table_name] ||= {} + diff.changed_columns[table_name][name] = to_column + end + end + end + + @to.columns.each do |table_name, to_columns| + from_columns =****@from*****[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 end end Modified: test/test-differ.rb (+53 -0) =================================================================== --- test/test-differ.rb 2016-08-08 13:41:52 +0900 (4e6ccc0) +++ test/test-differ.rb 2016-08-08 13:42:45 +0900 (9e9329b) @@ -79,5 +79,58 @@ class DifferTest < Test::Unit::TestCase expected.changed_tables["Words"] =****@to*****["Words"] assert_equal(expected, @differ.diff) end + + test "column - add" do + arguments = { + "table" => "Words", + "name" => "entries_text", + "flags" => "COLUMN_INDEX|WITH_POSITION|WITH_SECTION|INDEX_TINY", + "type" => "Entries", + "source" => "title, content", + } + @to.apply_command(column_create(arguments)) + + expected = GroongaSchema::Diff.new + expected.added_columns["Words"] = { + "entries_text" => @to.columns["Words"]["entries_text"], + } + assert_equal(expected, @differ.diff) + end + + test "column - remove" do + arguments = { + "table" => "Words", + "name" => "entries_text", + "flags" => "COLUMN_INDEX|WITH_POSITION|WITH_SECTION|INDEX_TINY", + "type" => "Entries", + "source" => "title, content", + } + @from.apply_command(column_create(arguments)) + + expected = GroongaSchema::Diff.new + expected.removed_columns["Words"] = { + "entries_text" => @from.columns["Words"]["entries_text"], + } + assert_equal(expected, @differ.diff) + end + + test "column - change" do + from_arguments = { + "table" => "Words", + "name" => "entries_text", + "flags" => "COLUMN_INDEX|WITH_POSITION|WITH_SECTION|INDEX_TINY", + "type" => "Entries", + "source" => "title, content", + } + to_arguments = from_arguments.merge("source" => "title") + @from.apply_command(column_create(from_arguments)) + @to.apply_command(column_create(to_arguments)) + + expected = GroongaSchema::Diff.new + expected.changed_columns["Words"] = { + "entries_text" => @to.columns["Words"]["entries_text"], + } + assert_equal(expected, @differ.diff) + end end end -------------- next part -------------- HTML����������������������������...Download