class Arel::Visitors::Fb

Private Instance Methods

limit_offset(o) click to toggle source

Firebird helpers

# File lib/arel/visitors/fb.rb, line 36
def limit_offset(o)
  "ROWS #{visit(o.offset.expr) + 1} TO #{visit(o.offset.expr) + visit(o.limit.expr)}"
end
limit_with_rows(o, collector) click to toggle source

Firebird helper

# File lib/arel/visitors/fb_collector.rb, line 86
def limit_with_rows o, collector
  collector << " ROWS "
  visit o.offset.expr + 1, collector
  collector << " TO "
  visit o.offset.expr + o.limit.expr, collector
end
visit_Arel_Nodes_Limit(o, *a) click to toggle source
# File lib/arel/visitors/fb.rb, line 26
def visit_Arel_Nodes_Limit o, *a
  "ROWS #{visit(o.expr)}"
end
visit_Arel_Nodes_Offset(o, *a) click to toggle source
# File lib/arel/visitors/fb.rb, line 30
def visit_Arel_Nodes_Offset o, *a
  "SKIP #{visit(o.expr)}"
end
visit_Arel_Nodes_SelectCore(o, collector) click to toggle source
# File lib/arel/visitors/fb_collector.rb, line 33
def visit_Arel_Nodes_SelectCore o, collector
  if o.set_quantifier
    collector = visit o.set_quantifier, collector
    collector << SPACE
  end

  unless o.projections.empty?
    len = o.projections.length - 1
    o.projections.each_with_index do |x, i|
      collector = visit(x, collector)
      collector << COMMA unless len == i
    end
  end

  if o.source && !o.source.empty?
    collector << " FROM "
    collector = visit o.source, collector
  end

  unless o.wheres.empty?
    collector << WHERE
    len = o.wheres.length - 1
    o.wheres.each_with_index do |x, i|
      collector = visit(x, collector)
      collector << AND unless len == i
    end
  end

  unless o.groups.empty?
    collector << GROUP_BY
    len = o.groups.length - 1
    o.groups.each_with_index do |x, i|
      collector = visit(x, collector)
      collector << COMMA unless len == i
    end
  end

  collector = maybe_visit o.having, collector
  collector
end
visit_Arel_Nodes_SelectStatement(o, *a) click to toggle source
# File lib/arel/visitors/fb.rb, line 6
def visit_Arel_Nodes_SelectStatement o, *a
  select_core = o.cores.map { |x| visit_Arel_Nodes_SelectCore(x, *a) }.join
  select_core.sub!(/^\s*SELECT/i, "SELECT #{visit(o.offset)}") if o.offset && !o.limit
  [
    select_core,
    ("ORDER BY #{o.orders.map { |x| visit(x) }.join(', ')}" unless o.orders.empty?),
    (limit_offset(o) if o.limit && o.offset),
    (visit(o.limit) if o.limit && !o.offset),
  ].compact.join ' '
end
visit_Arel_Nodes_UpdateStatement(o, *a) click to toggle source
# File lib/arel/visitors/fb.rb, line 17
def visit_Arel_Nodes_UpdateStatement o, *a
  [
    "UPDATE #{visit o.relation}",
    ("SET #{o.values.map { |value| visit(value) }.join ', '}" unless o.values.empty?),
    ("WHERE #{o.wheres.map { |x| visit(x) }.join ' AND '}" unless o.wheres.empty?),
    (visit(o.limit) if o.limit),
  ].compact.join ' '
end