class Bmg::Sql::Builder

Constants

ALL
DISTINCT
IS_TABLE_DEE

Public Class Methods

builder(meth) click to toggle source
# File lib/bmg/sql/builder.rb, line 12
def self.builder(meth)
  old = instance_method(meth)
  define_method(meth) do |*args, &bl|
    Grammar.sexpr(old.bind(self).call(*args, &bl))
  end
end
new(start = 0) click to toggle source
# File lib/bmg/sql/builder.rb, line 19
def initialize(start = 0)
  @next_qualifier = (start || 0)
end

Public Instance Methods

all() click to toggle source
# File lib/bmg/sql/builder.rb, line 28
def all
  ALL
end
column_name(name) click to toggle source
# File lib/bmg/sql/builder.rb, line 137
def column_name(name)
  [:column_name, name]
end
distinct() click to toggle source
# File lib/bmg/sql/builder.rb, line 23
def distinct
  DISTINCT
end
exists(subquery) click to toggle source
# File lib/bmg/sql/builder.rb, line 147
def exists(subquery)
  Predicate::Grammar.sexpr [ :exists, subquery ]
end
from_clause(table, qualifier) click to toggle source
# File lib/bmg/sql/builder.rb, line 89
def from_clause(table, qualifier)
  arg = case table
  when String, Symbol  then table_as(table, qualifier)
  when ::Sequel::SQL::QualifiedIdentifier then table_as(table, qualifier)
  when Expr            then subquery_as(table, qualifier)
  else                      native_table_as(table, qualifier)
  end
  [ :from_clause, arg ]
end
from_self(sexpr) click to toggle source
# File lib/bmg/sql/builder.rb, line 183
def from_self(sexpr)
  Processor::FromSelf.new(self).call(sexpr)
end
group_by_clause(attrlist, &desaliaser) click to toggle source
# File lib/bmg/sql/builder.rb, line 151
def group_by_clause(attrlist, &desaliaser)
  attrlist.map{|name|
    name = name.to_s
    (desaliaser && desaliaser[name]) || column_name(name)
  }.unshift(:group_by_clause)
end
is_table_dee() click to toggle source
# File lib/bmg/sql/builder.rb, line 59
def is_table_dee
  IS_TABLE_DEE
end
last_qualifier() click to toggle source
# File lib/bmg/sql/builder.rb, line 189
def last_qualifier
  "t#{@next_qualifier}"
end
limit_clause(limit) click to toggle source
# File lib/bmg/sql/builder.rb, line 168
def limit_clause(limit)
  [:limit_clause, limit]
end
literal(lit) click to toggle source
# File lib/bmg/sql/builder.rb, line 178
def literal(lit)
  [:literal, lit]
end
name_intro(name, sexpr) click to toggle source
# File lib/bmg/sql/builder.rb, line 33
def name_intro(name, sexpr)
  [:name_intro, table_name(name), sexpr]
end
native_table_as(table, qualifier) click to toggle source
# File lib/bmg/sql/builder.rb, line 119
def native_table_as(table, qualifier)
  [ :native_table_as,
    table,
    range_var_name(qualifier) ]
end
next_qualifier!() click to toggle source
# File lib/bmg/sql/builder.rb, line 193
def next_qualifier!
  "t#{@next_qualifier += 1}"
end
offset_clause(limit) click to toggle source
# File lib/bmg/sql/builder.rb, line 173
def offset_clause(limit)
  [:offset_clause, limit]
end
order_by_clause(ordering, &desaliaser) click to toggle source
# File lib/bmg/sql/builder.rb, line 159
def order_by_clause(ordering, &desaliaser)
  ordering.to_a.map{|(name,direction)|
    name = name.to_s
    name = (desaliaser && desaliaser[name]) || column_name(name)
    [:order_by_term, name, direction ? direction.to_s : "asc"]
  }.unshift(:order_by_clause)
end
qualified_name(qualifier, name) click to toggle source
# File lib/bmg/sql/builder.rb, line 125
def qualified_name(qualifier, name)
  [:qualified_name,
    range_var_name(qualifier),
    column_name(name) ]
end
range_var_name(qualifier) click to toggle source
# File lib/bmg/sql/builder.rb, line 132
def range_var_name(qualifier)
  [:range_var_name, qualifier]
end
select_all(heading, name, qualifier = next_qualifier!) click to toggle source
# File lib/bmg/sql/builder.rb, line 46
def select_all(heading, name, qualifier = next_qualifier!)
  [ :select_exp, all,
    select_list(heading, qualifier),
    from_clause(name, qualifier) ]
end
select_is_table_dee(subquery) click to toggle source
# File lib/bmg/sql/builder.rb, line 53
def select_is_table_dee(subquery)
  [ :select_exp, all, is_table_dee,
    [:where_clause, exists(subquery)] ]
end
select_item(qualifier, name, as = name) click to toggle source
# File lib/bmg/sql/builder.rb, line 77
def select_item(qualifier, name, as = name)
  [:select_item,
    qualified_name(qualifier, name.to_s),
    column_name(as.to_s)]
end
select_list(attrs, qualifier) click to toggle source
# File lib/bmg/sql/builder.rb, line 64
def select_list(attrs, qualifier)
  attrs = attrs.to_attr_list if attrs.respond_to?(:to_attr_list)
  attrs.map{|a| select_item(qualifier, a) }.unshift(:select_list)
end
select_literal_item(literal, as) click to toggle source
# File lib/bmg/sql/builder.rb, line 70
def select_literal_item(literal, as)
  [:select_item,
    literal(literal),
    column_name(as.to_s)]
end
select_star(qualifier = next_qualifier!) click to toggle source
# File lib/bmg/sql/builder.rb, line 84
def select_star(qualifier = next_qualifier!)
  [:select_star, [:range_var_name, qualifier]]
end
select_star_from(name, qualifier = next_qualifier!) click to toggle source
# File lib/bmg/sql/builder.rb, line 38
def select_star_from(name, qualifier = next_qualifier!)
  [ :select_exp,
    all,
    select_star(qualifier),
    from_clause(name, qualifier) ]
end
subquery_as(subquery, qualifier) click to toggle source
# File lib/bmg/sql/builder.rb, line 112
def subquery_as(subquery, qualifier)
  [:subquery_as,
    subquery,
    range_var_name(qualifier) ]
end
table_as(table, qualifier) click to toggle source
# File lib/bmg/sql/builder.rb, line 100
def table_as(table, qualifier)
  table = case table
  when String, Symbol then table_name(table)
  when ::Sequel::SQL::QualifiedIdentifier then table_name(table)
  else table
  end
  [:table_as,
    table,
    range_var_name(qualifier) ]
end
table_name(name) click to toggle source
# File lib/bmg/sql/builder.rb, line 142
def table_name(name)
  [:table_name, name]
end