mirror of https://github.com/sipwise/kamailio.git
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.
129 lines
4.4 KiB
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 */
|