void error(Pu *L, int id, int line) { L->lasterr = id; if (L->err_handle) { L->err_handle(id, geterrcode(id)); QUIT_SCRIPT; } else { error(L, geterrcode(id), line); } }
/* * Error context callback for inserting parser error location. * * Note that this will be called for *any* error occurring while the * callback is installed. We avoid inserting an irrelevant error location * if the error is a query cancel --- are there any other important cases? */ static void pcb_error_callback(void *arg) { ParseCallbackState *pcbstate = (ParseCallbackState *) arg; if (geterrcode() != ERRCODE_QUERY_CANCELED) (void) parser_errposition(pcbstate->pstate, pcbstate->location); }
/* * Error context callback for inserting parser error location. * * Note that this will be called for *any* error occurring while the * callback is installed. We avoid inserting an irrelevant error location * if the error is a query cancel --- are there any other important cases? */ static void pcb_error_callback(void* arg) { parse_cb_state_s *pcbstate; pcbstate = (parse_cb_state_s*) arg; if (geterrcode() != E_QUERY_CANCELED) (void) parser_errpos(pcbstate->pstate, pcbstate->location); }
static PGresult* wait_for_result(PlxFn *plx_fn, PlxConn *plx_conn) { struct epoll_event listenev; struct epoll_event event; PGconn *pq_conn = plx_conn->pq_conn; PGresult *pg_result = NULL; listenev.events = EPOLLIN; listenev.data.fd = PQsocket(pq_conn); if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, listenev.data.fd, &listenev) < 0) plx_error(plx_fn, "epoll: socket adding failed"); PG_TRY(); { int tmp; while ((tmp = is_pq_busy(pq_conn))) { if (tmp == -1) { epoll_ctl(epoll_fd, EPOLL_CTL_DEL, listenev.data.fd, &listenev); plx_error(plx_fn, "%s", PQerrorMessage(pq_conn)); } CHECK_FOR_INTERRUPTS(); epoll_wait(epoll_fd, &event, 1, 10000); } } PG_CATCH(); { epoll_ctl(epoll_fd, EPOLL_CTL_DEL, listenev.data.fd, &listenev); if (geterrcode() == ERRCODE_QUERY_CANCELED) PQrequestCancel(pq_conn); pg_result = PQgetResult(pq_conn); if (pg_result) PQclear(pg_result); PG_RE_THROW(); } PG_END_TRY(); epoll_ctl(epoll_fd, EPOLL_CTL_DEL, listenev.data.fd, &listenev); return PQgetResult(pq_conn); }