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



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

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



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
118
# File 'lib/arjdbc/postgresql/column.rb', line 56

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 :



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

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



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

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

#number?Boolean

Returns:

  • (Boolean)


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

def number?; !array && super end

#text?Boolean

Returns:

  • (Boolean)


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

def text?; !array && super end

#type_cast(value, type = false) ⇒ Object

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



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

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