Method: Sequel::Model::Associations::AssociationReflection#apply_window_function_eager_limit_strategy

Defined in:
lib/sequel/model/associations.rb

#apply_window_function_eager_limit_strategy(ds, limit_and_offset = limit_and_offset()) ⇒ Object

Use a window function to limit the results of the eager loading dataset.



144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
# File 'lib/sequel/model/associations.rb', line 144

def apply_window_function_eager_limit_strategy(ds, limit_and_offset=limit_and_offset())
  rn = ds.row_number_column 
  limit, offset = limit_and_offset
  ds = ds.unordered.select_append{|o| o.row_number.function.over(:partition=>predicate_key, :order=>ds.opts[:order]).as(rn)}.from_self
  ds = ds.order(rn) if ds.db.database_type == :mysql
  ds = if !returns_array?
    ds.where(rn => offset ? offset+1 : 1)
  elsif offset
    offset += 1
    if limit
      ds.where(rn => (offset...(offset+limit))) 
    else
      ds.where{SQL::Identifier.new(rn) >= offset} 
    end
  else
    ds.where{SQL::Identifier.new(rn) <= limit} 
  end
end