Module: Sequel::Postgres::IntervalDatabaseMethods
- Defined in:
- lib/sequel/extensions/pg_interval.rb
Defined Under Namespace
Classes: Parser
Constant Summary collapse
- DURATION_UNITS =
- [:years, :months, :weeks, :days, :hours, :minutes, :seconds].freeze 
- PARSER =
          Single instance of Parser used for parsing, to save on memory (since the parser has no state). 
- Parser.new 
Class Method Summary collapse
- 
  
    
      .extended(db)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Reset the conversion procs if using the native postgres adapter, and extend the datasets to correctly literalize ActiveSupport::Duration values. 
- 
  
    
      .literal_duration(duration)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Return an unquoted string version of the duration object suitable for use as a bound variable. 
Instance Method Summary collapse
- 
  
    
      #bound_variable_arg(arg, conn)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Handle ActiveSupport::Duration values in bound variables. 
Class Method Details
.extended(db) ⇒ Object
Reset the conversion procs if using the native postgres adapter, and extend the datasets to correctly literalize ActiveSupport::Duration values.
| 143 144 145 146 147 148 149 150 151 152 | # File 'lib/sequel/extensions/pg_interval.rb', line 143 def self.extended(db) db.instance_exec do extend_datasets(IntervalDatasetMethods) add_conversion_proc(1186, Postgres::IntervalDatabaseMethods::PARSER) if respond_to?(:register_array_type) register_array_type('interval', :oid=>1187, :scalar_oid=>1186) end @schema_type_classes[:interval] = ActiveSupport::Duration end end | 
.literal_duration(duration) ⇒ Object
Return an unquoted string version of the duration object suitable for use as a bound variable.
| 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | # File 'lib/sequel/extensions/pg_interval.rb', line 52 def self.literal_duration(duration) h = Hash.new(0) duration.parts.each{|unit, value| h[unit] += value} s = String.new 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? '0' else s end end | 
Instance Method Details
#bound_variable_arg(arg, conn) ⇒ Object
Handle ActiveSupport::Duration values in bound variables.
| 155 156 157 158 159 160 161 162 | # File 'lib/sequel/extensions/pg_interval.rb', line 155 def bound_variable_arg(arg, conn) case arg when ActiveSupport::Duration IntervalDatabaseMethods.literal_duration(arg) else super end end |