Method: Sequel::Sequel4DatasetMethods#range

Defined in:
lib/sequel/extensions/sequel_4_dataset_methods.rb

#range(column = (no_arg = true), &block) ⇒ Object

Returns a Range instance made from the minimum and maximum values for the given column/expression. Uses a virtual row block if no argument is given.

DB[:table].range(:id) # SELECT max(id) AS v1, min(id) AS v2 FROM table LIMIT 1
# => 1..10
DB[:table].interval{function(column)} # SELECT max(function(column)) AS v1, min(function(column)) AS v2 FROM table LIMIT 1
# => 0..7


64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/sequel/extensions/sequel_4_dataset_methods.rb', line 64

def range(column=(no_arg = true), &block)
  column = Sequel.virtual_row(&block) if no_arg
  r = if loader = cached_placeholder_literalizer(:_range_loader) do |pl|
        arg = pl.arg
        aggregate_dataset.limit(1).select(SQL::Function.new(:min, arg).as(:v1), SQL::Function.new(:max, arg).as(:v2))
      end

    loader.first(column)
  else
    aggregate_dataset.select{[min(column).as(v1), max(column).as(v2)]}.first
  end

  if r
    (r[:v1]..r[:v2])
  end
end