fluent-plugin-droonga 0.0.2 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +6 -0
  3. data/.yardopts +7 -0
  4. data/Gemfile +14 -2
  5. data/LICENSE.txt +1 -1
  6. data/README.md +1 -1
  7. data/Rakefile +27 -5
  8. data/benchmark/benchmark.rb +1 -1
  9. data/benchmark/utils.rb +9 -6
  10. data/benchmark/watch/benchmark-notify.rb +2 -2
  11. data/benchmark/watch/benchmark-publish.rb +1 -1
  12. data/benchmark/watch/benchmark-scan.rb +1 -1
  13. data/benchmark/watch/catalog.json +1 -1
  14. data/bin/grn2jsons +1 -1
  15. data/fluent-plugin-droonga.gemspec +5 -3
  16. data/lib/droonga/adapter.rb +13 -130
  17. data/lib/droonga/adapter_plugin.rb +51 -0
  18. data/lib/droonga/catalog.rb +2 -2
  19. data/lib/droonga/collector.rb +107 -0
  20. data/lib/droonga/collector_plugin.rb +82 -0
  21. data/lib/droonga/command_mapper.rb +1 -1
  22. data/lib/droonga/{proxy.rb → dispatcher.rb} +116 -151
  23. data/lib/droonga/distributor.rb +51 -0
  24. data/lib/droonga/distributor_plugin.rb +59 -0
  25. data/lib/droonga/engine.rb +9 -50
  26. data/lib/droonga/farm.rb +47 -0
  27. data/lib/droonga/forwarder.rb +125 -0
  28. data/lib/droonga/handler.rb +69 -60
  29. data/lib/droonga/handler_plugin.rb +22 -11
  30. data/lib/droonga/input_message.rb +51 -0
  31. data/lib/droonga/job_queue.rb +5 -1
  32. data/lib/droonga/job_queue_schema.rb +1 -1
  33. data/lib/droonga/logger.rb +1 -1
  34. data/lib/droonga/partition.rb +76 -0
  35. data/lib/droonga/pluggable.rb +62 -0
  36. data/lib/droonga/plugin.rb +18 -16
  37. data/lib/droonga/plugin/{adapter_groonga.rb → adapter/groonga.rb} +10 -10
  38. data/lib/droonga/plugin/adapter/groonga/select.rb +13 -4
  39. data/lib/droonga/plugin/collector/basic.rb +142 -0
  40. data/lib/droonga/plugin/distributor/crud.rb +43 -0
  41. data/lib/droonga/plugin/distributor/groonga.rb +37 -0
  42. data/lib/droonga/plugin/distributor/search.rb +273 -0
  43. data/lib/droonga/plugin/distributor/watch.rb +39 -0
  44. data/lib/droonga/plugin/{handler_add.rb → handler/add.rb} +6 -6
  45. data/lib/droonga/plugin/{handler_forward.rb → handler/forward.rb} +9 -4
  46. data/lib/droonga/plugin/{handler_groonga.rb → handler/groonga.rb} +36 -4
  47. data/lib/droonga/plugin/handler/groonga/column_create.rb +5 -9
  48. data/lib/droonga/plugin/handler/groonga/table_create.rb +9 -18
  49. data/lib/droonga/plugin/{handler_search.rb → handler/search.rb} +4 -4
  50. data/lib/droonga/plugin/{handler_watch.rb → handler/watch.rb} +4 -4
  51. data/lib/droonga/plugin_loader.rb +45 -0
  52. data/lib/droonga/plugin_registerable.rb +51 -0
  53. data/lib/droonga/plugin_repository.rb +56 -0
  54. data/lib/droonga/processor.rb +64 -0
  55. data/lib/droonga/searcher.rb +16 -7
  56. data/lib/droonga/server.rb +5 -9
  57. data/lib/droonga/sweeper.rb +1 -1
  58. data/lib/droonga/watch_schema.rb +1 -1
  59. data/lib/droonga/watcher.rb +1 -1
  60. data/lib/droonga/worker.rb +21 -9
  61. data/lib/fluent/plugin/out_droonga.rb +33 -15
  62. data/lib/groonga_command_converter.rb +1 -1
  63. data/sample/cluster/fluentd.conf +0 -1
  64. data/test/command/config/default/catalog.json +43 -0
  65. data/test/command/config/default/fluentd.conf +11 -0
  66. data/test/command/fixture/documents.jsons +208 -0
  67. data/test/command/fixture/user-table-array.jsons +38 -0
  68. data/test/command/fixture/user-table.jsons +38 -0
  69. data/test/command/run-test.rb +35 -0
  70. data/test/command/suite/add/minimum.expected +12 -0
  71. data/test/command/suite/add/minimum.test +11 -0
  72. data/test/command/suite/add/with-values.expected +12 -0
  73. data/test/command/suite/add/with-values.test +17 -0
  74. data/test/command/suite/add/without-key.expected +12 -0
  75. data/test/command/suite/add/without-key.test +16 -0
  76. data/test/command/suite/groonga/column_create/scalar.expected +34 -0
  77. data/test/command/suite/groonga/column_create/scalar.test +17 -0
  78. data/test/command/suite/groonga/column_create/vector.expected +34 -0
  79. data/test/command/suite/groonga/column_create/vector.test +18 -0
  80. data/test/command/suite/groonga/select/minimum.expected +26 -0
  81. data/test/command/suite/groonga/select/minimum.test +8 -0
  82. data/test/command/suite/groonga/table_create/array.expected +17 -0
  83. data/test/command/suite/groonga/table_create/array.test +8 -0
  84. data/test/command/suite/groonga/table_create/hash.expected +17 -0
  85. data/test/command/suite/groonga/table_create/hash.test +8 -0
  86. data/test/command/suite/search/array-attribute-label.expected +25 -0
  87. data/test/command/suite/search/array-attribute-label.test +30 -0
  88. data/test/command/suite/search/chained-queries.expected +45 -0
  89. data/test/command/suite/search/chained-queries.test +43 -0
  90. data/test/command/suite/search/complex.expected +52 -0
  91. data/test/command/suite/search/complex.test +25 -0
  92. data/test/command/suite/search/condition-nested.expected +19 -0
  93. data/test/command/suite/search/condition-nested.test +29 -0
  94. data/test/command/suite/search/condition-query.expected +28 -0
  95. data/test/command/suite/search/condition-query.test +25 -0
  96. data/test/command/suite/search/condition-script.expected +28 -0
  97. data/test/command/suite/search/condition-script.test +28 -0
  98. data/test/command/suite/search/hash-attribute-label.expected +34 -0
  99. data/test/command/suite/search/hash-attribute-label.test +38 -0
  100. data/test/command/suite/search/minimum.expected +13 -0
  101. data/test/command/suite/search/minimum.test +16 -0
  102. data/test/command/suite/search/multiple-queries.expected +39 -0
  103. data/test/command/suite/search/multiple-queries.test +39 -0
  104. data/test/command/suite/search/output-range.expected +28 -0
  105. data/test/command/suite/search/output-range.test +25 -0
  106. data/test/command/suite/search/simple.expected +52 -0
  107. data/test/command/suite/search/simple.test +24 -0
  108. data/test/command/suite/search/sort-and-output-range.expected +25 -0
  109. data/test/command/suite/search/sort-and-output-range.test +29 -0
  110. data/test/command/suite/search/sort-range.expected +28 -0
  111. data/test/command/suite/search/sort-range.test +28 -0
  112. data/test/command/suite/search/sort-with-invisible-column.expected +28 -0
  113. data/test/command/suite/search/sort-with-invisible-column.test +28 -0
  114. data/test/unit/fixtures/array.grn +18 -0
  115. data/test/{fixtures → unit/fixtures}/catalog.json +0 -0
  116. data/test/{fixtures → unit/fixtures}/document.grn +20 -9
  117. data/test/unit/fixtures/reference/array.grn +11 -0
  118. data/test/unit/fixtures/reference/hash.grn +7 -0
  119. data/test/{helper.rb → unit/helper.rb} +2 -1
  120. data/test/{helper → unit/helper}/fixture.rb +1 -1
  121. data/test/unit/helper/plugin_helper.rb +38 -0
  122. data/test/{helper → unit/helper}/sandbox.rb +19 -6
  123. data/test/{helper → unit/helper}/stub_worker.rb +1 -1
  124. data/test/{helper → unit/helper}/watch_helper.rb +1 -13
  125. data/test/{plugin → unit/plugin}/adapter/groonga/test_select.rb +108 -4
  126. data/test/unit/plugin/collector/test_basic.rb +558 -0
  127. data/test/unit/plugin/distributor/test_search.rb +914 -0
  128. data/test/{plugin → unit/plugin}/handler/groonga/test_column_create.rb +18 -14
  129. data/test/{plugin → unit/plugin}/handler/groonga/test_table_create.rb +13 -11
  130. data/test/{plugin/handler/test_handler_add.rb → unit/plugin/handler/test_add.rb} +2 -14
  131. data/test/{plugin/handler/test_handler_groonga.rb → unit/plugin/handler/test_groonga.rb} +6 -26
  132. data/test/unit/plugin/handler/test_search.rb +601 -0
  133. data/test/{plugin/handler/test_handler_watch.rb → unit/plugin/handler/test_watch.rb} +2 -2
  134. data/test/{run-test.rb → unit/run-test.rb} +3 -3
  135. data/test/{test_adapter.rb → unit/test_adapter.rb} +17 -14
  136. data/test/{test_catalog.rb → unit/test_catalog.rb} +4 -4
  137. data/test/{test_command_mapper.rb → unit/test_command_mapper.rb} +1 -1
  138. data/test/{test_groonga_command_converter.rb → unit/test_groonga_command_converter.rb} +3 -3
  139. data/test/{test_job_queue_schema.rb → unit/test_job_queue_schema.rb} +1 -1
  140. data/test/{test_output.rb → unit/test_output.rb} +9 -9
  141. data/test/{test_handler.rb → unit/test_plugin.rb} +19 -22
  142. data/test/unit/test_plugin_repository.rb +89 -0
  143. data/test/{test_sweeper.rb → unit/test_sweeper.rb} +1 -1
  144. data/test/{test_watch_schema.rb → unit/test_watch_schema.rb} +1 -1
  145. data/test/{test_watcher.rb → unit/test_watcher.rb} +1 -1
  146. metadata +226 -66
  147. data/lib/droonga/executor.rb +0 -289
  148. data/lib/droonga/plugin/handler_proxy.rb +0 -82
  149. data/test/plugin/handler/test_handler_search.rb +0 -512
  150. data/test/test_worker.rb +0 -144
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
- # Copyright (C) 2013 droonga project
3
+ # Copyright (C) 2013 Droonga Project
4
4
  #
