class SQL

Constants

H_EMPTY

Public Class Methods

new(escape_proc: nil, **ctx) click to toggle source
# File lib/eno/sql.rb, line 15
def initialize(escape_proc: nil, **ctx)
  @escape_proc = escape_proc
  @ctx = ctx
end

Public Instance Methods

_i(value) click to toggle source
# File lib/eno/sql.rb, line 64
def _i(value)
  Expressions::Identifier.new(value)
end
_l(value) click to toggle source
# File lib/eno/sql.rb, line 60
def _l(value)
  Expressions::Literal.new(value)
end
all(sym = nil) click to toggle source
# File lib/eno/sql.rb, line 124
def all(sym = nil)
  if sym
    Expressions::Identifier.new(S_QUALIFIED_ALL % sym)
  else
    Expressions::Identifier.new(S_ALL)
  end
end
cond(props) click to toggle source
# File lib/eno/sql.rb, line 132
def cond(props)
  Expressions::Case.new(props)
end
context() click to toggle source
# File lib/eno/sql.rb, line 56
def context
  @ctx
end
default() click to toggle source
# File lib/eno/sql.rb, line 136
def default
  :default
end
default_select() click to toggle source
# File lib/eno/sql.rb, line 68
def default_select
  Expressions::Select.new(:*)
end
except(*queries, **props) click to toggle source
# File lib/eno/sql.rb, line 148
def except(*queries, **props)
  @combination = Expressions::Combination.new(*queries, kind: :except, **props)
end
from(*members, **props) click to toggle source
# File lib/eno/sql.rb, line 100
def from(*members, **props)
  @from = Expressions::From.new(*members, **props)
end
intersect(*queries, **props) click to toggle source
# File lib/eno/sql.rb, line 144
def intersect(*queries, **props)
  @combination = Expressions::Combination.new(*queries, kind: :intersect, **props)
end
limit(*members) click to toggle source
# File lib/eno/sql.rb, line 120
def limit(*members)
  @limit = Expressions::Limit.new(*members)
end
method_missing(sym, *args) click to toggle source
Calls superclass method
# File lib/eno/sql.rb, line 72
def method_missing(sym, *args)
  if @ctx.has_key?(sym)
    value = @ctx[sym]
    return Symbol === value ? Expressions::Identifier.new(value) : value
  end
  
  super if sym == :to_hash
  if args.empty?
    Expressions::Identifier.new(sym)
  else
    Expressions::FunctionCall.new(sym, *args)
  end
end
order_by(*members, **props) click to toggle source
# File lib/eno/sql.rb, line 116
def order_by(*members, **props)
  @order_by = Expressions::OrderBy.new(*members, **props)
end
quote(expr) click to toggle source
# File lib/eno/sql.rb, line 36
def quote(expr)
  if @escape_proc
    value = @escape_proc.(expr)
    return value if value
  end

  case expr
  when Query::Query
    S_PARENS % expr.to_sql(@ctx).strip
  when Expressions::Expression
    expr.to_sql(self)
  when Symbol
    expr.to_s
  when String
    S_QUOTES % expr
  else
    expr.inspect
  end
end
select(*members, **props) click to toggle source
# File lib/eno/sql.rb, line 92
def select(*members, **props)
  if members.empty? && !props.empty?
    members = props.map { |k, v| Expressions::Alias.new(v, k) }
    props = {}
  end
  @select = Expressions::Select.new(*members, **props)
end
to_sql(&block) click to toggle source
# File lib/eno/sql.rb, line 20
def to_sql(&block)
  instance_eval(&block)

  return @combination.to_sql(self) if @combination

  [
    @with,
    @select || default_select,
    @from,
    @where,
    @window,
    @order_by,
    @limit
  ].compact.map { |c| c.to_sql(self) }.join(S_SPACE)
end
union(*queries, **props) click to toggle source
# File lib/eno/sql.rb, line 140
def union(*queries, **props)
  @combination = Expressions::Combination.new(*queries, kind: :union, **props)
end
where(expr) click to toggle source
# File lib/eno/sql.rb, line 104
def where(expr)
  if @where
    @where.members << expr
  else
    @where = Expressions::Where.new(expr)
  end
end
window(sym, &block) click to toggle source
# File lib/eno/sql.rb, line 112
def window(sym, &block)
  @window = Expressions::Window.new(sym, &block)
end
with(*members, **props) click to toggle source
# File lib/eno/sql.rb, line 86
def with(*members, **props)
  @with = Expressions::With.new(*members, **props)
end