/* * $Id$ * * PostgreSQL Database Driver for SER * * Portions Copyright (C) 2001-2003 FhG FOKUS * Copyright (C) 2003 August.Net Services, LLC * Portions Copyright (C) 2005-2008 iptelorg GmbH * * This file is part of SER, a free SIP server. * * SER is free software; you can redistribute it and/or modify it under the * terms of the GNU General Public License as published by the Free Software * Foundation; either version 2 of the License, or (at your option) any later * version * * For a license to use the ser software under conditions other than those * described here, or to purchase support for this software, please contact * iptel.org by e-mail at the following addresses: info@iptel.org * * SER is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., 59 * Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _PG_OID_H #define _PG_OID_H /** \addtogroup postgres * @{ */ /** \file * Data structures and functions implementing support for PostgreSQL Oid * identifiers. */ #include /** Structure mapping field names to Oids. * This structure is used to map field names or data type names to their * Oids/field types. */ typedef struct pg_type { Oid oid; /**< PostgreSQL Oid (object identifier) */ char* name; /**< Field name */ } pg_type_t; /** Enumeration of supported PostreSQL types. * This is the enumeration of all PostgreSQL types supported * by this driver, that means this driver will be able to convert * to and from these types. * * This enum is primarilly used as index to arrays of pg_type_t that are * stored in pg_con structures. Upon connecting to a PostgreSQL server the * driver retrieves the list of supported data types and oids from the server * and stores then in an array. Different PostgreSQL servers can have * different Oids for various data types so we have to have one array that * maps symbolic names below to Oids per connection/server. */ enum pg_type_id { PG_BOOL = 0, /**< Boolean, true/false */ PG_BYTE, /**< Binary data */ PG_CHAR, /**< Single character */ PG_INT8, /**< Integer with 8-byte storage */ PG_INT2, /**< Integer with 2-byte storage */ PG_INT4, /**< Integer with 4-byte storage */ PG_TEXT, /**< Variable-length string, no limit specified */ PG_FLOAT4, /**< Single-precision floating point number, 4-byte storage */ PG_FLOAT8, /**< Double-precision floating point number, 8-byte storage */ PG_INET, /**< IP address/netmask, host address */ PG_BPCHAR, /**< Blank-padded string, fixed storage length */ PG_VARCHAR, /**< Non-blank padded string, variable storage length */ PG_TIMESTAMP, /**< Date and time */ PG_TIMESTAMPTZ, /**< Date and time with time zone */ PG_BIT, /**< Fixed-length bit string */ PG_VARBIT, /**< Variable-length bit string */ PG_ID_MAX /**< Bumper, this must be the last element of the enum */ }; /** Creates a new Oid mapping table. * The function creates a new Oid mapping table and initializes the contents * of the table with values obtained from the PostgreSQL result in parameter. * Each element of the table maps field type name to oid and vice versa. * @param res A PostgreSQL result structure used to initialize the array. * @retval A pointer to the resulting array. * @retval NULL on error. */ pg_type_t* pg_new_oid_table(PGresult* res); /** Frees all memory used by the table * @param table A pointer to table to be freed */ void pg_destroy_oid_table(pg_type_t* table); /** Maps a field type name to Oid. * @param oid The resulting oid * @param table The mapping table * @param name Field type name * @retval 0 on success * @retval 1 if the type name is unknown * @retval -1 on error. */ int pg_name2oid(Oid* oid, pg_type_t* table, const char* name); /** Maps a field type name to Oid. * @param oid The resulting oid * @param table The mapping table * @param name Field type name * @retval 0 on success * @retval 1 if the type name is unknown * @retval -1 on error. */ int pg_oid2name(const char** name, pg_type_t* table, Oid oid); /** @} */ #endif /* _PG_OID_H */