Class: Droonga::Reducer

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

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
# 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 "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