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 included from ArrayParser
ArrayParser::BACKSLASH, ArrayParser::BRACKET_CLOSE, ArrayParser::BRACKET_OPEN, ArrayParser::COMMA, ArrayParser::DOUBLE_QUOTE
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, #default_function, #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
- #accessor ⇒ Object
-
#initialize(name, default, oid_type, sql_type = nil, null = true) ⇒ PostgreSQLColumn
constructor
A new instance of PostgreSQLColumn.
- #number? ⇒ Boolean
- #text? ⇒ Boolean
- #type_cast(value) ⇒ Object
- #type_cast_for_write(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, string_to_dummy_time, string_to_time, 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
Returns a new instance of PostgreSQLColumn.
50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# 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 default_value = self.class.extract_value_from_default(default) if sql_type =~ /\[\]$/ @array = true super(name, default_value, sql_type[0..sql_type.length - 3], null) else @array = false super(name, default_value, sql_type, null) end @default_function = default if has_default_function?(default_value, default) end |
Class Attribute Details
.money_precision ⇒ Object
Returns the value of attribute money_precision
77 78 79 |
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 77 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.
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 131 132 133 134 135 136 137 138 139 140 141 142 |
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 82 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
#accessor ⇒ Object
159 160 161 |
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 159 def accessor @oid_type.accessor end |
#number? ⇒ Boolean
65 66 67 |
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 65 def number? !array && super end |
#text? ⇒ Boolean
69 70 71 |
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 69 def text? !array && super end |
#type_cast(value) ⇒ Object
152 153 154 155 156 157 |
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 152 def type_cast(value) return if value.nil? return super if encoded? @oid_type.type_cast value end |
#type_cast_for_write(value) ⇒ Object
144 145 146 147 148 149 150 |
# File 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb', line 144 def type_cast_for_write(value) if @oid_type.respond_to?(:type_cast_for_write) @oid_type.type_cast_for_write(value) else super end end |