class Groonga::Client::CommandLine::GroongaClient

Public Class Methods

new() click to toggle source
# File lib/groonga/client/command-line/groonga-client.rb, line 36
def initialize
  @chunk = false
  @load_input_type = "json"
  @available_load_input_types = ["json"]
  if Object.const_defined?(:Arrow)
    @available_load_input_types << "apache-arrow"
  end
  @load_lock_table = false

  @runner_options = {
    :split_load_chunk_size => 10000,
    :generate_request_id   => false,
    :target_commands       => [],
    :target_tables         => [],
    :target_columns        => [],
  }
end

Public Instance Methods

run(arguments) click to toggle source
# File lib/groonga/client/command-line/groonga-client.rb, line 54
def run(arguments)
  parser = Parser.new
  command_file_paths = parser.parse(arguments) do |option_parser|
    parse_command_line(option_parser)
  end

  parser.open_client(:chunk => @chunk,
                     :load_input_type => @load_input_type,
                     :load_lock_table => @load_lock_table) do |client|
    runner = Runner.new(client, @runner_options)

    if command_file_paths.empty?
      if $stdin.tty? and $stdout.tty?
        begin
          require "readline"
        rescue LoadError
          repl = BareREPL.new(runner)
        else
          repl = ReadlineREPL.new(runner)
        end
        repl.run
      else
        runner.consume($stdin)
      end
    else
      command_file_paths.each do |command_file_path|
        runner.load(command_file_path)
      end
    end
    runner.finish
  end

  true
end

Private Instance Methods

add_target(targets, target) click to toggle source
# File lib/groonga/client/command-line/groonga-client.rb, line 156
def add_target(targets, target)
  if /\A\\(.+?)\\(i)?\z/ =~ target
    pattern = Regexp.new($1, $2 == "i")
    targets << pattern
  else
    targets << target
  end
end
parse_command_line(parser) click to toggle source
# File lib/groonga/client/command-line/groonga-client.rb, line 90
def parse_command_line(parser)
  parser.banner += " GROONGA_COMMAND_FILE1 GROONGA_COMMAND_FILE2 ..."

  parser.separator("")
  parser.separator("Request:")

  parser.on("--split-load-chunk-size=SIZE", Integer,
            "Split a large load to small loads.",
            "Each small load has at most SIZE records.",
            "Set 0 to SIZE to disable this feature.",
            "(#{@runner_options[:split_load_chunk_size]})") do |size|
    @runner_options[:split_load_chunk_size] = size
  end

  parser.on("--load-input-type=TYPE",
            @available_load_input_types,
            "Use TYPE as input type for load.",
            "[#{@available_load_input_types.join(", ")}]",
            "(#{@load_input_types})") do |type|
    @load_input_type = type
  end

  parser.on("--[no-]load-lock-table",
            "Use lock_table=yes for load.",
            "(#{@load_lock_table})") do |boolean|
    @load_lock_table = boolean
  end

  parser.on("--[no-]generate-request-id",
            "Add auto generated request ID to all commands.",
            "(#{@runner_options[:generate_request_id]})") do |boolean|
    @runner_options[:generate_request_id] = boolean
  end

  parser.on("--[no-]chunk",
            "Use \"Transfer-Encoding: chunked\" for load command.",
            "HTTP only.",
            "(#{@chunk})") do |boolean|
    @chunk = boolean
  end

  parser.on("--target-command=COMMAND",
            "Add COMMAND as target commands",
            "You can specify multiple times",
            "If COMMAND is /.../,",
            "it's treated as a regular expression") do |command|
    add_target(@runner_options[:target_commands], command)
  end

  parser.on("--target-table=TABLE",
            "Add TABLE as target tables",
            "You can specify multiple times",
            "If TABLE is /.../,",
            "it's treated as a regular expression") do |table|
    add_target(@runner_options[:target_tables], table)
  end

  parser.on("--target-column=COLUMN",
            "Add COLUMN as target columns",
            "You can specify multiple times",
            "If COLUMN is /.../,",
            "it's treated as a regular expression") do |column|
    add_target(@runner_options[:target_columns], column)
  end
end