class Arel::Visitors::Firebird

Public Instance Methods

visit_Arel_Nodes_Limit(o, a) click to toggle source
# File lib/arel/visitors/firebird.rb, line 36
def visit_Arel_Nodes_Limit(o, a)
  a << "FIRST #{limit_for(o)}"
end
visit_Arel_Nodes_Offset(o, a) click to toggle source
# File lib/arel/visitors/firebird.rb, line 40
def visit_Arel_Nodes_Offset(o, a)
  a << 'SKIP '; visit(o.value, a)
end
visit_Arel_Nodes_SelectStatement(o, a) click to toggle source
# File lib/arel/visitors/firebird.rb, line 8
def visit_Arel_Nodes_SelectStatement(o, a)
  a = o.cores.inject(a) { |c, x| visit_Arel_Nodes_SelectCore(x, c) }

  limit, offset = o.limit, o.offset
  if limit || offset
    select = a.parts[0]

    sql = Arel::Collectors::SQLString.new
    visit(limit, sql) if limit
    if offset
      sql << ' ' if limit
      visit(offset, sql)
    end

    a.parts[0] = "#{select} #{sql.value}"
  end

  unless o.orders.empty?
    a << ' ORDER BY '
    last = o.orders.length - 1
    o.orders.each_with_index do |x, i|
      visit(x, a);  a << ', ' unless last == i
    end
  end

  a
end