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