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
- #accessor ⇒ Object
-
#default_value(default) ⇒ Object
Extracts the value from a PostgreSQL column default definition.
-
#extract_bounds(value) ⇒ Object
OID Type::Range helpers :.
- #infinity(options = {}) ⇒ Object
- #number? ⇒ Boolean
- #text? ⇒ Boolean
-
#type_cast(value, type = false) ⇒ Object
Casts value (which is a String) to an appropriate instance.
Instance Method Details
#accessor ⇒ Object
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( = {}) ::Float::INFINITY * ([:negative] ? -1 : 1) end |
#number? ⇒ Boolean
48 |
# File 'lib/arjdbc/postgresql/column.rb', line 48 def number?; !array && super end |
#text? ⇒ 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 |