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 |