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



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

relational



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