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
-
#default_value(default) ⇒ Object
Extracts the value from a PostgreSQL column default definition.
-
#extract_bounds(value) ⇒ Object
OID Type::Range helpers :.
- #infinity(options = {}) ⇒ Object
- #to_integer(value) ⇒ Object
-
#type_cast(value, type = false) ⇒ Object
Casts value (which is a String) to an appropriate instance.
Instance Method Details
#default_value(default) ⇒ Object
Extracts the value from a PostgreSQL column default definition.
NOTE: based on self.extract_value_from_default(default) code
42 43 44 45 46 47 48 49 50 51 52 53 54 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 |
# File 'lib/arjdbc/postgresql/column.rb', line 42 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 :
298 299 300 301 302 303 304 305 |
# File 'lib/arjdbc/postgresql/column.rb', line 298 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
307 308 309 |
# File 'lib/arjdbc/postgresql/column.rb', line 307 def infinity( = {}) ::Float::INFINITY * ([:negative] ? -1 : 1) end |
#to_integer(value) ⇒ Object
311 312 313 |
# File 'lib/arjdbc/postgresql/column.rb', line 311 def to_integer(value) (value.respond_to?(:infinite?) && value.infinite?) ? value : value.to_i end |
#type_cast(value, type = false) ⇒ Object
Casts value (which is a String) to an appropriate instance.
108 109 110 111 112 113 114 115 116 117 |
# File 'lib/arjdbc/postgresql/column.rb', line 108 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 |