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
48 |
# File 'lib/arjdbc/postgresql/column.rb', line 48 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
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 119 120 121 |
# File 'lib/arjdbc/postgresql/column.rb', line 59 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 :
321 322 323 324 325 326 327 328 |
# File 'lib/arjdbc/postgresql/column.rb', line 321 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
330 331 332 |
# File 'lib/arjdbc/postgresql/column.rb', line 330 def infinity( = {}) ::Float::INFINITY * ([:negative] ? -1 : 1) end |
#number? ⇒ Boolean
52 |
# File 'lib/arjdbc/postgresql/column.rb', line 52 def number?; !array && super end |
#text? ⇒ Boolean
53 |
# File 'lib/arjdbc/postgresql/column.rb', line 53 def text?; !array && super end |
#type_cast(value, type = false) ⇒ Object
Casts value (which is a String) to an appropriate instance.
125 126 127 128 129 130 131 132 133 134 |
# File 'lib/arjdbc/postgresql/column.rb', line 125 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 |