[Groonga-commit] ranguba/groonga-client-model at cfc1ad3 [master] migration: support reference column

Back to archive index

Kouhei Sutou null+****@clear*****
Tue Mar 7 19:15:25 JST 2017


Kouhei Sutou	2017-03-07 19:15:25 +0900 (Tue, 07 Mar 2017)

  New Revision: cfc1ad3cc4e93b37e694a3c9d711c50bbdfb96e2
  https://github.com/ranguba/groonga-client-model/commit/cfc1ad3cc4e93b37e694a3c9d711c50bbdfb96e2

  Message:
    migration: support reference column

  Modified files:
    lib/groonga_client_model/migration.rb
    test/unit/migration/test_create_table.rb

  Modified: lib/groonga_client_model/migration.rb (+7 -0)
===================================================================
--- lib/groonga_client_model/migration.rb    2017-03-07 17:54:15 +0900 (b0f7c54)
+++ lib/groonga_client_model/migration.rb    2017-03-07 19:15:25 +0900 (1ba80cd)
@@ -442,6 +442,13 @@ module GroongaClientModel
         geo_point(column_name, options.merge(datum: :tokyo))
       end
 
+      def reference(column_name, reference_table_name, options={})
+        @migration.add_column(@table_name,
+                              column_name,
+                              reference_table_name,
+                              options)
+      end
+
       def index(source_table_name, source_column_names, options={})
         source_column_names = Array(source_column_names)
         column_name = [source_table_name, *source_column_names].join("_")

  Modified: test/unit/migration/test_create_table.rb (+62 -1)
===================================================================
--- test/unit/migration/test_create_table.rb    2017-03-07 17:54:15 +0900 (d79db13)
+++ test/unit/migration/test_create_table.rb    2017-03-07 19:15:25 +0900 (14b6672)
@@ -138,7 +138,7 @@ table_create terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --nor
       expected_up_report = <<-REPORT
 -- create_table(:posts, {:type=>"TABLE_NO_KEY"})
    -> 0.0s
--- add_column(:posts, :#{column_name}, {:flags=>["COLUMN_SCALAR"], :value_type=>"#{groonga_type}"})
+-- add_column(:posts, :#{column_name}, {:flags=>["COLUMN_SCALAR"], :value_type=>#{groonga_type.inspect}})
    -> 0.0s
       REPORT
       expected_down_report = <<-REPORT
@@ -302,6 +302,67 @@ column_create posts #{column_name} COLUMN_SCALAR #{groonga_type}
       end
     end
 
+    sub_test_case("#reference") do
+      def assert_migrate_add_reference_column(column_name,
+                                              reference_table_name,
+                                              options={})
+        open_client do |client|
+          client.table_create(name: reference_table_name,
+                              flags: "TABLE_HASH_KEY",
+                              key_type: "ShortText")
+        end
+
+        flags = []
+        case options[:type]
+        when :vector
+          flags << "COLUMN_VECTOR"
+        else
+          flags << "COLUMN_SCALAR"
+        end
+
+        expected_up_report = <<-REPORT
+-- create_table(:posts, {:type=>"TABLE_NO_KEY"})
+   -> 0.0s
+-- add_column(:posts, :#{column_name}, {:flags=>#{flags.inspect}, :value_type=>#{reference_table_name.inspect}})
+   -> 0.0s
+        REPORT
+        expected_down_report = <<-REPORT
+-- remove_table(:posts)
+   -> 0.0s
+        REPORT
+        expected_dump = <<-DUMP.chomp
+table_create posts TABLE_NO_KEY
+
+table_create #{reference_table_name} TABLE_HASH_KEY ShortText
+
+column_create posts #{column_name} #{flags.join("|")} #{reference_table_name}
+        DUMP
+        assert_migrate(expected_up_report,
+                       expected_down_report,
+                       expected_dump) do |migration|
+          migration.instance_eval do
+            create_table(:posts) do |table|
+              yield(table)
+            end
+          end
+        end
+      end
+
+      test("default") do
+        assert_migrate_add_reference_column(:user, :users) do |table|
+          table.reference(:user, :users)
+        end
+      end
+
+      test("type: :vector") do
+        assert_migrate_add_reference_column(:user,
+                                            :users,
+                                            type: :vector) do |table|
+          table.reference(:user, :users, type: :vector)
+        end
+      end
+    end
+
     sub_test_case("#index") do
       test("for full text search") do
         expected_up_report = <<-REPORT
-------------- next part --------------
HTML����������������������������...
Download 



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