diff --git a/doc.go b/doc.go index 5f3490ca..2d782c5e 100644 --- a/doc.go +++ b/doc.go @@ -155,25 +155,10 @@ netmask for IPv4 and a /128 for IPv6. Custom Type Support pgx includes support for the common data types like integers, floats, strings, -dates, and times that have direct mappings between Go and SQL. Support can be -added for additional types like point, hstore, numeric, etc. that do not have -direct mappings in Go by the types implementing ScannerPgx and Encoder. - -Custom types can support text or binary formats. Binary format can provide a -large performance increase. The natural place for deciding the format for a -value would be in ScannerPgx as it is responsible for decoding the returned -data. However, that is impossible as the query has already been sent by the time -the ScannerPgx is invoked. The solution to this is the global -DefaultTypeFormats. If a custom type prefers binary format it should register it -there. - - pgx.DefaultTypeFormats["point"] = pgx.BinaryFormatCode - -Note that the type is referred to by name, not by Oid. This is because custom -PostgreSQL types like hstore will have different Oids on different servers. When -pgx establishes a connection it queries the pg_type table for all types. It then -matches the names in DefaultTypeFormats with the returned Oids and stores it in -Conn.PgTypes. +dates, and times that have direct mappings between Go and SQL. In addition, +pgx uses the github.com/jackc/pgx/pgtype library to support more types. See +documention for that library for instructions on how to implement custom +types. See example_custom_type_test.go for an example of a custom type for the PostgreSQL point type. diff --git a/values.go b/values.go index 1df63945..aec3cda7 100644 --- a/values.go +++ b/values.go @@ -64,52 +64,6 @@ const maxUint = ^uint(0) const maxInt = int(maxUint >> 1) const minInt = -maxInt - 1 -// DefaultTypeFormats maps type names to their default requested format (text -// or binary). In theory the Scanner interface should be the one to determine -// the format of the returned values. However, the query has already been -// executed by the time Scan is called so it has no chance to set the format. -// So for types that should always be returned in binary the format should be -// set here. -var DefaultTypeFormats map[string]int16 - -func init() { - DefaultTypeFormats = map[string]int16{ - "_aclitem": TextFormatCode, // Pg's src/backend/utils/adt/acl.c has only in/out (text) not send/recv (bin) - "_bool": BinaryFormatCode, - "_bytea": BinaryFormatCode, - "_cidr": BinaryFormatCode, - "_float4": BinaryFormatCode, - "_float8": BinaryFormatCode, - "_inet": BinaryFormatCode, - "_int2": BinaryFormatCode, - "_int4": BinaryFormatCode, - "_int8": BinaryFormatCode, - "_text": BinaryFormatCode, - "_timestamp": BinaryFormatCode, - "_timestamptz": BinaryFormatCode, - "_varchar": BinaryFormatCode, - "aclitem": TextFormatCode, // Pg's src/backend/utils/adt/acl.c has only in/out (text) not send/recv (bin) - "bool": BinaryFormatCode, - "bytea": BinaryFormatCode, - "char": BinaryFormatCode, - "cid": BinaryFormatCode, - "cidr": BinaryFormatCode, - "date": BinaryFormatCode, - "float4": BinaryFormatCode, - "float8": BinaryFormatCode, - "inet": BinaryFormatCode, - "int2": BinaryFormatCode, - "int4": BinaryFormatCode, - "int8": BinaryFormatCode, - "oid": BinaryFormatCode, - "record": BinaryFormatCode, - "tid": BinaryFormatCode, - "timestamp": BinaryFormatCode, - "timestamptz": BinaryFormatCode, - "xid": BinaryFormatCode, - } -} - // SerializationError occurs on failure to encode or decode a value type SerializationError string