Module: ArJdbc::PostgreSQL::Column

Included in:
ActiveRecord::ConnectionAdapters::PostgreSQLColumn
Defined in:
lib/arjdbc/postgresql/column.rb

Overview

Column behavior based on PostgreSQL adapter in Rails.

Defined Under Namespace

Modules: Cast

Instance Method Summary collapse

Instance Method Details

#accessorObject



44
# File 'lib/arjdbc/postgresql/column.rb', line 44

def accessor; oid_type.accessor end

#default_value(default) ⇒ Object

Extracts the value from a PostgreSQL column default definition.

NOTE: based on self.extract_value_from_default(default) code



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/arjdbc/postgresql/column.rb', line 55

def default_value(default)
  # This is a performance optimization for Ruby 1.9.2 in development.
  # If the value is nil, we return nil straight away without checking
  # the regular expressions. If we check each regular expression,
  # Regexp#=== will call NilClass#to_str, which will trigger
  # method_missing (defined by whiny nil in ActiveSupport) which
  # makes this method very very slow.
  return default unless default

  case default
    when /\A'(.*)'::(num|date|tstz|ts|int4|int8)range\z/m
      $1
    # Numeric types
    when /\A\(?(-?\d+(\.\d*)?\)?(::bigint)?)\z/
      $1
    # Character types
    when /\A\(?'(.*)'::.*\b(?:character varying|bpchar|text)\z/m
      $1
    # Binary data types
    when /\A'(.*)'::bytea\z/m
      $1
    # Date/time types
    when /\A'(.+)'::(?:time(?:stamp)? with(?:out)? time zone|date)\z/
      $1
    when /\A'(.*)'::interval\z/
      $1
    # Boolean type
    when 'true'
      true
    when 'false'
      false
    # Geometric types
    when /\A'(.*)'::(?:point|line|lseg|box|"?path"?|polygon|circle)\z/
      $1
    # Network address types
    when /\A'(.*)'::(?:cidr|inet|macaddr)\z/
      $1
    # Bit string types
    when /\AB'(.*)'::"?bit(?: varying)?"?\z/
      $1
    # XML type
    when /\A'(.*)'::xml\z/m
      $1
    # Arrays
    when /\A'(.*)'::"?\D+"?\[\]\z/
      $1
    when /\AARRAY\[(.*)\](::\D+)?\z/
      "{#{$1.gsub(/'(.*?)'::[a-z]+(,)?\s?/, '\1\2')}}"
    # Hstore
    when /\A'(.*)'::hstore\z/
      $1
    # JSON
    when /\A'(.*)'::json\z/
      $1
    # Object identifier types
    when /\A-?\d+\z/
      $1
    else
      # Anything else is blank, some user type, or some function
      # and we can't know the value of that, so return nil.
      nil
  end
end

#extract_bounds(value) ⇒ Object

OID Type::Range helpers :



317
318
319
320
321
322
323
324
# File 'lib/arjdbc/postgresql/column.rb', line 317

def extract_bounds(value)
  f, t = value[1..-2].split(',')
  {
    :from => (value[1] == ',' || f == '-infinity') ? infinity(:negative => true) : f,
    :to   => (value[-2] == ',' || t == 'infinity') ? infinity : t,
    :exclude_start => (value[0] == '('), :exclude_end => (value[-1] == ')')
  }
end

#infinity(options = {}) ⇒ Object



326
327
328
# File 'lib/arjdbc/postgresql/column.rb', line 326

def infinity(options = {})
  ::Float::INFINITY * (options[:negative] ? -1 : 1)
end

#number?Boolean

Returns:

  • (Boolean)


48
# File 'lib/arjdbc/postgresql/column.rb', line 48

def number?; !array && super end

#text?Boolean

Returns:

  • (Boolean)


49
# File 'lib/arjdbc/postgresql/column.rb', line 49

def text?; !array && super end

#type_cast(value, type = false) ⇒ Object

Casts value (which is a String) to an appropriate instance.



121
122
123
124
125
126
127
128
129
130
# File 'lib/arjdbc/postgresql/column.rb', line 121

def type_cast(value) # AR < 4.0 version
  return if value.nil?
  return super if respond_to?(:encoded?) && encoded? # since AR-3.2

  case sql_type
  when 'money'
    self.class.string_to_money(value)
  else super
  end
end