class Bmg::Sql::Processor::Clip

Attributes

attributes[R]
on_empty[R]

Public Class Methods

new(attributes, allbut = false, on_empty = :is_table_dee, builder) click to toggle source
Calls superclass method Bmg::Sql::Processor::new
# File lib/bmg/sql/processor/clip.rb, line 6
def initialize(attributes, allbut = false, on_empty = :is_table_dee, builder)
  super(builder)
  @attributes = attributes
  @allbut = allbut
  @on_empty = on_empty
end

Public Instance Methods

allbut?() click to toggle source
# File lib/bmg/sql/processor/clip.rb, line 14
def allbut?
  @allbut
end
on_except(sexpr)
Alias for: on_set_operator
on_intersect(sexpr)
Alias for: on_set_operator
on_select_exp(sexpr) click to toggle source
Calls superclass method Bmg::Sql::Processor#on_select_exp
# File lib/bmg/sql/processor/clip.rb, line 25
def on_select_exp(sexpr)
  catch(:empty){ return super(sexpr) }
  send("select_#{on_empty}", sexpr)
end
on_select_list(sexpr) click to toggle source
# File lib/bmg/sql/processor/clip.rb, line 35
def on_select_list(sexpr)
  allbut = self.allbut?
  result = sexpr.select{|child|
    (child == :select_list) or
    attributes.include?(child.as_name.to_sym) == !allbut
  }
  (result.size==1) ? throw(:empty) : result
end
on_select_star(sexpr) click to toggle source
# File lib/bmg/sql/processor/clip.rb, line 30
def on_select_star(sexpr)
  raise NotImplementedError, "Allbut on * is not supported" if allbut?
  builder.select_list(attributes, builder.last_qualifier)
end
on_set_operator(sexpr) click to toggle source
# File lib/bmg/sql/processor/clip.rb, line 18
def on_set_operator(sexpr)
  apply(builder.from_self(sexpr))
end
Also aliased as: on_union, on_except, on_intersect
on_union(sexpr)
Alias for: on_set_operator

Private Instance Methods

select_is_table_dee(sexpr) click to toggle source
# File lib/bmg/sql/processor/clip.rb, line 46
def select_is_table_dee(sexpr)
  builder.select_is_table_dee(select_star(sexpr))
end
select_star(sexpr) click to toggle source
# File lib/bmg/sql/processor/clip.rb, line 50
def select_star(sexpr)
  All.new(builder).call(Star.new(builder).call(sexpr))
end