YUKI Hiroshi
null+****@clear*****
Wed Sep 18 13:26:53 JST 2013
YUKI Hiroshi 2013-09-18 13:26:53 +0900 (Wed, 18 Sep 2013) New Revision: 869b2e1ae3ef8af5a7065be7ec8a812b93a04095 https://github.com/droonga/fluent-plugin-droonga/commit/869b2e1ae3ef8af5a7065be7ec8a812b93a04095 Message: Convert commands based on the streaming API of groonga-command Modified files: lib/groonga_command_converter.rb Modified: lib/groonga_command_converter.rb (+42 -20) =================================================================== --- lib/groonga_command_converter.rb 2013-09-18 13:25:03 +0900 (e14dd1d) +++ lib/groonga_command_converter.rb 2013-09-18 13:26:53 +0900 (0dfca54) @@ -26,20 +26,42 @@ module Droonga def initialize(options={}) @options = options @count = 0 + + @command_parser = Groonga::Command::Parser.new end def convert(input, &block) - @command = Groonga::Command::Parser.parse(input) - case****@comma***** - when "table_create" - yield create_table_create_command - when "column_create" - yield create_column_create_command - when "load" - split_load_command_to_add_commands(&block) - when "select" - yield create_select_command + @command_parser.on_command do |command| + case command.name + when "table_create" + yield create_table_create_command(command) + when "column_create" + yield create_column_create_command(command) + when "select" + yield create_select_command(command) + end + end + + parsed_values = nil + parsed_columns = nil + @command_parser.on_load_start do |command| + parsed_values = [] + parsed_columns = nil end + @command_parser.on_load_columns do |command, columns| + parsed_columns = columns + end + @command_parser.on_load_value do |command, value| + parsed_values << value + end + @command_parser.on_load_complete do |command| + command[:columns] = parsed_columns.join(",") + command[:values] = parsed_values.to_json + split_load_command_to_add_commands(command, &block) + end + + @command_parser << input + @command_parser.finish end private @@ -74,21 +96,21 @@ module Droonga time.iso8601 end - def create_table_create_command - create_envelope("table_create", @command.arguments) + def create_table_create_command(command) + create_envelope("table_create", command.arguments) end - def create_column_create_command - create_envelope("column_create", @command.arguments) + def create_column_create_command(command) + create_envelope("column_create", command.arguments) end - def split_load_command_to_add_commands(&block) - columns = @command[:columns].split(",") - values = @command[:values] + def split_load_command_to_add_commands(command, &block) + columns = command[:columns].split(",") + values = command[:values] values = JSON.parse(values) values.each do |record| body = { - :table => @command[:table], + :table => command[:table], } record_values = {} @@ -106,8 +128,8 @@ module Droonga end end - def create_select_command - create_envelope("select", @command.arguments) + def create_select_command(command) + create_envelope("select", command.arguments) end end end -------------- next part -------------- HTML����������������������������...Download