5
5
  # This library is free software; you can redistribute it and/or
6
6
  # modify it under the terms of the GNU Lesser General Public
@@ -17,11 +17,11 @@
17
17
 
18
18
  require "groonga"
19
19
 
20
- require "droonga/handler"
20
+ require "droonga/handler_plugin"
21
21
 
22
22
  module Droonga
23
- class GroongaHandler < Droonga::Handler
24
- Droonga::HandlerPlugin.register("groonga", self)
23
+ class GroongaHandler < Droonga::HandlerPlugin
24
+ repository.register("groonga", self)
25
25
 
26
26
  command :table_create
27
27
  def table_create(request)
@@ -45,6 +45,38 @@ module Droonga
45
45
  SUCCESS = 0
46
46
  INVALID_ARGUMENT = -22
47
47
  end
48
+
49
+ class Command
50
+ class CommandError < StandardError
51
+ attr_reader :status, :message, :result
52
+
53
+ def initialize(params={})
54
+ @status = params[:status]
55
+ @message = params[:message]
56
+ @result = params[:result]
57
+ end
58
+ end
59
+
60
+ def initialize(context)
61
+ @context = context
62
+ end
63
+
64
+ def execute(request)
65
+ @start_time = Time.now.to_f
66
+ result = process_request(request)
67
+ [header(Status::SUCCESS), result]
68
+ rescue CommandError => error
69
+ [header(error.status, error.message), error.result]
70
+ end
71
+
72
+ private
73
+ def header(return_code, error_message="")
74
+ elapsed_time = Time.now.to_f - @start_time
75
+ header = [return_code, @start_time, elapsed_time]
76
+ header.push(error_message) unless error_message.empty?
77
+ header
78
+ end
79
+ end
48
80
  end
