driver-pgsql.c revision 158bd06e896df0a709e2677e3a046658ca8a2efd
d823d5b966f49d975a09a8512d084389d6d7ffc7dlezcano/* Copyright (c) 2004-2009 Dovecot authors, see the included COPYING file */
d823d5b966f49d975a09a8512d084389d6d7ffc7dlezcano#include "ioloop-internal.h" /* kind of dirty, but it should be fine.. */
d823d5b966f49d975a09a8512d084389d6d7ffc7dlezcano unsigned char *value;
d823d5b966f49d975a09a8512d084389d6d7ffc7dlezcano unsigned int fields_count;
d823d5b966f49d975a09a8512d084389d6d7ffc7dlezcano const char **fields;
d823d5b966f49d975a09a8512d084389d6d7ffc7dlezcano const char **values;
d823d5b966f49d975a09a8512d084389d6d7ffc7dlezcano ARRAY_DEFINE(binary_values, struct pgsql_binary_value);
d823d5b966f49d975a09a8512d084389d6d7ffc7dlezcano const char *error;
d823d5b966f49d975a09a8512d084389d6d7ffc7dlezcanotransaction_update_callback(struct sql_result *result, void *context);
d823d5b966f49d975a09a8512d084389d6d7ffc7dlezcanodriver_pgsql_query_full(struct sql_db *db, const char *query,
d823d5b966f49d975a09a8512d084389d6d7ffc7dlezcanostatic void result_finish(struct pgsql_result *result);
d823d5b966f49d975a09a8512d084389d6d7ffc7dlezcano /* The fd may be closed before call to PQfinish() already,
d823d5b966f49d975a09a8512d084389d6d7ffc7dlezcano so use io_remove_closed(). */
d823d5b966f49d975a09a8512d084389d6d7ffc7dlezcano const char *msg;
d823d5b966f49d975a09a8512d084389d6d7ffc7dlezcano return "(no error set)";
d823d5b966f49d975a09a8512d084389d6d7ffc7dlezcano /* Error message should contain trailing \n, we don't want it */
d823d5b966f49d975a09a8512d084389d6d7ffc7dlezcano while ((ret = PQconnectPoll(db->pg)) == PGRES_POLLING_ACTIVE)
d823d5b966f49d975a09a8512d084389d6d7ffc7dlezcano io_add(PQsocket(db->pg), io_dir, connect_callback, db);
static enum sql_db_flags
unsigned int i, count;
for (i = 0; i < count; i++)
bool disconnected;
T_BEGIN {
} T_END;
if (disconnected) {
if (retry) {
if (free_result)
int ret;
if (ret > 0)
if (ret < 0) {
int ret;
if (ret < 0) {
if (ret > 0) {
return queue;
char *to;
#ifdef HAVE_PQESCAPE_STRING_CONN
return to;
bool retry_query)
if (retry_query) {
bool retry_query)
if (retry_query) {
static struct sql_result *
return 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 *value;
*size_r = 0;
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)
MEMBER(v) {
MEMBER(v) {
void driver_pgsql_init(void);
void driver_pgsql_deinit(void);
void driver_pgsql_init(void)
void driver_pgsql_deinit(void)