Module: Sequel::Postgres::IntervalDatabaseMethods
- Defined in:
- lib/sequel/extensions/pg_interval.rb
Defined Under Namespace
Classes: Parser
Constant Summary collapse
- EMPTY_INTERVAL =
'0'.freeze
- DURATION_UNITS =
[:years, :months, :days, :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.
124 125 126 127 128 129 130 |
# File 'lib/sequel/extensions/pg_interval.rb', line 124 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) ⇒ Object
Return an unquoted string version of the duration object suitable for use as a bound variable.
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/sequel/extensions/pg_interval.rb', line 49 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 |
Instance Method Details
#bound_variable_arg(arg, conn) ⇒ Object
Handle ActiveSupport::Duration values in bound variables.
133 134 135 136 137 138 139 140 |
# File 'lib/sequel/extensions/pg_interval.rb', line 133 def bound_variable_arg(arg, conn) case arg when ActiveSupport::Duration IntervalDatabaseMethods.literal_duration(arg) else super end end |