49
81
  end
50
82
 
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
- # Copyright (C) 2013 droonga project
3
+ # Copyright (C) 2013 Droonga Project
4
4
  #
5
5
  # This library is free software; you can redistribute it and/or
6
6
  # modify it under the terms of the GNU Lesser General Public
@@ -20,12 +20,8 @@ require "groonga/command/column-create"
20
20
 
21
21
  module Droonga
22
22
  class GroongaHandler
23
- class ColumnCreate
24
- def initialize(context)
25
- @context = context
26
- end
27
-
28
- def execute(request)
23
+ class ColumnCreate < Command
24
+ def process_request(request)
29
25
  command_class = Groonga::Command.find("column_create")
30
26
  @command = command_class.new("column_create", request)
31
27
 
@@ -48,7 +44,7 @@ module Droonga
48
44
  table.column(column_name, column_type, options)
49
45
  end
50
46
  end
51
- [true]
47
+ true
52
48
  end
53
49
 
54
50
  def create_column_options
@@ -78,7 +74,7 @@ module Droonga
78
74
  table.index("#{target_table}.#{target_column}", options)
79
75
  end
80
76
  end
81
- [true]
77
+ true
82
78
  end
83
79
 
84
80
  def create_index_options
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
- # Copyright (C) 2013 droonga project
3
+ # Copyright (C) 2013 Droonga Project
4
4
  #
