edge badge
Namespace
Methods
A
E
T
Class Public methods
extract_value_from_default(default)

Extracts the value from a PostgreSQL column default definition.

# File activerecord/lib/active_record/connection_adapters/postgresql/column.rb, line 39
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 Public methods
accessor()
# File activerecord/lib/active_record/connection_adapters/postgresql/column.rb, line 116
def accessor
  @oid_type.accessor
end
type_cast(value)
# File activerecord/lib/active_record/connection_adapters/postgresql/column.rb, line 109
def type_cast(value)
  return if value.nil?
  return super if encoded?

  @oid_type.type_cast value
end
type_cast_for_write(value)
# File activerecord/lib/active_record/connection_adapters/postgresql/column.rb, line 101
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