Class: ActiveRecord::ConnectionAdapters::PostgreSQLColumn
- Extended by:
- ArrayParser, Cast
- Defined in:
- activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb,
activerecord/lib/active_record/connection_adapters/postgresql/cast.rb,
activerecord/lib/active_record/connection_adapters/postgresql/array_parser.rb
Overview
PostgreSQL-specific extensions to column definitions in a table.
Defined Under Namespace
Modules: ArrayParser, Cast
Constant Summary
Constants inherited from Column
Column::FALSE_VALUES, Column::TRUE_VALUES
Class Attribute Summary collapse
-
.money_precision ⇒ Object
Returns the value of attribute money_precision.
Instance Attribute Summary collapse
-
#array ⇒ Object
:nodoc:.
Attributes inherited from Column
#coder, #default, #limit, #name, #null, #precision, #primary, #scale, #sql_type, #type
Class Method Summary collapse
-
.extract_value_from_default(default) ⇒ Object
Extracts the value from a PostgreSQL column default definition.
Instance Method Summary collapse
-
#initialize(name, default, oid_type, sql_type = nil, null = true) ⇒ PostgreSQLColumn
constructor
Instantiates a new PostgreSQL column definition in a table.
- #type_cast(value) ⇒ Object
Methods included from Cast
array_to_string, cidr_to_string, hstore_to_string, json_to_string, point_to_string, range_to_string, string_to_array, string_to_bit, string_to_cidr, string_to_hstore, string_to_json, string_to_point, string_to_time
Methods inherited from Column
#binary?, binary_to_string, #extract_default, #has_default?, #human_name, #klass, #number?, #string_to_binary, string_to_binary, string_to_dummy_time, string_to_time, #text?, #type_cast_for_write, value_to_boolean, value_to_date, value_to_decimal, value_to_integer
Constructor Details
#initialize(name, default, oid_type, sql_type = nil, null = true) ⇒ PostgreSQLColumn
Instantiates a new PostgreSQL column definition in a table.
50 51 52 53 54 55 56 57 58 59 |
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 50 def initialize(name, default, oid_type, sql_type = nil, null = true) @oid_type = oid_type if sql_type =~ /\[\]$/ @array = true super(name, self.class.extract_value_from_default(default), sql_type[0..sql_type.length - 3], null) else @array = false super(name, self.class.extract_value_from_default(default), sql_type, null) end end |
Class Attribute Details
.money_precision ⇒ Object
Returns the value of attribute money_precision
65 66 67 |
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 65 def money_precision @money_precision end |
Instance Attribute Details
#array ⇒ Object
:nodoc:
48 49 50 |
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 48 def array @array end |
Class Method Details
.extract_value_from_default(default) ⇒ Object
Extracts the value from a PostgreSQL column default definition.
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 122 123 124 125 126 127 128 129 130 |
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 70 def self.extract_value_from_default(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.gsub(/''/, "'") # 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 # 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 |
Instance Method Details
#type_cast(value) ⇒ Object
132 133 134 135 136 137 |
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 132 def type_cast(value) return if value.nil? return super if encoded? @oid_type.type_cast value end |