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