Class: Alf::Optimizer::Restrict

Inherits:
Algebra::Rewriter show all
Includes:
Lang::Functional
Defined in:
lib/alf-optimizer/alf/optimizer/restrict.rb

Instance Method Summary collapse

Methods included from Lang::Functional

#Heading, #Relation, #Tuple, #allbut, def_aggregator_method, def_operator_method

Methods inherited from Algebra::Rewriter

#not_supported

Methods included from Algebra::Visitor

#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

overridings



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

non relational



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

relational



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)
  # TODO:
  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)
  # TODO:
  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