instance method
add_pg_decoders
Ruby on Rails 8.1.2
Since v5.2.8.1 PrivateSignature
add_pg_decoders()
No documentation comment.
Source
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 1135
def add_pg_decoders
@mapped_default_timezone = nil
@timestamp_decoder = nil
coders_by_name = {
"int2" => PG::TextDecoder::Integer,
"int4" => PG::TextDecoder::Integer,
"int8" => PG::TextDecoder::Integer,
"oid" => PG::TextDecoder::Integer,
"float4" => PG::TextDecoder::Float,
"float8" => PG::TextDecoder::Float,
"numeric" => PG::TextDecoder::Numeric,
"bool" => PG::TextDecoder::Boolean,
"timestamp" => PG::TextDecoder::TimestampUtc,
"timestamptz" => PG::TextDecoder::TimestampWithTimeZone,
}
coders_by_name["date"] = PG::TextDecoder::Date if decode_dates
known_coder_types = coders_by_name.keys.map { |n| quote(n) }
query = <<~SQL % known_coder_types.join(", ")
SELECT t.oid, t.typname
FROM pg_type as t
WHERE t.typname IN (%s)
SQL
result = internal_execute(query, "SCHEMA", [], allow_retry: true, materialize_transactions: false)
coders = result.filter_map { |row| construct_coder(row, coders_by_name[row["typname"]]) }
map = PG::TypeMapByOid.new
coders.each { |coder| map.add_coder(coder) }
@raw_connection.type_map_for_results = map
@type_map_for_results = PG::TypeMapByOid.new
@type_map_for_results.default_type_map = map
@type_map_for_results.add_coder(PG::TextDecoder::Bytea.new(oid: 17, name: "bytea"))
@type_map_for_results.add_coder(MoneyDecoder.new(oid: 790, name: "money"))
# extract timestamp decoder for use in update_typemap_for_default_timezone
@timestamp_decoder = coders.find { |coder| coder.name == "timestamp" }
update_typemap_for_default_timezone
end
Defined in activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb line 1135
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in ActiveRecord::ConnectionAdapters::PostgreSQLAdapter