mirror of
https://github.com/jorisvink/kore
synced 2025-03-10 13:09:02 -04:00
- adds new cleanup function that workers will call. - adds kore_pgsql_nfields() to return number of fields in result. - add kore_pgsql_fieldname() to return name of a given field. This commit also changes the behaviour of pgsql_conn_release() in that it will now cancel the active query before releasing the connection. This makes sure that if long running queries are active they are hopefully cancelled if an http request is removed while such queries are still running.
95 lines
2.6 KiB
C
95 lines
2.6 KiB
C
/*
|
|
* Copyright (c) 2014 Joris Vink <joris@coders.se>
|
|
*
|
|
* Permission to use, copy, modify, and distribute this software for any
|
|
* purpose with or without fee is hereby granted, provided that the above
|
|
* copyright notice and this permission notice appear in all copies.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
*/
|
|
|
|
#ifndef _H_KORE_PGSQL
|
|
#define _H_KORE_PGSQL
|
|
|
|
#include <libpq-fe.h>
|
|
|
|
#define KORE_PGSQL_FORMAT_TEXT 0
|
|
#define KORE_PGSQL_FORMAT_BINARY 1
|
|
|
|
#define KORE_PGSQL_SYNC 0x0001
|
|
#define KORE_PGSQL_ASYNC 0x0002
|
|
#define KORE_PGSQL_SCHEDULED 0x0004
|
|
|
|
#if defined(__cplusplus)
|
|
extern "C" {
|
|
#endif
|
|
|
|
struct pgsql_conn {
|
|
u_int8_t type;
|
|
u_int8_t flags;
|
|
char *name;
|
|
|
|
PGconn *db;
|
|
struct pgsql_job *job;
|
|
TAILQ_ENTRY(pgsql_conn) list;
|
|
};
|
|
|
|
struct pgsql_db {
|
|
char *name;
|
|
char *conn_string;
|
|
|
|
LIST_ENTRY(pgsql_db) rlist;
|
|
};
|
|
|
|
struct kore_pgsql {
|
|
u_int8_t state;
|
|
int flags;
|
|
char *error;
|
|
PGresult *result;
|
|
struct pgsql_conn *conn;
|
|
|
|
LIST_ENTRY(kore_pgsql) rlist;
|
|
};
|
|
|
|
extern u_int16_t pgsql_conn_max;
|
|
|
|
void kore_pgsql_init(void);
|
|
void kore_pgsql_sys_cleanup(void);
|
|
int kore_pgsql_query_init(struct kore_pgsql *, struct http_request *,
|
|
const char *, int);
|
|
void kore_pgsql_handle(void *, int);
|
|
void kore_pgsql_cleanup(struct kore_pgsql *);
|
|
void kore_pgsql_continue(struct http_request *, struct kore_pgsql *);
|
|
int kore_pgsql_query(struct kore_pgsql *, const char *);
|
|
int kore_pgsql_query_params(struct kore_pgsql *,
|
|
const char *, int, int, ...);
|
|
int kore_pgsql_v_query_params(struct kore_pgsql *,
|
|
const char *, int, int, va_list);
|
|
int kore_pgsql_register(const char *, const char *);
|
|
int kore_pgsql_ntuples(struct kore_pgsql *);
|
|
int kore_pgsql_nfields(struct kore_pgsql *);
|
|
void kore_pgsql_logerror(struct kore_pgsql *);
|
|
void kore_pgsql_queue_remove(struct http_request *);
|
|
char *kore_pgsql_fieldname(struct kore_pgsql *, int);
|
|
char *kore_pgsql_getvalue(struct kore_pgsql *, int, int);
|
|
int kore_pgsql_getlength(struct kore_pgsql *, int, int);
|
|
|
|
#if defined(__cplusplus)
|
|
}
|
|
#endif
|
|
|
|
#define KORE_PGSQL_STATE_INIT 1
|
|
#define KORE_PGSQL_STATE_WAIT 2
|
|
#define KORE_PGSQL_STATE_RESULT 3
|
|
#define KORE_PGSQL_STATE_ERROR 4
|
|
#define KORE_PGSQL_STATE_DONE 5
|
|
#define KORE_PGSQL_STATE_COMPLETE 6
|
|
|
|
#endif
|