class Groonga::Client::CommandLine::GroongaClientIndexCheck::Checker
Public Class Methods
new(client, methods, target_names)
click to toggle source
Calls superclass method
# File lib/groonga/client/command-line/groonga-client-index-check.rb, line 72 def initialize(client, methods, target_names) super(client) @methods = methods @target_names = target_names end
Private Instance Methods
check_content(index_column)
click to toggle source
# File lib/groonga/client/command-line/groonga-client-index-check.rb, line 161 def check_content(index_column) return if index_column.source.empty? lexicon_name = index_column.domain index_column_name = index_column.name suffix = Time.now.strftime("%Y%m%d%H%M%S_%N") new_index_column_name = "#{index_column_name}_#{suffix}" full_index_column_name = index_column.full_name full_new_index_column_name = "#{full_index_column_name}_#{suffix}" source_table = index_column.range column_create_similar(lexicon_name, new_index_column_name, index_column_name) begin response = select(lexicon_name, :limit => "-1", :output_columns => "_key") response.records.each do |record| token = record["_key"] unless valid_token?(source_table, full_index_column_name, full_new_index_column_name, token) token = token.to_f if token.is_a?(Time) $stderr.puts("Broken: #{index_column.full_name}: <#{token}>") return false end end true ensure column_remove(lexicon_name, new_index_column_name) end end
check_source(column)
click to toggle source
# File lib/groonga/client/command-line/groonga-client-index-check.rb, line 125 def check_source(column) return true unless column.source.empty? $stderr.puts("Source is missing: <#{column.full_name}>") false end
each_target_index_column() { |column| ... }
click to toggle source
# File lib/groonga/client/command-line/groonga-client-index-check.rb, line 91 def each_target_index_column table_list.each do |table| next unless target_table?(table) column_list(table.name).each do |column| next unless column.index? next unless target_column?(column) yield(column) end end end
run_internal()
click to toggle source
# File lib/groonga/client/command-line/groonga-client-index-check.rb, line 79 def run_internal succeeded = true each_target_index_column do |index_column| @methods.each do |method| unless __send__("check_#{method}", index_column) succeeded = false end end end succeeded end
target_column?(column)
click to toggle source
# File lib/groonga/client/command-line/groonga-client-index-check.rb, line 114 def target_column?(column) return true if @target_names.empty? @target_names.any? do |name| if name.include?(".") name == column.full_name else name == column.domain end end end
target_table?(table)
click to toggle source
# File lib/groonga/client/command-line/groonga-client-index-check.rb, line 102 def target_table?(table) return true if @target_names.empty? @target_names.any? do |name| if name.include?(".") index_table_name = name.split(".").first index_table_name == table.name else name == table.name end end end
valid_token?(source_table_name, full_index_column_name1, full_index_column_name2, token)
click to toggle source
# File lib/groonga/client/command-line/groonga-client-index-check.rb, line 131 def valid_token?(source_table_name, full_index_column_name1, full_index_column_name2, token) case token when String value = Groonga::Client::ScriptSyntax.format_string(token) when Time if token.usec.zero? value = token.to_i else value = token.strftime("%Y-%m-%d %H:%M:%S.%6N") value = Groonga::Client::ScriptSyntax.format_string(value) end else value = token end response1 = select(source_table_name, :filter => "#{full_index_column_name1} @ #{value}", :output_columns => "_id", :limit => "-1", :sort_keys => "_id") response2 = select(source_table_name, :filter => "#{full_index_column_name2} @ #{value}", :output_columns => "_id", :limit => "-1", :sort_keys => "_id") response1.records == response2.records end