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