class Arel::Visitors::Oracle12

Private Instance Methods

visit_Arel_Nodes_BindParam(o, collector) click to toggle source
# File lib/arel/visitors/oracle12.rb, line 54
def visit_Arel_Nodes_BindParam o, collector
  collector.add_bind(o) { |i| ":a#{i}" }
end
visit_Arel_Nodes_Except(o, collector) click to toggle source
# File lib/arel/visitors/oracle12.rb, line 36
def visit_Arel_Nodes_Except o, collector
  collector << "( "
  collector = infix_value o, collector, " MINUS "
  collector << " )"
end
visit_Arel_Nodes_Limit(o, collector) click to toggle source
# File lib/arel/visitors/oracle12.rb, line 24
def visit_Arel_Nodes_Limit o, collector
  collector << "FETCH FIRST "
  collector = visit o.expr, collector
  collector << " ROWS ONLY"
end
visit_Arel_Nodes_Offset(o, collector) click to toggle source
# File lib/arel/visitors/oracle12.rb, line 30
def visit_Arel_Nodes_Offset o, collector
  collector << "OFFSET "
  visit o.expr, collector
  collector << " ROWS"
end
visit_Arel_Nodes_SelectOptions(o, collector) click to toggle source
# File lib/arel/visitors/oracle12.rb, line 18
def visit_Arel_Nodes_SelectOptions o, collector
  collector = maybe_visit o.offset, collector
  collector = maybe_visit o.limit, collector
  collector = maybe_visit o.lock, collector
end
visit_Arel_Nodes_SelectStatement(o, collector) click to toggle source
# File lib/arel/visitors/oracle12.rb, line 6
def visit_Arel_Nodes_SelectStatement o, collector
  # Oracle does not allow LIMIT clause with select for update
  if o.limit && o.lock
    raise ArgumentError, <<-MSG
      'Combination of limit and lock is not supported.
      because generated SQL statements
      `SELECT FOR UPDATE and FETCH FIRST n ROWS` generates ORA-02014.`
    MSG
  end
  super
end
visit_Arel_Nodes_UpdateStatement(o, collector) click to toggle source
# File lib/arel/visitors/oracle12.rb, line 42
def visit_Arel_Nodes_UpdateStatement o, collector
  # Oracle does not allow ORDER BY/LIMIT in UPDATEs.
  if o.orders.any? && o.limit.nil?
    # However, there is no harm in silently eating the ORDER BY clause if no LIMIT has been provided,
    # otherwise let the user deal with the error
    o = o.dup
    o.orders = []
  end

  super
end