Class: Alf::Sql::Processor

Inherits:
Sexpr::Rewriter
  • Object
show all
Defined in:
lib/alf/sql/processor.rb,
lib/alf/sql/processor/all.rb,
lib/alf/sql/processor/clip.rb,
lib/alf/sql/processor/join.rb,
lib/alf/sql/processor/star.rb,
lib/alf/sql/processor/merge.rb,
lib/alf/sql/processor/where.rb,
lib/alf/sql/processor/rename.rb,
lib/alf/sql/processor/flatten.rb,
lib/alf/sql/processor/reorder.rb,
lib/alf/sql/processor/distinct.rb,
lib/alf/sql/processor/order_by.rb,
lib/alf/sql/processor/from_self.rb,
lib/alf/sql/processor/requalify.rb,
lib/alf/sql/processor/semi_join.rb,
lib/alf/sql/processor/join_support.rb,
lib/alf/sql/processor/limit_offset.rb

Defined Under Namespace

Modules: JoinSupport Classes: All, Clip, Distinct, Flatten, FromSelf, Join, LimitOffset, Merge, OrderBy, Rename, Reorder, Requalify, SemiJoin, Star, Where

Constant Summary collapse

UnexpectedError =
Class.new(Alf::Error)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(builder) ⇒ Processor

Returns a new instance of Processor.



8
9
10
# File 'lib/alf/sql/processor.rb', line 8

def initialize(builder)
  @builder = builder
end

Instance Attribute Details

#builderObject (readonly)

Returns the value of attribute builder.



11
12
13
# File 'lib/alf/sql/processor.rb', line 11

def builder
  @builder
end

Instance Method Details

#on_select_exp(sexpr) ⇒ Object



31
32
33
# File 'lib/alf/sql/processor.rb', line 31

def on_select_exp(sexpr)
  sexpr.with_update(2, apply(sexpr[2]))
end

#on_set_operator(sexpr) ⇒ Object Also known as: on_union, on_except, on_intersect



22
23
24
25
26
# File 'lib/alf/sql/processor.rb', line 22

def on_set_operator(sexpr)
  sexpr.each_with_index.map{|child,index|
    index <= 1 ? child : apply(child)
  }
end

#on_with_exp(sexpr) ⇒ Object



13
14
15
16
17
18
19
20
# File 'lib/alf/sql/processor.rb', line 13

def on_with_exp(sexpr)
  applied = apply(sexpr.select_exp)
  if applied.with_exp?
    merge_with_exps(sexpr, applied, applied.select_exp)
  else
    sexpr.with_update(-1, applied)
  end
end