5
5
  # This library is free software; you can redistribute it and/or
6
6
  # modify it under the terms of the GNU Lesser General Public
@@ -20,32 +20,23 @@ require "groonga/command/table-create"
20
20
 
21
21
  module Droonga
22
22
  class GroongaHandler
23
- class TableCreate
24
- def initialize(context)
25
- @context = context
26
- end
27
-
28
- def header(return_code, error_message="")
29
- elapsed_time = Time.now.to_f - @start_time
30
- header = [return_code, @start_time, elapsed_time]
31
- header.push(error_message) unless error_message.empty?
32
- header
33
- end
34
-
35
- def execute(request)
36
- @start_time = Time.now.to_f
37
-
23
+ class TableCreate < Command
24
+ def process_request(request)
38
25
  command_class = Groonga::Command.find("table_create")
39
26
  @command = command_class.new("table_create", request)
40
27
 
41
28
  name = @command["name"]
42
- return [header(Status::INVALID_ARGUMENT, "Should not create anonymous table"), false] unless name
29
+ unless name
30
+ raise CommandError.new(:status => Status::INVALID_ARGUMENT,
31
+ :message => "Should not create anonymous table",
32
+ :result => false)
33
+ end
43
34
 
44
35
  options = parse_command
45
36
  Groonga::Schema.define(:context => @context) do |schema|
46
37
  schema.create_table(name, options)
47
38
  end
48
- [header(Status::SUCCESS), true]
39
+ true
49
40
  end
50
41
 
51
42
  private
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
- # Copyright (C) 2013 droonga project
3
+ # Copyright (C) 2013 Droonga Project
4
4
  #
5
5
  # This library is free software; you can redistribute it and/or
6
6
  # modify it under the terms of the GNU Lesser General Public
@@ -15,12 +15,12 @@
15
15
  # License along with this library; if not, write to the Free Software
16
16
  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
17
 
18
- require "droonga/handler"
18
+ require "droonga/handler_plugin"
19
19
  require "droonga/searcher"
20
20
 
21
21
  module Droonga
22
- class SearchHandler < Droonga::Handler
23
- Droonga::HandlerPlugin.register("search", self)
22
+ class SearchHandler < Droonga::HandlerPlugin
23
+ repository.register("search", self)
24
24
 
25
25
  command :search
26
26
  def search(request)
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
- # Copyright (C) 2013 droonga project
3
+ # Copyright (C) 2013 Droonga Project
4
4
  #
5
5
  # This library is free software; you can redistribute it and/or
6
6
  # modify it under the terms of the GNU Lesser General Public
@@ -18,11 +18,11 @@
18
18
  require "droonga/watcher"
19
19
  require "droonga/sweeper"
20
20
  require "droonga/watch_schema"
21
- require "droonga/handler"
21
+ require "droonga/handler_plugin"
22
22
 
23
23
  module Droonga
