all: updated FSF address in GPL text
[sip-router] / modules / db_postgres / km_pg_con.h
1 /*
2  * $Id$
3  *
4  * Copyright (C) 2003 August.Net Services, LLC
5  * Copyright (C) 2008 1&1 Internet AG
6  *
7  * This file is part of Kamailio, a free SIP server.
8  *
9  * Kamailio is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version
13  *
14  * Kamailio is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License 
20  * along with this program; if not, write to the Free Software 
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
22  *
23  * History
24  * -------
25  * 2003-04-06 initial code written (Greg Fausak/Andy Fullford)
26  */
27
28 /*! \file
29  *  \brief DB_POSTGRES :: Core
30  *  \ingroup db_postgres
31  *  Module: \ref db_mysql
32  */
33
34 #ifndef KM_PG_CON_H
35 #define KM_PG_CON_H
36
37 #include "../../lib/srdb1/db_pool.h"
38 #include "../../lib/srdb1/db_id.h"
39
40 #include <time.h>
41 #include <libpq-fe.h>
42
43
44 /*! Postgres specific connection data */
45 struct pg_con {
46         struct db_id* id;        /*!< Connection identifier */
47         unsigned int ref;        /*!< Reference count */
48         struct pool_con* next;   /*!< Next connection in the pool */
49
50         int connected;      /*!< connection status */
51         char *sqlurl;           /*!< the url we are connected to, all connection memory parents from this */
52         PGconn *con;            /*!< this is the postgres connection */
53         PGresult *res;          /*!< this is the current result */
54         char**  row;            /*!< Actual row in the result */
55         time_t timestamp;       /*!< Timestamp of last query */
56         int affected_rows;      /*!< Number of rows affected by the last statement */
57         int transaction;        /*!< indicates whether a multi-query transaction is currently open */
58 };
59
60 #define CON_SQLURL(db_con)     (((struct pg_con*)((db_con)->tail))->sqlurl)
61 #define CON_RESULT(db_con)     (((struct pg_con*)((db_con)->tail))->res)
62 #define CON_CONNECTION(db_con) (((struct pg_con*)((db_con)->tail))->con)
63 #define CON_CONNECTED(db_con)  (((struct pg_con*)((db_con)->tail))->connected)
64 #define CON_ROW(db_con)        (((struct pg_con*)((db_con)->tail))->row)
65 #define CON_TIMESTAMP(db_con)  (((struct pg_con*)((db_con)->tail))->timestamp)
66 #define CON_ID(db_con)         (((struct pg_con*)((db_con)->tail))->id)
67 #define CON_AFFECTED(db_con)   (((struct pg_con*)((db_con)->tail))->affected_rows)
68 #define CON_TRANSACTION(db_con) (((struct pg_con*)((db_con)->tail))->transaction)
69
70 /*
71  * Create a new connection structure,
72  * open the PostgreSQL connection and set reference count to 1
73  */
74 struct pg_con* db_postgres_new_connection(struct db_id* id);
75
76 /*
77  * Close the connection and release memory
78  */
79 void db_postgres_free_connection(struct pool_con* con);
80
81 #endif /* KM_PG_CON_H */