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_page, #on_frame)
-
#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
60
61
62
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 60
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
51
52
53
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 51
def on_binary_optimizable(expr, predicate)
binary_split(expr, predicate)
end
|
#on_coerce(expr, predicate) ⇒ Object
64
65
66
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 64
def on_coerce(expr, predicate)
unary_split(expr, predicate, expr.coercions.to_attr_list)
end
|
#on_defaults(expr, predicate) ⇒ Object
68
69
70
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 68
def on_defaults(expr, predicate)
unary_split(expr, predicate, expr.defaults.to_attr_list)
end
|
#on_extend(expr, predicate) ⇒ Object
74
75
76
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 74
def on_extend(expr, predicate)
unary_split(expr, predicate, expr.ext.to_attr_list)
end
|
#on_group(expr, predicate) ⇒ Object
78
79
80
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 78
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
82
83
84
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 82
def on_quota(expr, predicate)
unary_split(expr, predicate, expr.summarization.to_attr_list)
end
|
#on_rank(expr, predicate) ⇒ Object
86
87
88
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 86
def on_rank(expr, predicate)
unary_split(expr, predicate, AttrList[expr.as])
end
|
#on_rename(expr, predicate) ⇒ Object
90
91
92
93
94
95
96
97
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 90
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
99
100
101
102
103
104
105
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 99
def on_restrict(expr, predicate)
if predicate.native? or expr.predicate.native?
restrict(expr, predicate)
else
apply(expr.operand, predicate & expr.predicate)
end
end
|
#on_summarize(expr, predicate) ⇒ Object
107
108
109
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 107
def on_summarize(expr, predicate)
unary_split(expr, predicate, expr.summarization.to_attr_list)
end
|
#on_ungroup(expr, predicate) ⇒ Object
111
112
113
114
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 111
def on_ungroup(expr, predicate)
restrict(expr, predicate)
end
|
#on_unoptimizable(expr, predicate) ⇒ Object
Also known as:
on_generator, on_infer_heading, on_page, on_frame
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
116
117
118
119
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 116
def on_unwrap(expr, predicate)
restrict(expr, predicate)
end
|
#on_wrap(expr, predicate) ⇒ Object
121
122
123
|
# File 'lib/alf-optimizer/alf/optimizer/restrict.rb', line 121
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
|