driver-pgsql.c revision 46744f1c9837f189e1c1b13e4d83231b3c9dfff6
c25356d5978632df6203437e1953bcb29e0c736fTimo Sirainen/* Copyright (C) 2004 Timo Sirainen */
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen#include "ioloop-internal.h" /* kind of dirty, but it should be fine.. */
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen const char **fields;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen const char **values;
8872e5c991430f96138a46e36b7f3c2c40d8e5c2Timo Sirainenstatic void queue_send_next(struct pgsql_db *db);
651fc0f1e43fef3e02e0e7b5f498973b05f641d7Timo Sirainenstatic void driver_pgsql_close(struct pgsql_db *db)
45e62043058738e294f89504c319d852e25943ccTimo Sirainenstatic const char *last_error(struct pgsql_db *db)
45e62043058738e294f89504c319d852e25943ccTimo Sirainen const char *msg;
d5960ce1c0adda5c9e259bc429123ebc29c60baeTimo Sirainen return "(no error set)";
13c6532dc104d23061e6901783ceb1ff8872c206Timo Sirainen /* Error message should contain trailing \n, we don't want it */
bdd7a96c363346f7c38f389791be1487ca08775bTimo Sirainen while ((ret = PQconnectPoll(db->pg)) == PGRES_POLLING_ACTIVE)
ae8817f05005f57bba32479a610b52d083e2b6ebTimo Sirainen i_info("pgsql: Connected to %s", PQdb(db->pg));
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen io_add(PQsocket(db->pg), io_dir, connect_callback, db);
2f8da04d700cc23fcd6630226a4866e828b761bdTimo Sirainenstatic int driver_pgsql_connect(struct sql_db *_db)
95a1a5195d56f3cf5d1e529aad668f87ad3b979bTimo Sirainen /* don't try reconnecting more than once a second */
95a1a5195d56f3cf5d1e529aad668f87ad3b979bTimo Sirainen if (db->connecting || db->last_connect == now)
95a1a5195d56f3cf5d1e529aad668f87ad3b979bTimo Sirainen return db->connected ? 1 : (db->connecting ? 0 : -1);
static enum sql_db_flags
if (free_result)
int ret;
if (ret > 0)
if (ret < 0) {
int ret;
if (ret < 0) {
if (ret > 0) {
static struct sql_result *
case PGRES_COMMAND_OK:
case PGRES_TUPLES_OK:
case PGRES_EMPTY_QUERY:
case PGRES_NONFATAL_ERROR:
const char *field_name)
unsigned int idx)
return NULL;
const char *field_name)
int idx;
if (idx < 0)
return NULL;
const char *msg;
static struct sql_transaction_context *
const char **error_r)
NULL,