class Groonga::Client::Searcher::SchemaSynchronizer
Public Class Methods
new(schema, current_schema)
click to toggle source
# File lib/groonga/client/searcher/schema_synchronizer.rb, line 21 def initialize(schema, current_schema) @schema = schema @current_schema = current_schema end
Public Instance Methods
sync()
click to toggle source
# File lib/groonga/client/searcher/schema_synchronizer.rb, line 26 def sync sync_table sync_columns end
Private Instance Methods
create_index_column(column, lexicon_name, index_column_name)
click to toggle source
# File lib/groonga/client/searcher/schema_synchronizer.rb, line 133 def create_index_column(column, lexicon_name, index_column_name) flags = "COLUMN_INDEX" flags += "|WITH_POSITION" if column.have_full_text_search_index? execute(:column_create, :table => lexicon_name, :name => index_column_name, :flags => flags, :type => @schema.table, :source => column.name) end
decide_normalizer(custom_normalizer)
click to toggle source
# File lib/groonga/client/searcher/schema_synchronizer.rb, line 166 def decide_normalizer(custom_normalizer) if custom_normalizer == false nil else custom_normalizer || "NormalizerAuto" end end
execute(name, parameters)
click to toggle source
# File lib/groonga/client/searcher/schema_synchronizer.rb, line 174 def execute(name, parameters) Client.open do |client| response = client.execute(name, parameters) unless response.success? raise Client::Request::ErrorResponse.new(response) end response end end
find_current_columns()
click to toggle source
# File lib/groonga/client/searcher/schema_synchronizer.rb, line 157 def find_current_columns current_table = find_current_table if current_table.nil? {} else current_table.columns end end
find_current_table()
click to toggle source
# File lib/groonga/client/searcher/schema_synchronizer.rb, line 153 def find_current_table @current_schema.tables[@schema.table] end
generate_lexicon_name(column)
click to toggle source
# File lib/groonga/client/searcher/schema_synchronizer.rb, line 188 def generate_lexicon_name(column) "lexicon_#{@schema.table}_#{column.name}" end
generate_reference_table_name(column)
click to toggle source
# File lib/groonga/client/searcher/schema_synchronizer.rb, line 184 def generate_reference_table_name(column) "reference_#{@schema.table}_#{column.name}" end
remove_indexes(current_column)
click to toggle source
# File lib/groonga/client/searcher/schema_synchronizer.rb, line 144 def remove_indexes(current_column) return if current_column.nil? current_column.indexes.each do |index| execute(:column_remove, :table => index.table.name, :name => index.name) end end
sync_column(column, current_column)
click to toggle source
# File lib/groonga/client/searcher/schema_synchronizer.rb, line 49 def sync_column(column, current_column) if current_column.nil? flags = [] if column.vector? flags << "COLUMN_VECTOR" 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 execute(:column_create, :table => @schema.table, :name => column.name, :type => type, :flags => flags.join("|")) end sync_column_index(column, current_column) end
sync_column_index(column, current_column)
click to toggle source
# File lib/groonga/client/searcher/schema_synchronizer.rb, line 88 def sync_column_index(column, current_column) if column.have_index? if column.reference? lexicon_name = generate_reference_table_name(column) else lexicon_name = generate_lexicon_name(column) end index_column_name = "index" if current_column indexes = current_column.indexes else indexes = [] end indexes.each do |index| return if index.full_name == "#{lexicon_name}.#{index_column_name}" end sync_lexicon(column, lexicon_name) unless column.reference? create_index_column(column, lexicon_name, index_column_name) else remove_indexes(current_column) end end
sync_columns()
click to toggle source
# File lib/groonga/client/searcher/schema_synchronizer.rb, line 42 def sync_columns current_columns = find_current_columns @schema.columns.each do |_, column| sync_column(column, current_columns[column.name]) end end
sync_lexicon(column, lexicon_name)
click to toggle source
# File lib/groonga/client/searcher/schema_synchronizer.rb, line 111 def sync_lexicon(column, lexicon_name) return if @current_schema.tables[lexicon_name] parameters = { :name => lexicon_name, :flags => "TABLE_PAT_KEY", } if column.have_full_text_search_index? parameters[:key_type] = "ShortText" parameters[:default_tokenizer] = "TokenBigram" parameters[:normalizer] = decide_normalizer(column.normalizer) elsif column.reference? parameters[:key_type] = generate_reference_table_name(column) else parameters[:key_type] = column.type if column.text_family_type? parameters[:normalizer] = decide_normalizer(column.normalizer) end end execute(:table_create, parameters) end
sync_reference_table(column, reference_table_name)
click to toggle source
# File lib/groonga/client/searcher/schema_synchronizer.rb, line 74 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] = decide_normalizer(column.normalizer) end execute(:table_create, parameters) end
sync_table()
click to toggle source
# File lib/groonga/client/searcher/schema_synchronizer.rb, line 32 def sync_table current_table = find_current_table return if current_table # TODO: validation execute(:table_create, :name => @schema.table, :flags => "TABLE_PAT_KEY", :key_type => "ShortText") end