[Groonga-commit] ranguba/groonga-client-rails at 4ae4e51 [master] Support reference column

Back to archive index

Kouhei Sutou null+****@clear*****
Wed Dec 21 18:47:50 JST 2016


Kouhei Sutou	2016-12-21 18:47:50 +0900 (Wed, 21 Dec 2016)

  New Revision: 4ae4e5176058931c2e008e79e36271184411a0ac
  https://github.com/ranguba/groonga-client-rails/commit/4ae4e5176058931c2e008e79e36271184411a0ac

  Message:
    Support reference column

  Modified files:
    lib/groonga/client/searcher/schema.rb
    lib/groonga/client/searcher/schema_synchronizer.rb

  Modified: lib/groonga/client/searcher/schema.rb (+4 -0)
===================================================================
--- lib/groonga/client/searcher/schema.rb    2016-12-21 18:27:32 +0900 (926e92e)
+++ lib/groonga/client/searcher/schema.rb    2016-12-21 18:47:50 +0900 (b5fff9b)
@@ -73,6 +73,10 @@ module Groonga
             @options[:vector]
           end
 
+          def reference?
+            @options[:reference]
+          end
+
           def have_index?
             @options[:index]
           end

  Modified: lib/groonga/client/searcher/schema_synchronizer.rb (+35 -2)
===================================================================
--- lib/groonga/client/searcher/schema_synchronizer.rb    2016-12-21 18:27:32 +0900 (3cd81d3)
+++ lib/groonga/client/searcher/schema_synchronizer.rb    2016-12-21 18:47:50 +0900 (a8d32ff)
@@ -56,9 +56,16 @@ module Groonga
               else
                 flags << "COLUMN_SCALAR"
               end
+              if column.reference?
+                reference_table_name = generate_reference_table_name(column)
+                sync_reference_table(column, reference_table_name)
+                type = reference_table_name
+              else
+                type = column.type
+              end
               client.column_create(:table => @schema.table,
                                    :name => column.name,
-                                   :type => column.type,
+                                   :type => type,
                                    :flags => flags.join("|"))
             end
           end
@@ -66,9 +73,25 @@ module Groonga
           sync_column_index(column, current_column)
         end
 
+        def sync_reference_table(column, reference_table_name)
+          return if @current_schema.tables[reference_table_name]
+
+          parameters = {
+            :name => reference_table_name,
+            :flags => "TABLE_PAT_KEY",
+          }
+          parameters[:key_type] = column.type
+          if column.text_family_type?
+            parameters[:normalizer] = "NormalizerAuto"
+          end
+          Client.open do |client|
+            client.table_create(parameters)
+          end
+        end
+
         def sync_column_index(column, current_column)
           if column.have_index?
-            lexicon_name = "lexicon_#{@schema.table}_#{column.name}"
+            lexicon_name = generate_lexicon_name(column)
             index_column_name = "index"
             if current_column
               indexes = current_column.indexes
@@ -96,6 +119,8 @@ module Groonga
             parameters[:key_type] = "ShortText"
             parameters[:default_tokenizer] = "TokenBigram"
             parameters[:normalizer] = "NormalizerAuto"
+          elsif column.reference?
+            parameters[:key_type] = generate_reference_table_name(column)
           else
             parameters[:key_type] = column.type
             if column.text_family_type?
@@ -141,6 +166,14 @@ module Groonga
             current_table.columns
           end
         end
+
+        def generate_reference_table_name(column)
+          "reference_#{@schema.table}_#{column.name}"
+        end
+
+        def generate_lexicon_name(column)
+          "lexicon_#{@schema.table}_#{column.name}"
+        end
       end
     end
   end
-------------- next part --------------
HTML����������������������������...
Download 



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