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
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
# File lib/sequel/adapters/jdbc/as400.rb, line 77 def supports_window_functions? true end