Class: PG::BasicTypeMapForResults

Inherits:
TypeMapByOid show all
Includes:
BasicTypeRegistry
Defined in:
lib/pg/basic_type_mapping.rb

Overview

Simple set of rules for type casting common PostgreSQL types to Ruby.

OIDs of supported type casts are not hard-coded in the sources, but are retrieved from the PostgreSQL's pg_type table in PG::BasicTypeMapForResults.new .

Result values are type casted based on the type OID of the given result column.

Higher level libraries will most likely not make use of this class, but use their own set of rules to choose suitable encoders and decoders.

Example:

conn = PG::Connection.new
# Assign a default ruleset for type casts of input and output values.
conn.type_mapping = PG::BasicTypeMapping.new(conn)
# Execute a query.
res = conn.exec_params( "SELECT $1::INT", ['5'] )
# Retrieve and cast the result value. Value format is 0 (text) and OID is 20. Therefore typecasting
# is done by PG::TextDecoder::Integer internally for all value retrieval methods.
res.values  # => [[5]]

PG::TypeMapByOid#fit_to_result(result, false) can be used to generate a result independent PG::TypeMapByColumn type map, which can subsequently be used to cast #get_copy_data fields. See also PG::BasicTypeMapBasedOnResult .

Instance Method Summary collapse

Methods inherited from TypeMapByOid

#add_coder, #coders, #fit_to_result, #max_rows_for_online_lookup, #max_rows_for_online_lookup=, #rm_coder

Methods inherited from TypeMap

#fit_to_query, #fit_to_result

Constructor Details

#initialize(connection) ⇒ BasicTypeMapForResults

Returns a new instance of BasicTypeMapForResults



242
243
244
245
246
247
248
249
# File 'lib/pg/basic_type_mapping.rb', line 242

def initialize(connection)
	@coder_maps = build_coder_maps(connection)

	# Populate TypeMapByOid hash with decoders
	@coder_maps.map{|f| f[:decoder].coders }.flatten.each do |coder|
		add_coder(coder)
	end
end