24
- class WatchHandler < Droonga::Handler
25
- Droonga::HandlerPlugin.register("watch", self)
24
+ class WatchHandler < Droonga::HandlerPlugin
25
+ repository.register("watch", self)
26
26
 
27
27
  def initialize(*args)
28
28
  super
@@ -0,0 +1,45 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2013 Droonga Project
4
+ #
5
+ # This library is free software; you can redistribute it and/or
6
+ # modify it under the terms of the GNU Lesser General Public
7
+ # License version 2.1 as published by the Free Software Foundation.
8
+ #
9
+ # This library is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # Lesser General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Lesser General Public
15
+ # License along with this library; if not, write to the Free Software
16
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
+
18
+ module Droonga
19
+ class PluginLoader
20
+ class << self
21
+ def load_all
22
+ $LOAD_PATH.each do |load_path|
23
+ Dir.glob("#{load_path}/droonga/plugin/*") do |type_path|
24
+ next unless File.directory?(type_path)
25
+ type = File.basename(type_path)
26
+ Dir.glob("#{type_path}/*.rb") do |path|
27
+ name = File.basename(path, ".rb")
28
+ plugin = new(type, name)
29
+ plugin.load
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+
36
+ def initialize(type, name)
37
+ @type = type
38
+ @name = name
39
+ end
40
+
41
+ def load
42
+ require "droonga/plugin/#{@type}/#{@name}"
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,51 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2013 Droonga Project
4
+ #
5
+ # This library is free software; you can redistribute it and/or
6
+ # modify it under the terms of the GNU Lesser General Public
7
+ # License version 2.1 as published by the Free Software Foundation.
8
+ #
9
+ # This library is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # Lesser General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Lesser General Public
15
+ # License along with this library; if not, write to the Free Software
16
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
+
18
+ require "droonga/command_mapper"
19
+ require "droonga/plugin_repository"
20
+
21
+ module Droonga
22
+ module PluginRegisterable
23
+ class << self
24
+ def extended(plugin_class)
25
+ super
26
+ plugin_class.class_variable_set(:@@repository, PluginRepository.new)
27
+ end
28
+ end
29
+
30
+ def repository
31
+ class_variable_get(:@@repository)
32
+ end
33
+
34
+ def inherited(sub_class)
35
+ super
36
+ sub_class.instance_variable_set(:@command_mapper, CommandMapper.new)
37
+ end
38
+
39
+ def command(name_or_map)
40
+ @command_mapper.register(name_or_map)
41
+ end
42
+
43
+ def method_name(command)
44
+ @command_mapper[command]
45
+ end
46
+
47
+ def processable?(command)
48
+ not method_name(command).nil?
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,56 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2013 Droonga Project
4
+ #
5
+ # This library is free software; you can redistribute it and/or
6
+ # modify it under the terms of the GNU Lesser General Public
7
+ # License version 2.1 as published by the Free Software Foundation.
8
+ #
9
+ # This library is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # Lesser General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Lesser General Public
15
+ # License along with this library; if not, write to the Free Software
16
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
+
18
+ module Droonga
19
+ class PluginRepository
20
+ include Enumerable
21
+
22
+ def initialize
23
+ @plugins = {}
24
+ end
25
+
26
+ def each(&block)
27
+ @plugins.each(&block)
28
+ end
29
+
30
+ def register(name, klass)
31
+ @plugins[name] = klass
32
+ end
33
+
34
+ def [](name)
35
+ @plugins[name]
36
+ end
37
+
38
+ def clear
39
+ @plugins.clear
40
+ end
41
+
42
+ def instantiate(name, *args, &block)
43
+ plugin_class = self[name]
44
+ if plugin_class.nil?
45
+ # TODO: use the original error
46
+ raise ArgumentError, "unknown plugin: <#{name}>"
47
+ end
48
+ begin
49
+ plugin_class.new(*args, &block)
50
+ rescue
51
+ p [plugin_class, plugin_class.method(:new), plugin_class.method(:new).arity, args.size]
52
+ raise
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,64 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2013 Droonga Project
4
+ #
5
+ # This library is free software; you can redistribute it and/or
6
+ # modify it under the terms of the GNU Lesser General Public
7
+ # License version 2.1 as published by the Free Software Foundation.
8
+ #
9
+ # This library is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # Lesser General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Lesser General Public
15
+ # License along with this library; if not, write to the Free Software
16
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
+
18
+ require "droonga/job_queue"
19
+ require "droonga/handler"
20
+
21
+ module Droonga
22
+ class Processor
23
+ def initialize(options={})
24
+ @options = options
25
+ @database_name = @options[:database]
26
+ @queue_name = @options[:options] || "DroongaQueue"
27
+ @n_workers = @options[:n_workers] || 0
28
+ end
29
+
30
+ def start
31
+ Droonga::JobQueue.ensure_schema(@database_name,
32
+ @queue_name)
33
+ @job_queue = JobQueue.open(@database_name, @queue_name)
34
+ @handler = Handler.new(@options)
35
+ end
36
+
37
+ def shutdown
38
+ $log.trace("processor: shutdown: start")
39
+ @handler.shutdown
40
+ @job_queue.close
41
+ $log.trace("processor: shutdown: done")
42
+ end
43
+
44
+ def process(envelope, synchronous=nil)
45
+ $log.trace("proessor: process: start")
46
+ reply_to = envelope["replyTo"]
47
+ command = envelope["type"]
48
+ if @handler.processable?(command)
49
+ $log.trace("proessor: process: handlable: #{command}")
50
+ if synchronous.nil?
51
+ synchronous = @handler.prefer_synchronous?(command)
52
+ end
53
+ if @n_workers.zero? or synchronous
54
+ @handler.process(envelope)
55
+ else
56
+ @job_queue.push_message(envelope)
57
+ end
58
+ else
59
+ $log.trace("proessor: process: ignore #{command}")
60
+ end
61
+ $log.trace("proessor: process: done")
62
+ end
63
+ end
64
+ end
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
- # Copyright (C) 2013 droonga project
3
+ # Copyright (C) 2013 Droonga Project
4
4
  #
