Class: Alf::Optimizer::Restrict
Instance Method Summary
collapse
-
#apply(operand, predicate) ⇒ Object
-
#call(restrict, search = nil) ⇒ Object
-
#on_autonum(expr, predicate) ⇒ Object
-
#on_binary_optimizable(expr, predicate) ⇒ Object
(also: #on_join, #on_matching, #on_not_matching)
-
#on_coerce(expr, predicate) ⇒ Object
-
#on_defaults(expr, predicate) ⇒ Object
-
#on_extend(expr, predicate) ⇒ Object
-
#on_group(expr, predicate) ⇒ Object
-
#on_leaf_operand(expr, predicate) ⇒ Object
(also: #on_missing)
leaf Operand, recursion end :-).
-
#on_pass_through(expr, predicate) ⇒ Object
(also: #on_clip, #on_compact, #on_sort, #on_type_safe, #on_project, #on_intersect, #on_minus, #on_union)
pass through, unoptimizable, binary optimizable.
-
#on_quota(expr, predicate) ⇒ Object
-
#on_rank(expr, predicate) ⇒ Object
-
#on_rename(expr, predicate) ⇒ Object
-
#on_restrict(expr, predicate) ⇒ Object
-
#on_summarize(expr, predicate) ⇒ Object
-
#on_ungroup(expr, predicate) ⇒ Object
-
#on_unoptimizable(expr, predicate) ⇒ Object
(also: #on_generator, #on_infer_heading)
-
#on_unwrap(expr, predicate) ⇒ Object
-
#on_wrap(expr, predicate) ⇒ Object
-
#restrict(operand, predicate) ⇒ Object
#Heading, #Relation, #Tuple, #allbut, def_aggregator_method, def_operator_method
#not_supported
#copy_and_apply
Instance Method Details
#apply(operand, predicate) ⇒ Object
18
19
20
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 18
def apply(operand, predicate)
check_constant(operand, predicate){ super }
end
|
#call(restrict, search = nil) ⇒ Object
8
9
10
11
12
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 8
def call(restrict, search = nil)
apply(restrict.operand, restrict.predicate)
rescue NotSupportedError
restrict
end
|
#on_autonum(expr, predicate) ⇒ Object
58
59
60
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 58
def on_autonum(expr, predicate)
unary_split(expr, predicate, AttrList[expr.as])
end
|
#on_binary_optimizable(expr, predicate) ⇒ Object
Also known as:
on_join, on_matching, on_not_matching
49
50
51
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 49
def on_binary_optimizable(expr, predicate)
binary_split(expr, predicate)
end
|
#on_coerce(expr, predicate) ⇒ Object
62
63
64
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 62
def on_coerce(expr, predicate)
unary_split(expr, predicate, expr.coercions.to_attr_list)
end
|
#on_defaults(expr, predicate) ⇒ Object
66
67
68
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 66
def on_defaults(expr, predicate)
unary_split(expr, predicate, expr.defaults.to_attr_list)
end
|
#on_extend(expr, predicate) ⇒ Object
72
73
74
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 72
def on_extend(expr, predicate)
unary_split(expr, predicate, expr.ext.to_attr_list)
end
|
#on_group(expr, predicate) ⇒ Object
76
77
78
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 76
def on_group(expr, predicate)
unary_split(expr, predicate, AttrList[expr.as])
end
|
#on_leaf_operand(expr, predicate) ⇒ Object
Also known as:
on_missing
leaf Operand, recursion end :-)
24
25
26
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 24
def on_leaf_operand(expr, predicate)
restrict(expr, predicate)
end
|
#on_pass_through(expr, predicate) ⇒ Object
Also known as:
on_clip, on_compact, on_sort, on_type_safe, on_project, on_intersect, on_minus, on_union
pass through, unoptimizable, binary optimizable
31
32
33
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 31
def on_pass_through(expr, predicate)
expr.with_operands(*expr.operands.map{|op| apply(op, predicate)})
end
|
#on_quota(expr, predicate) ⇒ Object
80
81
82
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 80
def on_quota(expr, predicate)
unary_split(expr, predicate, expr.summarization.to_attr_list)
end
|
#on_rank(expr, predicate) ⇒ Object
84
85
86
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 84
def on_rank(expr, predicate)
unary_split(expr, predicate, AttrList[expr.as])
end
|
#on_rename(expr, predicate) ⇒ Object
88
89
90
91
92
93
94
95
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 88
def on_rename(expr, predicate)
begin
predicate = predicate.rename(expr.renaming.invert)
rescue NotSupportedError
return restrict(expr, predicate)
end
on_pass_through(expr, predicate)
end
|
#on_restrict(expr, predicate) ⇒ Object
97
98
99
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 97
def on_restrict(expr, predicate)
apply(expr.operand, predicate & expr.predicate)
end
|
#on_summarize(expr, predicate) ⇒ Object
101
102
103
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 101
def on_summarize(expr, predicate)
unary_split(expr, predicate, expr.summarization.to_attr_list)
end
|
#on_ungroup(expr, predicate) ⇒ Object
105
106
107
108
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 105
def on_ungroup(expr, predicate)
restrict(expr, predicate)
end
|
#on_unoptimizable(expr, predicate) ⇒ Object
Also known as:
on_generator, on_infer_heading
43
44
45
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 43
def on_unoptimizable(expr, predicate)
restrict(expr, predicate)
end
|
#on_unwrap(expr, predicate) ⇒ Object
110
111
112
113
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 110
def on_unwrap(expr, predicate)
restrict(expr, predicate)
end
|
#on_wrap(expr, predicate) ⇒ Object
115
116
117
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 115
def on_wrap(expr, predicate)
unary_split(expr, predicate, AttrList[expr.as])
end
|
#restrict(operand, predicate) ⇒ Object
14
15
16
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 14
def restrict(operand, predicate)
check_constant(operand, predicate){ super }
end
|