本文整理汇总了C++中PQstatus函数的典型用法代码示例。如果您正苦于以下问题:C++ PQstatus函数的具体用法?C++ PQstatus怎么用?C++ PQstatus使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了PQstatus函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: isOK
bool isOK() const
{
return (!closed_) && (PQstatus(conn_) != CONNECTION_BAD);
}
示例2: main
main()
{
char *pghost,
*pgport,
*pgoptions,
*pgtty;
char *dbName;
int nFields;
int row,
field;
PGconn *conn;
PGresult *res;
int junk;
char *field_name;
int field_type;
int WKB_OID;
char conn_string[255];
bool *bool_val;
int *int_val;
float *float_val;
double *double_val;
char *char_val;
char *wkb_val;
char *table_name = "wkbreader_test";
char query_str[1000];
/* make a connection to the database */
conn = PQconnectdb("");
/*
* check to see that the backend connection was successfully made
*/
if (PQstatus(conn) == CONNECTION_BAD)
{
fprintf(stderr, "%s", PQerrorMessage(conn));
exit_nicely(conn);
}
//what is the geometry type's OID #?
WKB_OID = find_WKB_typeid(conn);
/* start a transaction block */
res = PQexec(conn, "BEGIN");
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "%s", PQerrorMessage(conn));
PQclear(res);
exit_nicely(conn);
}
/*
* should PQclear PGresult whenever it is no longer needed to avoid
* memory leaks
*/
PQclear(res);
/*
* fetch rows from the pg_database, the system catalog of
* databases
*/
sprintf(query_str, "DECLARE mycursor BINARY CURSOR FOR select text(num), asbinary(the_geom,'ndr') as wkb from %s", table_name);
printf(query_str);
printf("\n");
res = PQexec(conn, query_str);
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "DECLARE CURSOR command failed\n");
fprintf(stderr, "%s", PQerrorMessage(conn));
PQclear(res);
exit_nicely(conn);
}
PQclear(res);
res = PQexec(conn, "FETCH ALL in mycursor");
if (!res || PQresultStatus(res) != PGRES_TUPLES_OK)
{
fprintf(stderr, "FETCH ALL command didn't return tuples properly\n");
fprintf(stderr, "%s", PQerrorMessage(conn));
PQclear(res);
exit_nicely(conn);
}
for (row=0; row< PQntuples(res); row++)
{
printf("------------------------------row %i --------------------------\n",row);
//not so efficient, but...
for (field =0 ; field< PQnfields(res); field++)
{
field_type =PQftype(res,field);
field_name = PQfname(res, field);
//we just handle a few of the popular type since this is just an example
if (field_type ==16)// bool
{
//.........这里部分代码省略.........
示例3: pdo_pgsql_get_attribute
static int pdo_pgsql_get_attribute(pdo_dbh_t *dbh, zend_long attr, zval *return_value)
{
pdo_pgsql_db_handle *H = (pdo_pgsql_db_handle *)dbh->driver_data;
switch (attr) {
case PDO_ATTR_EMULATE_PREPARES:
ZVAL_BOOL(return_value, H->emulate_prepares);
break;
case PDO_PGSQL_ATTR_DISABLE_PREPARES:
ZVAL_BOOL(return_value, H->disable_prepares);
break;
case PDO_ATTR_CLIENT_VERSION:
ZVAL_STRING(return_value, PG_VERSION);
break;
case PDO_ATTR_SERVER_VERSION:
if (PQprotocolVersion(H->server) >= 3) { /* PostgreSQL 7.4 or later */
ZVAL_STRING(return_value, (char*)PQparameterStatus(H->server, "server_version"));
} else /* emulate above via a query */
{
PGresult *res = PQexec(H->server, "SELECT VERSION()");
if (res && PQresultStatus(res) == PGRES_TUPLES_OK) {
ZVAL_STRING(return_value, (char *)PQgetvalue(res, 0, 0));
}
if (res) {
PQclear(res);
}
}
break;
case PDO_ATTR_CONNECTION_STATUS:
switch (PQstatus(H->server)) {
case CONNECTION_STARTED:
ZVAL_STRINGL(return_value, "Waiting for connection to be made.", sizeof("Waiting for connection to be made.")-1);
break;
case CONNECTION_MADE:
case CONNECTION_OK:
ZVAL_STRINGL(return_value, "Connection OK; waiting to send.", sizeof("Connection OK; waiting to send.")-1);
break;
case CONNECTION_AWAITING_RESPONSE:
ZVAL_STRINGL(return_value, "Waiting for a response from the server.", sizeof("Waiting for a response from the server.")-1);
break;
case CONNECTION_AUTH_OK:
ZVAL_STRINGL(return_value, "Received authentication; waiting for backend start-up to finish.", sizeof("Received authentication; waiting for backend start-up to finish.")-1);
break;
#ifdef CONNECTION_SSL_STARTUP
case CONNECTION_SSL_STARTUP:
ZVAL_STRINGL(return_value, "Negotiating SSL encryption.", sizeof("Negotiating SSL encryption.")-1);
break;
#endif
case CONNECTION_SETENV:
ZVAL_STRINGL(return_value, "Negotiating environment-driven parameter settings.", sizeof("Negotiating environment-driven parameter settings.")-1);
break;
case CONNECTION_BAD:
default:
ZVAL_STRINGL(return_value, "Bad connection.", sizeof("Bad connection.")-1);
break;
}
break;
case PDO_ATTR_SERVER_INFO: {
int spid = PQbackendPID(H->server);
zend_string *str_info =
strpprintf(0,
"PID: %d; Client Encoding: %s; Is Superuser: %s; Session Authorization: %s; Date Style: %s",
spid,
(char*)PQparameterStatus(H->server, "client_encoding"),
(char*)PQparameterStatus(H->server, "is_superuser"),
(char*)PQparameterStatus(H->server, "session_authorization"),
(char*)PQparameterStatus(H->server, "DateStyle"));
ZVAL_STR(return_value, str_info);
}
break;
default:
return 0;
}
return 1;
}
示例4: config_connect
static int
config_connect(struct config *conf)
{
static const struct {
const char *name;
int cols;
} qspec[SQL_MAX] = {
{ "query_alias", 1 },
{ "query_domain", 1 },
{ "query_credentials", 2 },
{ "query_netaddr", 1 },
{ "query_userinfo", 3 },
{ "query_source", 1 },
{ "query_mailaddr", 1 },
{ "query_addrname", 1 },
};
size_t i;
char *conninfo, *q;
log_debug("debug: table-postgres: (re)connecting");
/* Disconnect first, if needed */
config_reset(conf);
conninfo = dict_get(&conf->conf, "conninfo");
if (conninfo == NULL) {
log_warnx("warn: table-postgres: missing \"conninfo\" configuration directive");
goto end;
}
conf->db = PQconnectdb(conninfo);
if (conf->db == NULL) {
log_warnx("warn: table-postgres: PQconnectdb return NULL");
goto end;
}
if (PQstatus(conf->db) != CONNECTION_OK) {
log_warnx("warn: table-postgres: PQconnectdb: %s",
PQerrorMessage(conf->db));
goto end;
}
for (i = 0; i < SQL_MAX; i++) {
q = dict_get(&conf->conf, qspec[i].name);
if (q && (conf->statements[i] = table_postgres_prepare_stmt(
conf->db, q, 1, qspec[i].cols)) == NULL)
goto end;
}
q = dict_get(&conf->conf, "fetch_source");
if (q && (conf->stmt_fetch_source = table_postgres_prepare_stmt(conf->db,
q, 0, 1)) == NULL)
goto end;
log_debug("debug: table-postgres: connected");
return 1;
end:
config_reset(conf);
return 0;
}
示例5: c_psql_exec_query
/* db->db_lock must be locked when calling this function */
static int c_psql_exec_query (c_psql_database_t *db, udb_query_t *q,
udb_query_preparation_area_t *prep_area)
{
PGresult *res;
c_psql_user_data_t *data;
const char *host;
char **column_names;
char **column_values;
int column_num;
int rows_num;
int status;
int row, col;
/* The user data may hold parameter information, but may be NULL. */
data = udb_query_get_user_data (q);
/* Versions up to `3' don't know how to handle parameters. */
if (3 <= db->proto_version)
res = c_psql_exec_query_params (db, q, data);
else if ((NULL == data) || (0 == data->params_num))
res = c_psql_exec_query_noparams (db, q);
else {
log_err ("Connection to database \"%s\" (%s) does not support "
"parameters (protocol version %d) - "
"cannot execute query \"%s\".",
db->database, db->instance, db->proto_version,
udb_query_get_name (q));
return -1;
}
/* give c_psql_write() a chance to acquire the lock if called recursively
* through dispatch_values(); this will happen if, both, queries and
* writers are configured for a single connection */
pthread_mutex_unlock (&db->db_lock);
column_names = NULL;
column_values = NULL;
if (PGRES_TUPLES_OK != PQresultStatus (res)) {
pthread_mutex_lock (&db->db_lock);
if ((CONNECTION_OK != PQstatus (db->conn))
&& (0 == c_psql_check_connection (db))) {
PQclear (res);
return c_psql_exec_query (db, q, prep_area);
}
log_err ("Failed to execute SQL query: %s",
PQerrorMessage (db->conn));
log_info ("SQL query was: %s",
udb_query_get_statement (q));
PQclear (res);
return -1;
}
#define BAIL_OUT(status) \
sfree (column_names); \
sfree (column_values); \
PQclear (res); \
pthread_mutex_lock (&db->db_lock); \
return status
rows_num = PQntuples (res);
if (1 > rows_num) {
BAIL_OUT (0);
}
column_num = PQnfields (res);
column_names = (char **) calloc (column_num, sizeof (char *));
if (NULL == column_names) {
log_err ("calloc failed.");
BAIL_OUT (-1);
}
column_values = (char **) calloc (column_num, sizeof (char *));
if (NULL == column_values) {
log_err ("calloc failed.");
BAIL_OUT (-1);
}
for (col = 0; col < column_num; ++col) {
/* Pointers returned by `PQfname' are freed by `PQclear' via
* `BAIL_OUT'. */
column_names[col] = PQfname (res, col);
if (NULL == column_names[col]) {
log_err ("Failed to resolve name of column %i.", col);
BAIL_OUT (-1);
}
}
if (C_PSQL_IS_UNIX_DOMAIN_SOCKET (db->host)
|| (0 == strcmp (db->host, "127.0.0.1"))
|| (0 == strcmp (db->host, "localhost")))
host = hostname_g;
else
//.........这里部分代码省略.........
示例6: db_postgres_submit_async_query
static int db_postgres_submit_async_query(const db_con_t* _con, const str* _s)
{
int i,ret=0;
struct timeval start;
if(! _con || !_s || !_s->s)
{
LM_ERR("invalid parameter value\n");
return(-1);
}
submit_func_called = 1;
/* this bit of nonsense in case our connection get screwed up */
switch(PQstatus(CON_CONNECTION(_con)))
{
case CONNECTION_OK:
break;
case CONNECTION_BAD:
LM_DBG("connection reset\n");
PQreset(CON_CONNECTION(_con));
break;
case CONNECTION_STARTED:
case CONNECTION_MADE:
case CONNECTION_AWAITING_RESPONSE:
case CONNECTION_AUTH_OK:
case CONNECTION_SETENV:
case CONNECTION_SSL_STARTUP:
case CONNECTION_NEEDED:
default:
LM_ERR("%p PQstatus(%s) invalid: %.*s\n", _con,
PQerrorMessage(CON_CONNECTION(_con)), _s->len, _s->s);
return -1;
}
for (i=0;i<max_db_queries;i++) {
/* free any previous query that is laying about */
if(CON_RESULT(_con)) {
free_query(_con);
}
start_expire_timer(start,db_postgres_exec_query_threshold);
ret = PQsendQuery(CON_CONNECTION(_con), _s->s);
_stop_expire_timer(start, db_postgres_exec_query_threshold,
"pgsql query", _s->s, _s->len, 0,
sql_slow_queries, sql_total_queries);
/* exec the query */
if (ret) {
LM_DBG("%p PQsendQuery(%.*s)\n", _con, _s->len, _s->s);
return 0;
} else {
LM_DBG("%p PQsendQuery failed: %s Query: %.*s\n", _con,
PQerrorMessage(CON_CONNECTION(_con)), _s->len, _s->s);
if(PQstatus(CON_CONNECTION(_con))!=CONNECTION_OK) {
LM_DBG("connection reset\n");
PQreset(CON_CONNECTION(_con));
} else {
/* failure not due to connection loss - no point in retrying */
if(CON_RESULT(_con)) {
free_query(_con);
}
break;
}
}
}
LM_ERR("%p PQsendQuery Error: %s Query: %.*s\n", _con,
PQerrorMessage(CON_CONNECTION(_con)), _s->len, _s->s);
return -1;
}
示例7: do_postgres_cCommand_execute_async
PGresult * do_postgres_cCommand_execute_async(VALUE self, VALUE connection, PGconn *db, VALUE query) {
PGresult *response;
char* str = StringValuePtr(query);
while ((response = PQgetResult(db))) {
PQclear(response);
}
struct timeval start;
int retval;
gettimeofday(&start, NULL);
retval = PQsendQuery(db, str);
if (!retval) {
if (PQstatus(db) != CONNECTION_OK) {
PQreset(db);
if (PQstatus(db) == CONNECTION_OK) {
retval = PQsendQuery(db, str);
}
else {
do_postgres_full_connect(connection, db);
retval = PQsendQuery(db, str);
}
}
if (!retval) {
rb_raise(eDO_ConnectionError, "%s", PQerrorMessage(db));
}
}
int socket_fd = PQsocket(db);
rb_fdset_t rset;
rb_fd_init(&rset);
rb_fd_set(socket_fd, &rset);
while (1) {
retval = rb_thread_fd_select(socket_fd + 1, &rset, NULL, NULL, NULL);
if (retval < 0) {
rb_fd_term(&rset);
rb_sys_fail(0);
}
if (retval == 0) {
continue;
}
if (PQconsumeInput(db) == 0) {
rb_fd_term(&rset);
rb_raise(eDO_ConnectionError, "%s", PQerrorMessage(db));
}
if (PQisBusy(db) == 0) {
break;
}
}
rb_fd_term(&rset);
data_objects_debug(connection, query, &start);
return PQgetResult(db);
}
示例8: doSQL
void doSQL(PGconn *conn, char *command)
{
PGresult *result;
printf("%s\n", command);
result = PQexec(conn, command);
printf("status is : %s\n", PQresStatus(PQresultStatus(result)));
printf("#rows affected: %s\n", PQcmdTuples(result));
printf("result message: %s\n", PQresultErrorMessage(result));
int dalej;
while(dalej=0)
{
switch(PQresultStatus(result)) {
case PGRES_TUPLES_OK:
{
int n = 0, r = 0;
int nrows = PQntuples(result);
int nfields = PQnfields(result);
printf("number of rows returned = %d\n", nrows);
printf("number of fields returned = %d\n", nfields);
for(r = 0; r < nrows; r++) {
for(n = 0; n < nfields; n++)
printf(" %s = %s", PQfname(result, n),PQgetvalue(result,r,n));
printf("\n");
}
}
}
PQclear(result);
}
int main()
{
PGresult *result;
PGconn *conn;
char odp, nazwa[20], miasto[20],przydomek[20],data[20],zapytanie[50],wartosc[20];
int id,budzet;
const char *connection_str = "host=localhost port=5432 dbname=pzynis user=pzynis password=alamakota";
conn = PQconnectdb(connection_str);
if (PQstatus(conn) == CONNECTION_BAD) {
fprintf(stderr, "Connection to %s failed, %s", connection_str,
PQerrorMessage(conn));
} else {
printf("Connected OK\n");
doSQL(conn, "SELECT * FROM number");
// doSQL(conn, "UPDATE number SET name = 'Zaphod' WHERE value = 1");
//.........这里部分代码省略.........
示例9: pw_pgsql_connect
int pw_pgsql_connect(PGconn ** const id_sql_server)
{
char *conninfo = NULL;
size_t sizeof_conninfo;
char *escaped_server = NULL;
char *escaped_db = NULL;
char *escaped_user = NULL;
char *escaped_pw = NULL;
int ret = -1;
*id_sql_server = NULL;
server = malloc(16);
db = malloc(16);
user = malloc(16);
pw = malloc(16);
snprintf( server, 10,"localhost");
snprintf( db, 9,"fastprod");
snprintf( user, 9,"fastprod");
snprintf( pw, 9,"fastprod");
if ((escaped_server = pw_pgsql_escape_string(server)) == NULL ||
(escaped_db = pw_pgsql_escape_string(db)) == NULL ||
(escaped_user = pw_pgsql_escape_string(user)) == NULL ||
(escaped_pw = pw_pgsql_escape_string(pw)) == NULL) {
rprintf(FLOG,"ERR escaping\n");
goto bye;
}
//rprintf(FLOG,"ERR conninfo:%s-%s\n",escaped_server,server);
#define PGSQL_CONNECT_FMTSTRING \
"host='%s' port='%d' dbname='%s' user='%s' password='%s'"
sizeof_conninfo = sizeof PGSQL_CONNECT_FMTSTRING +
strlen(escaped_server) + (size_t) 5U + strlen(escaped_db) +
strlen(escaped_user) + strlen(escaped_pw);
if ((conninfo = malloc(sizeof_conninfo)) == NULL) {
rprintf(FLOG,"ERR malloc(sizeof_conninfo)\n");
goto bye;
}
if (SNCHECK(snprintf(conninfo, sizeof_conninfo,
PGSQL_CONNECT_FMTSTRING,
server, port, db, user, pw), sizeof_conninfo)) {
rprintf(FLOG,"ERR SNCHECK()\n");
goto bye;
}
//rprintf(FLOG,"ERR conninfo:%s\n",conninfo);
if ((*id_sql_server = PQconnectdb(conninfo)) == NULL ||
PQstatus(*id_sql_server) == CONNECTION_BAD) {
free(conninfo);
if (server_down == 0) {
server_down++;
//logfile(LOG_ERR, MSG_SQL_DOWN);
}
rprintf(FLOG,"ERR PQconnectdb\n");
goto bye;
}
server_down = 0;
ret = 0;
bye:
free(conninfo);
free(escaped_server);
free(escaped_db);
free(escaped_user);
free(escaped_pw);
return ret;
}
示例10: zbx_db_connect
//.........这里部分代码省略.........
ret = ZBX_DB_DOWN;
}
}
if (ZBX_DB_OK == ret)
{
/* initialize statement handle */
err = OCIHandleAlloc((dvoid *)oracle.envhp, (dvoid **)&oracle.stmthp, OCI_HTYPE_STMT,
(size_t)0, (dvoid **)0);
if (OCI_SUCCESS != err)
{
zabbix_errlog(ERR_Z3001, connect, err, zbx_oci_error(err));
ret = ZBX_DB_DOWN;
}
}
if (ZBX_DB_OK == ret)
DBexecute("alter session set nls_numeric_characters='. '");
zbx_free(connect);
if (ZBX_DB_OK != ret)
zbx_db_close();
#elif defined(HAVE_POSTGRESQL)
if (0 != port)
cport = zbx_dsprintf(cport, "%d", port);
conn = PQsetdbLogin(host, cport, NULL, NULL, dbname, user, password);
zbx_free(cport);
/* check to see that the backend connection was successfully made */
if (CONNECTION_OK != PQstatus(conn))
{
zabbix_errlog(ERR_Z3001, dbname, 0, PQerrorMessage(conn));
ret = ZBX_DB_DOWN;
}
else
{
result = DBselect("select oid from pg_type where typname='bytea'");
if (NULL != (row = DBfetch(result)))
ZBX_PG_BYTEAOID = atoi(row[0]);
DBfree_result(result);
}
#ifdef HAVE_FUNCTION_PQSERVERVERSION
ZBX_PG_SVERSION = PQserverVersion(conn);
zabbix_log(LOG_LEVEL_DEBUG, "PostgreSQL Server version: %d", ZBX_PG_SVERSION);
#endif
if (80100 <= ZBX_PG_SVERSION)
{
/* disable "nonstandard use of \' in a string literal" warning */
DBexecute("set escape_string_warning to off");
result = DBselect("show standard_conforming_strings");
if (NULL != (row = DBfetch(result)))
ZBX_PG_ESCAPE_BACKSLASH = (0 == strcmp(row[0], "off"));
DBfree_result(result);
}
if (90000 <= ZBX_PG_SVERSION)
{
/* change the output format for values of type bytea from hex (the default) to escape */
DBexecute("set bytea_output=escape");
示例11: pgsql_openlib
//.........这里部分代码省略.........
return NULL;
}
/* we have all the info we need to open a database, allocate lmf_str */
if ((m_fptr = (struct lmf_str *)calloc(1,sizeof(struct lmf_str)))==NULL) {
fprintf(stderr," cannot allocate lmf_str (%ld) for %s\n",
sizeof(struct lmf_str),sname);
return NULL;
}
/* have our struct, initialize it */
strncpy(m_fptr->lb_name,sname,MAX_FN);
m_fptr->lb_name[MAX_FN-1]='\0';
m_fptr->sascii = sascii;
m_fptr->sql_db = sql_db;
m_fptr->getlib = pgsql_getlib;
m_fptr->ranlib = pgsql_ranlib;
m_fptr->mm_flg = 0;
m_fptr->sql_reopen = 0;
m_fptr->lb_type = PGSQL_LIB;
/* now open the database, if necessary */
conn = PQsetdbLogin(sql_host,
sql_port,
NULL,
NULL,
sql_dbname,
sql_user,
sql_pass);
if (PQstatus(conn) != CONNECTION_OK) {
fprintf(stderr, "Connection to database '%s' failed.\n", PQdb(conn));
fprintf(stderr, "%s", PQerrorMessage(conn));
PQfinish(conn);
goto error_r;
}
else {
m_fptr->pgsql_conn = conn;
fprintf(stderr," Database %s opened on %s\n",sql_dbname,sql_host);
}
/* check for 'DO' command - copy to 'DO' string */
while (*bps == '-') { *bps++=' ';}
if (isspace(bps[-1]) && toupper(bps[0])=='D' &&
toupper(bps[1])=='O' && isspace(bps[2])) {
/* have some 'DO' commands */
/* check where the end of the last DO statement is */
sql_do_cnt = 1; /* count up the number of 'DO' statements for later */
bdp=bps+3;
while ((bp=strchr(bdp,';'))!=NULL) {
tp = bp+2; /* skip ;\n */
while (isspace(*tp) || *tp == '-') {*tp++ = ' ';}
if (toupper(*tp)=='D' && toupper(tp[1])=='O' && isspace(tp[2])) {
sql_do_cnt++; /* count the DO statements */
bdp = tp+3; /* move to the next DO statement */
}
else break;
}
if (bp != NULL) { /* end of the last DO, begin of select */
tchar = *(bp+1);
*(bp+1)='\0'; /* terminate DO strings */
if ((sql_do = calloc(strlen(bps)+1, sizeof(char)))==NULL) {
示例12: zbx_db_vexecute
//.........这里部分代码省略.........
zabbix_log(LOG_LEVEL_DEBUG, "cannot retrieve result set");
break;
}
else
ret += (int)mysql_affected_rows(conn);
/* more results? -1 = no, >0 = error, 0 = yes (keep looping) */
if (0 < (status = mysql_next_result(conn)))
zabbix_errlog(ERR_Z3005, mysql_errno(conn), mysql_error(conn), sql);
}
while (0 == status);
}
}
#elif defined(HAVE_ORACLE)
if (OCI_SUCCESS == (err = zbx_oracle_statement_prepare(sql)))
{
ub4 nrows = 0;
if (OCI_SUCCESS == (err = zbx_oracle_statement_execute(&nrows)))
ret = (int)nrows;
}
if (OCI_SUCCESS != err)
{
zabbix_errlog(ERR_Z3005, err, zbx_oci_error(err), sql);
ret = (OCI_SERVER_NORMAL == OCI_DBserver_status() ? ZBX_DB_FAIL : ZBX_DB_DOWN);
}
#elif defined(HAVE_POSTGRESQL)
result = PQexec(conn,sql);
if (NULL == result)
{
zabbix_errlog(ERR_Z3005, 0, "result is NULL", sql);
ret = (CONNECTION_OK == PQstatus(conn) ? ZBX_DB_FAIL : ZBX_DB_DOWN);
}
else if (PGRES_COMMAND_OK != PQresultStatus(result))
{
error = zbx_dsprintf(error, "%s:%s",
PQresStatus(PQresultStatus(result)),
PQresultErrorMessage(result));
zabbix_errlog(ERR_Z3005, 0, error, sql);
zbx_free(error);
ret = (CONNECTION_OK == PQstatus(conn) ? ZBX_DB_FAIL : ZBX_DB_DOWN);
}
if (ZBX_DB_OK == ret)
ret = atoi(PQcmdTuples(result));
PQclear(result);
#elif defined(HAVE_SQLITE3)
if (0 == txn_level && PHP_MUTEX_OK != php_sem_acquire(&sqlite_access))
{
zabbix_log(LOG_LEVEL_CRIT, "ERROR: cannot create lock on SQLite3 database");
exit(FAIL);
}
lbl_exec:
if (SQLITE_OK != (err = sqlite3_exec(conn, sql, NULL, 0, &error)))
{
if (SQLITE_BUSY == err)
goto lbl_exec;
zabbix_errlog(ERR_Z3005, 0, error, sql);
sqlite3_free(error);
示例13: zbx_db_vselect
//.........这里部分代码省略.........
/* represent any data as characters */
err = OCIDefineByPos(result->stmthp, &defnp, oracle.errhp, counter,
(dvoid *)result->values[counter - 1], col_width, SQLT_STR,
(dvoid *)0, (ub2 *)0, (ub2 *)0, OCI_DEFAULT);
}
}
/* free cell descriptor */
OCIDescriptorFree(parmdp, OCI_DTYPE_PARAM);
parmdp = NULL;
}
error:
if (OCI_SUCCESS != err)
{
zabbix_errlog(ERR_Z3005, err, zbx_oci_error(err), sql);
OCI_DBfree_result(result);
result = (OCI_SERVER_NORMAL == OCI_DBserver_status() ? NULL : (DB_RESULT)ZBX_DB_DOWN);
}
#elif defined(HAVE_POSTGRESQL)
result = zbx_malloc(NULL, sizeof(ZBX_PG_DB_RESULT));
result->pg_result = PQexec(conn, sql);
result->values = NULL;
result->cursor = 0;
result->row_num = 0;
if (NULL == result->pg_result)
zabbix_errlog(ERR_Z3005, 0, "result is NULL", sql);
if (PGRES_TUPLES_OK != PQresultStatus(result->pg_result))
{
error = zbx_dsprintf(error, "%s:%s",
PQresStatus(PQresultStatus(result->pg_result)),
PQresultErrorMessage(result->pg_result));
zabbix_errlog(ERR_Z3005, 0, error, sql);
zbx_free(error);
PG_DBfree_result(result);
result = (CONNECTION_OK == PQstatus(conn) ? NULL : (DB_RESULT)ZBX_DB_DOWN);
}
else /* init rownum */
result->row_num = PQntuples(result->pg_result);
#elif defined(HAVE_SQLITE3)
if (0 == txn_level && PHP_MUTEX_OK != php_sem_acquire(&sqlite_access))
{
zabbix_log(LOG_LEVEL_CRIT, "ERROR: cannot create lock on SQLite3 database");
exit(FAIL);
}
result = zbx_malloc(NULL, sizeof(ZBX_SQ_DB_RESULT));
result->curow = 0;
lbl_get_table:
if (SQLITE_OK != (ret = sqlite3_get_table(conn,sql, &result->data, &result->nrow, &result->ncolumn, &error)))
{
if (SQLITE_BUSY == ret)
goto lbl_get_table;
zabbix_errlog(ERR_Z3005, 0, error, sql);
sqlite3_free(error);
SQ_DBfree_result(result);
switch (ret)
{
case SQLITE_ERROR: /* SQL error or missing database; assuming SQL error, because if we
are this far into execution, zbx_db_connect() was successful */
case SQLITE_NOMEM: /* a malloc() failed */
case SQLITE_MISMATCH: /* data type mismatch */
result = NULL;
break;
default:
result = (DB_RESULT)ZBX_DB_DOWN;
break;
}
}
if (0 == txn_level)
php_sem_release(&sqlite_access);
#endif /* HAVE_SQLITE3 */
if (0 != CONFIG_LOG_SLOW_QUERIES)
{
sec = zbx_time() - sec;
if (sec > (double)CONFIG_LOG_SLOW_QUERIES / 1000.0)
zabbix_log(LOG_LEVEL_WARNING, "slow query: " ZBX_FS_DBL " sec, \"%s\"", sec, sql);
}
if (NULL == result && 0 < txn_level)
{
zabbix_log(LOG_LEVEL_DEBUG, "query [%s] failed, setting transaction as failed", sql);
txn_error = 1;
}
clean:
zbx_free(sql);
return result;
}
示例14: SlonMain
/* ----------
* SlonMain
* ----------
*/
static void
SlonMain(void)
{
PGresult *res;
SlonDString query;
int i,
n;
PGconn *startup_conn;
slon_pid = getpid();
#ifndef WIN32
slon_worker_pid = slon_pid;
#endif
if (pthread_mutex_init(&slon_wait_listen_lock, NULL) < 0)
{
slon_log(SLON_FATAL, "main: pthread_mutex_init() failed - %s\n",
strerror(errno));
slon_abort();
}
if (pthread_cond_init(&slon_wait_listen_cond, NULL) < 0)
{
slon_log(SLON_FATAL, "main: pthread_cond_init() failed - %s\n",
strerror(errno));
slon_abort();
}
/*
* Dump out current configuration - all elements of the various arrays...
*/
dump_configuration();
/*
* Connect to the local database to read the initial configuration
*/
startup_conn = PQconnectdb(rtcfg_conninfo);
if (startup_conn == NULL)
{
slon_log(SLON_FATAL, "main: PQconnectdb() failed - sleep 10s\n");
sleep(10);
slon_retry();
exit(-1);
}
if (PQstatus(startup_conn) != CONNECTION_OK)
{
slon_log(SLON_FATAL, "main: Cannot connect to local database - %s - sleep 10s\n",
PQerrorMessage(startup_conn));
PQfinish(startup_conn);
sleep(10);
slon_retry();
exit(-1);
}
/*
* Get our local node ID
*/
rtcfg_nodeid = db_getLocalNodeId(startup_conn);
if (rtcfg_nodeid < 0)
{
slon_log(SLON_FATAL, "main: Node is not initialized properly - sleep 10s\n");
sleep(10);
slon_retry();
exit(-1);
}
if (db_checkSchemaVersion(startup_conn) < 0)
{
slon_log(SLON_FATAL, "main: Node has wrong Slony-I schema or module version loaded\n");
slon_abort();
}
slon_log(SLON_CONFIG, "main: local node id = %d\n", rtcfg_nodeid);
dstring_init(&query);
slon_mkquery(&query, "select %s.slon_node_health_check();", rtcfg_namespace);
res = PQexec(startup_conn, dstring_data(&query));
if (PQresultStatus(res) != PGRES_TUPLES_OK)
{
slon_log(SLON_FATAL, "could not call slon_node_health_check() - %",
PQresultErrorMessage(res));
slon_abort();
}
else
{
if (PQntuples(res) != 1)
{
slon_log(SLON_FATAL,
"query '%s' returned %d rows (expected 1)\n",
query, PQntuples(res));
slon_abort();
}
else
{
if (*(PQgetvalue(res, 0, 0)) == 'f')
{
slon_log(SLON_FATAL,
"slon_node_health_check() returned false - fatal health problem!\n%s\nREPAIR CONFIG may be helpful to rectify this problem\n",
//.........这里部分代码省略.........
示例15: main
int
main(int argc, char **argv)
{
char *in_filename,
*out_filename,
*out_filename2;
char *database;
Oid lobjOid;
PGconn *conn;
PGresult *res;
if (argc != 5)
{
fprintf(stderr, "Usage: %s database_name in_filename out_filename out_filename2\n",
argv[0]);
exit(1);
}
database = argv[1];
in_filename = argv[2];
out_filename = argv[3];
out_filename2 = argv[4];
/*
* set up the connection
*/
conn = PQsetdb(NULL, NULL, NULL, NULL, database);
/* check to see that the backend connection was successfully made */
if (PQstatus(conn) != CONNECTION_OK)
{
fprintf(stderr, "Connection to database failed: %s",
PQerrorMessage(conn));
exit_nicely(conn);
}
res = PQexec(conn, "begin");
PQclear(res);
printf("importing file \"%s\" ...\n", in_filename);
/* lobjOid = importFile(conn, in_filename); */
lobjOid = lo_import(conn, in_filename);
if (lobjOid == 0)
fprintf(stderr, "%s\n", PQerrorMessage(conn));
else
{
printf("\tas large object %u.\n", lobjOid);
printf("picking out bytes 4294967000-4294968000 of the large object\n");
pickout(conn, lobjOid, 4294967000U, 1000);
printf("overwriting bytes 4294967000-4294968000 of the large object with X's\n");
overwrite(conn, lobjOid, 4294967000U, 1000);
printf("exporting large object to file \"%s\" ...\n", out_filename);
/* exportFile(conn, lobjOid, out_filename); */
if (lo_export(conn, lobjOid, out_filename) < 0)
fprintf(stderr, "%s\n", PQerrorMessage(conn));
printf("truncating to 3294968000 bytes\n");
my_truncate(conn, lobjOid, 3294968000U);
printf("exporting truncated large object to file \"%s\" ...\n", out_filename2);
if (lo_export(conn, lobjOid, out_filename2) < 0)
fprintf(stderr, "%s\n", PQerrorMessage(conn));
}
res = PQexec(conn, "end");
PQclear(res);
PQfinish(conn);
return 0;
}