Class: Droonga::Reducer
- Inherits:
-
Object
- Object
- Droonga::Reducer
- Defined in:
- lib/droonga/reducer.rb
Constant Summary collapse
- UNLIMITED =
XXX: We has ULIMITED defined lib/droonga/plugins/search/distributed_search_planner.rb. We should unify it.
-1
Class Method Summary collapse
-
.apply_range(items, range) ⇒ Object
TODO: This is right location?.
Instance Method Summary collapse
-
#initialize(deal) ⇒ Reducer
constructor
A new instance of Reducer.
- #reduce(left_value, right_value) ⇒ Object
Constructor Details
#initialize(deal) ⇒ Reducer
Returns a new instance of Reducer.
41 42 43 |
# File 'lib/droonga/reducer.rb', line 41 def initialize(deal) @deal = deal # TODO: deal is good name? end |
Class Method Details
.apply_range(items, range) ⇒ Object
TODO: This is right location?
20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/droonga/reducer.rb', line 20 def apply_range(items, range) if items and items.is_a?(Array) offset = range["offset"] || 0 unless offset.zero? items = items[offset..-1] || [] end limit = range["limit"] || 0 unless limit == UNLIMITED items = items[0...limit] end end items end |
Instance Method Details
#reduce(left_value, right_value) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/droonga/reducer.rb', line 45 def reduce(left_value, right_value) if left_value.nil? or right_value.nil? return right_value || left_value end reduced_value = nil case @deal["type"] when "and" reduced_value = (left_value and right_value) when "or" reduced_value = (left_value or right_value) when "sum" reduced_value = sum(left_value, right_value) reduced_value = self.class.apply_range(reduced_value, "limit" => @deal["limit"]) when "recursive-sum" reduced_value = recursive_sum(left_value, right_value) reduced_value = self.class.apply_range(reduced_value, "limit" => @deal["limit"]) when "average" reduced_value = (left_value.to_f + right_value.to_f) / 2 when "sort" reduced_value = merge(left_value, right_value, :operators => @deal["operators"], :key_column => @deal["key_column"]) reduced_value = self.class.apply_range(reduced_value, "limit" => @deal["limit"]) end reduced_value end |