main(int argc, char **argv) { int ret; pq_session session; ret = pq_init(&session); if(ret) printf("pq_init failed.\n"); char conn_str[] = "host=localhost dbname=pagila"; ret = pq_connect(&session, conn_str, strlen(conn_str)); if(ret) printf("pq_connect failed.\n"); pq_check_connection(&session); ret = pq_execute(&session, "select current_date;"); if(ret) printf("pq_execute failed.\n"); ret = pq_fetch(&session); if(ret) printf("pq_finish failed.\n"); pq_finish(&session); pq_end(&session); }
int conn_poll(connectionObject *self) { int res = PSYCO_POLL_ERROR; Dprintf("conn_poll: status = %d", self->status); switch (self->status) { case CONN_STATUS_SETUP: Dprintf("conn_poll: status -> CONN_STATUS_SETUP"); self->status = CONN_STATUS_CONNECTING; res = PSYCO_POLL_WRITE; break; case CONN_STATUS_CONNECTING: Dprintf("conn_poll: status -> CONN_STATUS_CONNECTING"); res = _conn_poll_connecting(self); if (res == PSYCO_POLL_OK && self->async) { res = _conn_poll_setup_async(self); } break; case CONN_STATUS_DATESTYLE: Dprintf("conn_poll: status -> CONN_STATUS_DATESTYLE"); res = _conn_poll_setup_async(self); break; case CONN_STATUS_READY: case CONN_STATUS_BEGIN: case CONN_STATUS_PREPARED: Dprintf("conn_poll: status -> CONN_STATUS_*"); res = _conn_poll_query(self); if (res == PSYCO_POLL_OK && self->async && self->async_cursor) { cursorObject *curs; /* An async query has just finished: parse the tuple in the * target cursor. */ if (!(curs = _conn_get_async_cursor(self))) { res = PSYCO_POLL_ERROR; break; } curs_set_result(curs, self->pgres); self->pgres = NULL; /* fetch the tuples (if there are any) and build the result. We * don't care if pq_fetch return 0 or 1, but if there was an error, * we want to signal it to the caller. */ if (pq_fetch(curs, 0) == -1) { res = PSYCO_POLL_ERROR; } /* We have finished with our async_cursor */ Py_DECREF(curs); Py_CLEAR(self->async_cursor); } break; default: Dprintf("conn_poll: in unexpected state"); res = PSYCO_POLL_ERROR; } Dprintf("conn_poll: returning %d", res); return res; }
int conn_poll(connectionObject *self) { int res = PSYCO_POLL_ERROR; Dprintf("conn_poll: status = %d", self->status); switch (self->status) { case CONN_STATUS_SETUP: Dprintf("conn_poll: status -> CONN_STATUS_CONNECTING"); self->status = CONN_STATUS_CONNECTING; res = PSYCO_POLL_WRITE; break; case CONN_STATUS_CONNECTING: res = _conn_poll_connecting(self); if (res == PSYCO_POLL_OK && self->async) { res = _conn_poll_setup_async(self); } break; case CONN_STATUS_DATESTYLE: res = _conn_poll_setup_async(self); break; case CONN_STATUS_READY: case CONN_STATUS_BEGIN: case CONN_STATUS_PREPARED: res = _conn_poll_query(self); if (res == PSYCO_POLL_OK && self->async && self->async_cursor) { /* An async query has just finished: parse the tuple in the * target cursor. */ cursorObject *curs; PyObject *py_curs = PyWeakref_GetObject(self->async_cursor); if (Py_None == py_curs) { pq_clear_async(self); PyErr_SetString(InterfaceError, "the asynchronous cursor has disappeared"); res = PSYCO_POLL_ERROR; break; } curs = (cursorObject *)py_curs; CLEARPGRES(curs->pgres); curs->pgres = pq_get_last_result(self); /* fetch the tuples (if there are any) and build the result. We * don't care if pq_fetch return 0 or 1, but if there was an error, * we want to signal it to the caller. */ if (pq_fetch(curs, 0) == -1) { res = PSYCO_POLL_ERROR; } /* We have finished with our async_cursor */ Py_CLEAR(self->async_cursor); } break; default: Dprintf("conn_poll: in unexpected state"); res = PSYCO_POLL_ERROR; } return res; }