class Sequel::JDBC::AS400::Dataset

Dataset class for AS400 datasets accessed via JDBC.

Constants

FETCH_FIRST
FETCH_FIRST_ROW_ONLY
ROWS_ONLY
WILDCARD

Public Instance Methods

select_limit_sql(sql) click to toggle source

Modify the sql to limit the number of rows returned

# File lib/sequel/adapters/jdbc/as400.rb, line 65
def select_limit_sql(sql)
  if l = @opts[:limit]
    if l == 1
      sql << FETCH_FIRST_ROW_ONLY
    elsif l > 1
      sql << FETCH_FIRST
      literal_append(sql, l)
      sql << ROWS_ONLY
    end
  end
end
select_sql() click to toggle source

AS400 needs to use a couple of subselects for queries with offsets.

# File lib/sequel/adapters/jdbc/as400.rb, line 47
def select_sql
  return super unless o = @opts[:offset]
  l = @opts[:limit]
  order = @opts[:order]
  dsa1 = dataset_alias(1)
  dsa2 = dataset_alias(2)
  rn = row_number_column
  irn = Sequel::SQL::Identifier.new(rn).qualify(dsa2)
  subselect_sql(unlimited.
      from_self(:alias=>dsa1).
      select_more(Sequel::SQL::QualifiedIdentifier.new(dsa1, WILDCARD),
      Sequel::SQL::WindowFunction.new(SQL::Function.new(:ROW_NUMBER), Sequel::SQL::Window.new(:order=>order)).as(rn)).
      from_self(:alias=>dsa2).
      select(Sequel::SQL::QualifiedIdentifier.new(dsa2, WILDCARD)).
      where(l ? ((irn > o) & (irn <= l + o)) : (irn > o))) # Leave off limit in case of limit(nil, offset)
end
supports_window_functions?() click to toggle source
# File lib/sequel/adapters/jdbc/as400.rb, line 77
def supports_window_functions?
  true
end