123456789_123456789_123456789_123456789_123456789_

Module: ActiveRecord::ConnectionAdapters::PostgreSQL::OID::WellKnown

Do not use. This module is for internal use only.

Constant Summary

Class Method Summary

Class Method Details

.build_mappings_for(version) (private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql/oid/well_known.rb', line 34

def build_mappings_for(version)
  type_aliases = type_aliases_for_version(version)
  {
    type_aliases: type_aliases,
    array_types: ARRAY_TYPES,
    array_type_delimiters: ARRAY_TYPE_DELIMITERS,
    range_types: RANGE_TYPES,
    domain_types: DOMAIN_TYPES,
    type_oids: type_aliases.invert.freeze
  }.freeze
end

.mappings_for(server_version:)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql/oid/well_known.rb', line 29

def mappings_for(server_version:)
  @mappings_cache.fetch_or_store(server_version) { build_mappings_for(server_version) }
end

.register_array_types(store, array_types, delimiters) (private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql/oid/well_known.rb', line 62

def register_array_types(store, array_types, delimiters)
  array_types.each do |oid, subtype_oid|
    next unless store.key?(subtype_oid)

    delimiter = delimiters.fetch(oid, ",")
    store.register_type(oid) do |_, *args|
      OID::Array.new(store.lookup(subtype_oid, *args), delimiter)
    end
  end
end

.register_domain_types(store, domain_types) (private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql/oid/well_known.rb', line 54

def register_domain_types(store, domain_types)
  domain_types.each do |oid, base_oid|
    next unless store.key?(base_oid)

    store.register_type(oid, store.lookup(base_oid))
  end
end

.register_range_types(store, range_types, type_aliases) (private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql/oid/well_known.rb', line 73

def register_range_types(store, range_types, type_aliases)
  range_types.each do |oid, subtype_oid|
    next unless store.key?(subtype_oid)

    range_name = type_aliases[oid]&.to_sym
    next unless range_name

    store.register_type(oid) do |_, *args|
      OID::Range.new(store.lookup(subtype_oid, *args), range_name)
    end
  end
end

.register_type_aliases(store, type_aliases) (private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql/oid/well_known.rb', line 46

def register_type_aliases(store, type_aliases)
  type_aliases.each do |oid, type_name|
    next unless store.key?(type_name)

    store.alias_type(oid, type_name)
  end
end

.register_types(store, server_version:)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql/oid/well_known.rb', line 13

def register_types(store, server_version:)
  mappings = mappings_for(server_version: server_version)
  register_type_aliases(store, mappings.fetch(:type_aliases))
  register_domain_types(store, mappings.fetch(:domain_types))
  register_array_types(
    store,
    mappings.fetch(:array_types),
    mappings.fetch(:array_type_delimiters)
  )
  register_range_types(store, mappings.fetch(:range_types), mappings.fetch(:type_aliases))
end

.type_aliases_for_version(version)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql/oid/well_known_values.rb', line 15

def self.type_aliases_for_version(version)
  mapping = {
    16 => "bool",
    17 => "bytea",
    18 => "char",
    19 => "name",
    20 => "int8",
    21 => "int2",
    22 => "int2vector",
    23 => "int4",
    24 => "regproc",
    25 => "text",
    26 => "oid",
    27 => "tid",
    28 => "xid",
    29 => "cid",
    30 => "oidvector",
    114 => "json",
    142 => "xml",
    600 => "point",
    601 => "lseg",
    602 => "path",
    603 => "box",
    604 => "polygon",
    628 => "line",
    650 => "cidr",
    700 => "float4",
    701 => "float8",
    718 => "circle",
    774 => "macaddr8",
    790 => "money",
    829 => "macaddr",
    869 => "inet",
    1033 => "aclitem",
    1042 => "bpchar",
    1043 => "varchar",
    1082 => "date",
    1083 => "time",
    1114 => "timestamp",
    1184 => "timestamptz",
    1186 => "interval",
    1266 => "timetz",
    1560 => "bit",
    1562 => "varbit",
    1700 => "numeric",
    1790 => "refcursor",
    2202 => "regprocedure",
    2203 => "regoper",
    2204 => "regoperator",
    2205 => "regclass",
    2206 => "regtype",
    2249 => "record",
    2950 => "uuid",
    2970 => "txid_snapshot",
    3614 => "tsvector",
    3615 => "tsquery",
    3642 => "gtsvector",
    3734 => "regconfig",
    3769 => "regdictionary",
    3802 => "jsonb",
    3904 => "int4range",
    3906 => "numrange",
    3908 => "tsrange",
    3910 => "tstzrange",
    3912 => "daterange",
    3926 => "int8range",
    4089 => "regnamespace",
    4096 => "regrole",
  }

  if version >= 12_00_00
    mapping[4072] = "jsonpath"
  end

  if version >= 13_00_00
    mapping[4191] = "regcollation"
    mapping[5069] = "xid8"
  end

  if version >= 14_00_00
    mapping[4451] = "int4multirange"
    mapping[4532] = "nummultirange"
    mapping[4533] = "tsmultirange"
    mapping[4534] = "tstzmultirange"
    mapping[4535] = "datemultirange"
    mapping[4536] = "int8multirange"
  end

  mapping.freeze
end

.type_oids_for(server_version:)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/postgresql/oid/well_known.rb', line 25

def type_oids_for(server_version:)
  mappings_for(server_version: server_version).fetch(:type_oids)
end