module Sequel::KeysetPagination::Utils

Public Class Methods

cursor_conditions(columns, cursor, reverse: false) click to toggle source
# File lib/sequel/extensions/keyset_pagination.rb, line 17
def self.cursor_conditions(columns, cursor, reverse: false)
  zipped = columns.zip(cursor)
  desc = reverse ? :> : :<
  asc = reverse ? :< : :>

  # Reduce the dimensions
  segments = zipped.each_with_index.reverse_each.reduce([]) do |acc, ((column, cursor_value), idx)|
    # We always start of with the leaf
    segment = [Sequel[column.expression].send(column.descending ? desc : asc, cursor_value)]

    # Scope the leaf to its higher level dimensions
    zipped.slice(0, idx).each do |(col, cur)|
      segment << Sequel[col.expression].send(:=~, cur)
    end

    acc << Sequel.&(*segment)
  end
  Sequel.|(*segments)
end
qualify_order(expression) click to toggle source
# File lib/sequel/extensions/keyset_pagination.rb, line 8
def self.qualify_order(expression)
  case expression
  when Sequel::SQL::OrderedExpression
    expression
  else
    Sequel::SQL::OrderedExpression.new(expression, false)
  end
end