blob: e8d494f89f2ef939f69d9c014fbbfbc5d89d148e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
module Groonga
module ExpressionTree
class LogicalOperation
attr_reader :operator
attr_reader :nodes
def initialize(operator, nodes)
@operator = operator
@nodes = nodes
end
def build(expression)
@nodes.each_with_index do |node, i|
node.build(expression)
expression.append_operator(@operator, 2) if i > 0
end
end
def estimate_size(table)
estimated_sizes = @nodes.collect do |node|
node.estimate_size(table)
end
case @operator
when Operator::AND
estimated_sizes.min
when Operator::OR
estimated_sizes.max
else
estimated_sizes.first
end
end
end
end
end
|