[Groonga-commit] groonga/groonga-schema at 79b9f33 [master] differ: support diffing columns

Back to archive index

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 



More information about the Groonga-commit mailing list
Back to archive index