You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kamailio/modules/db_postgres/pg_oid.h

129 lines
4.4 KiB

/*
* $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 <libpq-fe.h>
/** 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 */