5
5
  # This library is free software; you can redistribute it and/or
6
6
  # modify it under the terms of the GNU Lesser General Public
@@ -159,8 +159,8 @@ module Droonga
159
159
  end
160
160
  if condition["query"]
161
161
  options[:syntax] = :query
162
- if condition["default_operator"]
163
- case condition["default_operator"]
162
+ if condition["defaultOperator"]
163
+ case condition["defaultOperator"]
164
164
  when "||"
165
165
  options[:default_operator] = Groonga::Operator::OR
166
166
  when "&&"
@@ -171,17 +171,17 @@ module Droonga
171
171
  raise "undefined operator assigned #{condition["default_operator"]}"
172
172
  end
173
173
  end
174
- if condition["allow_pragma"]
174
+ if condition["allowPragma"]
175
175
  options[:allow_pragma] = true
176
176
  end
177
- if condition["allow_column"]
177
+ if condition["allowColumn"]
178
178
  options[:allow_column] = true
179
179
  end
180
180
  expression.parse(condition["query"], options)
181
181
  elsif condition["script"]
182
182
  # "script" is ignored when "query" is also assigned.
183
183
  options[:syntax] = :script
184
- if condition["allow_update"]
184
+ if condition["allowUpdate"]
185
185
  options[:allow_update] = true
186
186
  end
187
187
  expression.parse(condition["script"], options)
@@ -296,8 +296,12 @@ module Droonga
296
296
  # XXX IMPLEMENT ME!!!
297
297
  attributes = nil
298
298
  if @query["output"]["format"] == "complex"
299
+ # should convert columnst to an object like:
300
+ # {"_id" => {"type" => "UInt32", "vector" => false}}
299
301
  attributes = {}
300
302
  else
303
+ # should convert columnst to an object like:
304
+ # [{"name" => "_id", "type" => "UInt32", "vector" => false}]
301
305
  attributes = []
302
306
  end
303
307
 
@@ -360,7 +364,12 @@ module Droonga
360
364
  variable.value = record
361
365
  expression.execute
362
366
  else
363
- record[attribute[:source]]
367
+ value = record[attribute[:source]]
368
+ if value.is_a?(Groonga::Record)
369
+ value.record_id
370
+ else
371
+ value
372
+ end
364
373
  end
365
374
  end
366
375
  end