Included Modules

Class/Module Index [+]

Quicksearch

Arel::SelectManager

Public Instance Methods

constraints() click to toggle source
# File lib/arel/select_manager.rb, line 16
def constraints
  @ctx.wheres
end
except(other) click to toggle source
# File lib/arel/select_manager.rb, line 154
def except other
  Nodes::Except.new ast, other.ast
end
Also aliased as: minus
exists() click to toggle source

Produces an Arel::Nodes::Exists node

# File lib/arel/select_manager.rb, line 27
def exists
  Arel::Nodes::Exists.new @ast
end
from(table) click to toggle source
# File lib/arel/select_manager.rb, line 70
def from table
  table = Nodes::SqlLiteral.new(table) if String === table
  # FIXME: this is a hack to support
  # test_with_two_tables_in_from_without_getting_double_quoted
  # from the AR tests.
  if @ctx.froms
    source = @ctx.froms

    if Nodes::SqlLiteral === table && Nodes::Join === source
      source.left = table
      table = source
    end
  end

  @ctx.froms = table
  self
end
group(*columns) click to toggle source
# File lib/arel/select_manager.rb, line 59
def group *columns
  columns.each do |column|
    # FIXME: backwards compat
    column = Nodes::SqlLiteral.new(column) if String === column
    column = Nodes::SqlLiteral.new(column.to_s) if Symbol === column

    @ctx.groups.push Nodes::Group.new column
  end
  self
end
having(expr) click to toggle source
# File lib/arel/select_manager.rb, line 100
def having expr
  expr = Nodes::SqlLiteral.new(expr) if String === expr

  @ctx.having = Nodes::Having.new(expr)
  self
end
insert(values) click to toggle source

FIXME: this method should go away

# File lib/arel/select_manager.rb, line 205
def insert values
  im = InsertManager.new @engine
  table = @ctx.froms
  primary_key_name = (primary_key = table.primary_key) && primary_key.name
  # FIXME: in AR tests values sometimes were Array and not Hash therefore is_a?(Hash) check is added
  primary_key_value = primary_key && values.is_a?(Hash) && values[primary_key]
  im.into table
  im.insert values
  # Oracle adapter needs primary key name to generate RETURNING ... INTO ... clause
  # for tables which assign primary key value using trigger.
  # RETURNING ... INTO ... clause will be added only if primary_key_value is nil
  # therefore it is necessary to pass primary key value as well
  @engine.connection.insert im.to_sql, 'AREL', primary_key_name, primary_key_value
end
intersect(other) click to toggle source
# File lib/arel/select_manager.rb, line 150
def intersect other
  Nodes::Intersect.new ast, other.ast
end
join(relation, klass = Nodes::InnerJoin) click to toggle source
# File lib/arel/select_manager.rb, line 88
def join relation, klass = Nodes::InnerJoin
  return self unless relation

  case relation
  when String, Nodes::SqlLiteral
    raise if relation.blank?
    from Nodes::StringJoin.new(@ctx.froms, relation)
  else
    from klass.new(@ctx.froms, relation, nil)
  end
end
join_sql() click to toggle source
# File lib/arel/select_manager.rb, line 165
def join_sql
  return nil unless @ctx.froms

  viz = Visitors::JoinSql.new @engine
  Nodes::SqlLiteral.new viz.accept @ctx
end
joins(manager) click to toggle source
# File lib/arel/select_manager.rb, line 178
def joins manager
  if $VERBOSE
    warn "joins is deprecated and will be removed in 2.2"
    warn "please remove your call to joins from #{caller.first}"
  end
  manager.join_sql
end
lock(locking = Arel.sql('FOR UPDATE')) click to toggle source
# File lib/arel/select_manager.rb, line 37
def lock locking = Arel.sql('FOR UPDATE')
  case locking
  when true
    locking = Arel.sql('FOR UPDATE')
  when Arel::Nodes::SqlLiteral
  when String
    locking = Arel.sql locking
  end

  @ast.lock = Nodes::Lock.new(locking)
  self
end
locked() click to toggle source
# File lib/arel/select_manager.rb, line 50
def locked
  @ast.lock
end
minus(other) click to toggle source
Alias for: except
on(*exprs) click to toggle source
# File lib/arel/select_manager.rb, line 54
def on *exprs
  @ctx.froms.constraint = Nodes::On.new(collapse(exprs))
  self
end
order(*expr) click to toggle source
# File lib/arel/select_manager.rb, line 116
def order *expr
  # FIXME: We SHOULD NOT be converting these to SqlLiteral automatically
  @ast.orders.concat expr.map { |x|
    String === x || Symbol === x ? Nodes::SqlLiteral.new(x.to_s) : x
  }
  self
end
order_clauses() click to toggle source
# File lib/arel/select_manager.rb, line 172
def order_clauses
  Visitors::OrderClauses.new(@engine).accept(@ast).map { |x|
    Nodes::SqlLiteral.new x
  }
end
orders() click to toggle source
# File lib/arel/select_manager.rb, line 124
def orders
  @ast.orders
end
project(*projections) click to toggle source
# File lib/arel/select_manager.rb, line 107
def project *projections
  # FIXME: converting these to SQLLiterals is probably not good, but
  # rails tests require it.
  @ctx.projections.concat projections.map { |x|
    [Symbol, String].include?(x.class) ? SqlLiteral.new(x.to_s) : x
  }
  self
end
skip(amount) click to toggle source
# File lib/arel/select_manager.rb, line 20
def skip amount
  @ast.offset = Nodes::Offset.new(amount)
  self
end
take(limit) click to toggle source
# File lib/arel/select_manager.rb, line 159
def take limit
  @ast.limit = Nodes::Limit.new(limit)
  @ctx.top   = Nodes::Top.new(limit)
  self
end
taken() click to toggle source
# File lib/arel/select_manager.rb, line 12
def taken
  @ast.limit && @ast.limit.expr
end
union(operation, other = nil) click to toggle source
# File lib/arel/select_manager.rb, line 139
def union operation, other = nil
  if other
    node_class = Nodes.const_get("Union#{operation.to_s.capitalize}")
  else
    other = operation
    node_class = Nodes::Union
  end

  node_class.new self.ast, other.ast
end
where_clauses() click to toggle source
# File lib/arel/select_manager.rb, line 31
def where_clauses
  #warn "where_clauses is deprecated" if $VERBOSE
  to_sql = Visitors::ToSql.new @engine
  @ctx.wheres.map { |c| to_sql.accept c }
end
where_sql() click to toggle source
# File lib/arel/select_manager.rb, line 132
def where_sql
  return if @ctx.wheres.empty?

  viz = Visitors::WhereSql.new @engine
  Nodes::SqlLiteral.new viz.accept @ctx
end
wheres() click to toggle source
# File lib/arel/select_manager.rb, line 128
def wheres
  Compatibility::Wheres.new @engine, @ctx.wheres
end

Public Class Methods

new(engine, table = nil) click to toggle source
# File lib/arel/select_manager.rb, line 5
def initialize engine, table = nil
  super(engine)
  @ast   = Nodes::SelectStatement.new
  @ctx    = @ast.cores.last
  from table
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.