module Sequel::Postgres::IntervalDatabaseMethods

  1. lib/sequel/extensions/pg_interval.rb
Parent: Postgres

Methods

Public Class

  1. extended
  2. literal_duration

Public Instance

  1. bound_variable_arg

Constants

DURATION_UNITS = [:years, :months, :days, :minutes, :seconds].freeze  
EMPTY_INTERVAL = '0'.freeze  
PARSER = Parser.new  

Single instance of Parser used for parsing, to save on memory (since the parser has no state).

Public Class methods

extended (db)

Reset the conversion procs if using the native postgres adapter, and extend the datasets to correctly literalize ActiveSupport::Duration values.

[show source]
# File lib/sequel/extensions/pg_interval.rb, line 121
def self.extended(db)
  db.instance_eval do
    extend_datasets(IntervalDatasetMethods)
    copy_conversion_procs([1186, 1187])
    @schema_type_classes[:interval] = ActiveSupport::Duration
  end
end
literal_duration (duration)

Return an unquoted string version of the duration object suitable for use as a bound variable.

[show source]
# File lib/sequel/extensions/pg_interval.rb, line 46
def self.literal_duration(duration)
  h = Hash.new(0)
  duration.parts.each{|unit, value| h[unit] += value}
  s = ''

  DURATION_UNITS.each do |unit|
    if (v = h[unit]) != 0
      s << "#{v.is_a?(Integer) ? v : sprintf('%0.6f', v)} #{unit} "
    end
  end

  if s.empty?
    EMPTY_INTERVAL
  else
    s
  end
end

Public Instance methods

bound_variable_arg (arg, conn)

Handle ActiveSupport::Duration values in bound variables.

[show source]
# File lib/sequel/extensions/pg_interval.rb, line 130
def bound_variable_arg(arg, conn)
  case arg
  when ActiveSupport::Duration
    IntervalDatabaseMethods.literal_duration(arg)
  else
    super
  end
end