Types mapping C++ to PostgreSQL.
Macros | |
| #define | OZO_PG_BIND_TYPE(CppType, PgTypeName) |
| Helper macro to define type mapping between C++ type and PostgreSQL type. More... | |
| #define | OZO_PG_DEFINE_TYPE_AND_ARRAY(Type, Name, Oid, ArrayOid, Size) |
| [[DEPRECATED]] Helper macro to define type mapping More... | |
| #define | OZO_PG_DEFINE_CUSTOM_TYPE(Type, Name, Size) |
| Helper macro to define custom type mapping. More... | |
| #define OZO_PG_BIND_TYPE | ( | CppType, | |
| PgTypeName | |||
| ) |
Helper macro to define type mapping between C++ type and PostgreSQL type.
In general type mapping is provided via ozo::definitions::type and ozo::definitions::array specialization. The library has all the necessary information (like OID, size and so on) about built-in types of PostgreSQL. To make C++ types binding easer and reduce a boilerplate code the macro exists.
| CppType | — C++ type to be mapped to database type |
| PgTypeName | — string with name of database type |
E.g. a definition of std::string as PostgreSQL text type may look like this:
| Type | Size | Has Array | Short Description |
|---|---|---|---|
| null | none | no | OZO pseudo-type definition for null representation |
| aclitem | 12 bytes | yes | access control list |
| any | 4 bytes | no | pseudo-type representing any type |
| anyarray | dynamic size | no | pseudo-type representing a polymorphic array type |
| anyelement | 4 bytes | no | pseudo-type representing a polymorphic base type |
| anyenum | 4 bytes | no | pseudo-type representing a polymorphic base type that is an enum |
| anynonarray | 4 bytes | no | pseudo-type representing a polymorphic base type that is not an array |
| anyrange | dynamic size | no | pseudo-type representing a polymorphic base type that is a range |
| bit | dynamic size | yes | fixed-length bit string |
| bool | 1 bytes | yes | boolean, 'true'/'false' |
| box | 32 bytes | yes | geometric box '(lower left,upper right)' |
| bpchar | dynamic size | yes | char(length), blank-padded string, fixed storage length |
| bytea | dynamic size | yes | variable-length string, binary values escaped |
| char | 1 bytes | yes | single character |
| cid | 4 bytes | yes | command identifier type, sequence in transaction id |
| cidr | dynamic size | yes | network IP address/netmask, network address |
| circle | 24 bytes | yes | geometric circle '(center,radius)' |
| cstring | dynamic size | yes | C-style string |
| date | 4 bytes | yes | date |
| daterange | dynamic size | yes | range of dates |
| event_trigger | 4 bytes | no | pseudo-type for the result of an event trigger function |
| fdw_handler | 4 bytes | no | pseudo-type for the result of an FDW handler function |
| float4 | 4 bytes | yes | single-precision floating point number, 4-byte storage |
| float8 | 8 bytes | yes | double-precision floating point number, 8-byte storage |
| gtsvector | dynamic size | yes | GiST index internal text representation for text search |
| index_am_handler | 4 bytes | no | pseudo-type for the result of an index AM handler function |
| inet | dynamic size | yes | IP address/netmask, host address, netmask optional |
| int2 | 2 bytes | yes | -32 thousand to 32 thousand, 2-byte storage |
| int2vector | dynamic size | yes | array of int2, used in system tables |
| int4 | 4 bytes | yes | -2 billion to 2 billion integer, 4-byte storage |
| int4range | dynamic size | yes | range of integers |
| int8 | 8 bytes | yes | ~18 digit integer, 8-byte storage |
| int8range | dynamic size | yes | range of bigints |
| interval | 16 bytes | yes | @ <number> <units>, time interval |
| json | dynamic size | yes | JSON stored as text |
| jsonb | dynamic size | yes | Binary JSON |
| jsonpath | dynamic size | yes | JSON path |
| language_handler | 4 bytes | no | pseudo-type for the result of a language handler function |
| line | 24 bytes | yes | geometric line |
| lseg | 32 bytes | yes | geometric line segment '(pt1,pt2)' |
| macaddr | 6 bytes | yes | XX:XX:XX:XX:XX:XX, MAC address |
| macaddr8 | 8 bytes | yes | XX:XX:XX:XX:XX:XX:XX:XX, MAC address |
| money | 8 bytes | yes | monetary amounts, $d,ddd.cc |
| name | dynamic size | yes | 63-byte type for storing system identifiers |
| numeric | dynamic size | yes | numeric(precision, decimal), arbitrary precision number |
| numrange | dynamic size | yes | range of numerics |
| oid | 4 bytes | yes | object identifier(oid), maximum 4 billion |
| oidvector | dynamic size | yes | array of oids, used in system tables |
| opaque | 4 bytes | no | obsolete, deprecated pseudo-type |
| path | dynamic size | yes | geometric path '(pt1,...)' |
| pg_attribute | dynamic size | no | |
| pg_class | dynamic size | no | |
| pg_dependencies | dynamic size | no | multivariate dependencies |
| pg_lsn | 8 bytes | yes | PostgreSQL LSN datatype |
| pg_mcv_list | dynamic size | no | multivariate MCV list |
| pg_ndistinct | dynamic size | no | multivariate ndistinct coefficients |
| pg_node_tree | dynamic size | no | string representing an internal node tree |
| pg_proc | dynamic size | no | |
| pg_type | dynamic size | no | |
| point | 16 bytes | yes | geometric point '(x, y)' |
| polygon | dynamic size | yes | geometric polygon '(pt1,...)' |
| record | dynamic size | yes | pseudo-type representing any composite type |
| refcursor | dynamic size | yes | reference to cursor (portal name) |
| regclass | 4 bytes | yes | registered class |
| regconfig | 4 bytes | yes | registered text search configuration |
| regdictionary | 4 bytes | yes | registered text search dictionary |
| regnamespace | 4 bytes | yes | registered namespace |
| regoper | 4 bytes | yes | registered operator |
| regoperator | 4 bytes | yes | registered operator (with args) |
| regproc | 4 bytes | yes | registered procedure |
| regprocedure | 4 bytes | yes | registered procedure (with args) |
| regrole | 4 bytes | yes | registered role |
| regtype | 4 bytes | yes | registered type |
| table_am_handler | 4 bytes | no | |
| text | dynamic size | yes | variable-length string, no limit specified |
| tid | 6 bytes | yes | (block, offset), physical location of tuple |
| time | 8 bytes | yes | time of day |
| timestamp | 8 bytes | yes | date and time |
| timestamptz | 8 bytes | yes | date and time with time zone |
| timetz | 12 bytes | yes | time of day with time zone |
| trigger | 4 bytes | no | pseudo-type for the result of a trigger function |
| tsm_handler | 4 bytes | no | pseudo-type for the result of a tablesample method function |
| tsquery | dynamic size | yes | query representation for text search |
| tsrange | dynamic size | yes | range of timestamps without time zone |
| tstzrange | dynamic size | yes | range of timestamps with time zone |
| tsvector | dynamic size | yes | text representation for text search |
| txid_snapshot | dynamic size | yes | txid snapshot |
| unknown | dynamic size | no | pseudo-type representing an undetermined type |
| uuid | 16 bytes | yes | UUID datatype |
| varbit | dynamic size | yes | variable-length bit string |
| varchar | dynamic size | yes | varchar(length), non-blank-padded string, variable storage length |
| void | 4 bytes | no | pseudo-type for the result of a function with no real result |
| xid | 4 bytes | yes | transaction id |
| xml | dynamic size | yes | XML content |
| #define OZO_PG_DEFINE_CUSTOM_TYPE | ( | Type, | |
| Name, | |||
| Size | |||
| ) |
Helper macro to define custom type mapping.
In general type mapping is provided via ozo::definitions::type and ozo::definitions::array specialization.
| Type | — C++ type to be mapped to database type |
| Name | — string with name of database type |
| Size | — optional parameter, bytes<N> for fixed-size type (like integer, bigint and so on), there N - size of the type in database, dynamic_type for dynamic size types (like text bytea and so on), if parameter not pointed size type will be evaluated basing on C++ type size. |
Definition of user defined composite type may look like this:
| #define OZO_PG_DEFINE_TYPE_AND_ARRAY | ( | Type, | |
| Name, | |||
| Oid, | |||
| ArrayOid, | |||
| Size | |||
| ) |
[[DEPRECATED]] Helper macro to define type mapping
In general type mapping is provided via ozo::definitions::type and ozo::definitions::array specialization. To reduce the boilerplate code the macro exists.
| Type | — C++ type to be mapped to database type |
| Name | — string with name of database type |
| Oid | — oid for built-in type and void for custom type |
| ArrayOid | — oid for an array of built-in type and void for custom type |
| Size | — bytes<N> for fixed-size type (like integer, bigint and so on), there N - size of the type in database, dynamic_type for dynamic size types (like text bytea and so on) |