Module Sequel::Postgres::IntervalDatabaseMethods
In: lib/sequel/extensions/pg_interval.rb

Methods

Classes and Modules

Class Sequel::Postgres::IntervalDatabaseMethods::Parser

Constants

DURATION_UNITS = [:years, :months, :weeks, :days, :hours, :minutes, :seconds].freeze
PARSER = Parser.new   Single instance of Parser used for parsing, to save on memory (since the parser has no state).

Public Class methods

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

[Source]

     # File lib/sequel/extensions/pg_interval.rb, line 116
116:       def self.extended(db)
117:         db.instance_exec do
118:           extend_datasets(IntervalDatasetMethods)
119:           add_conversion_proc(1186, Postgres::IntervalDatabaseMethods::PARSER)
120:           if respond_to?(:register_array_type)
121:             register_array_type('interval', :oid=>1187, :scalar_oid=>1186)
122:           end
123:           @schema_type_classes[:interval] = ActiveSupport::Duration
124:         end
125:       end

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

[Source]

    # File lib/sequel/extensions/pg_interval.rb, line 44
44:       def self.literal_duration(duration)
45:         h = Hash.new(0)
46:         duration.parts.each{|unit, value| h[unit] += value}
47:         s = String.new
48: 
49:         DURATION_UNITS.each do |unit|
50:           if (v = h[unit]) != 0
51:             s << "#{v.is_a?(Integer) ? v : sprintf('%0.6f', v)} #{unit} "
52:           end
53:         end
54: 
55:         if s.empty?
56:           '0'
57:         else
58:           s
59:         end
60:       end

Public Instance methods

Handle ActiveSupport::Duration values in bound variables.

[Source]

     # File lib/sequel/extensions/pg_interval.rb, line 128
128:       def bound_variable_arg(arg, conn)
129:         case arg
130:         when ActiveSupport::Duration
131:           IntervalDatabaseMethods.literal_duration(arg)
132:         else
133:           super
134:         end
135:       end

[Validate]