Sto lavorando con l'API C PostgreSQL. Leggendo il documentation si dice che una query è finita quando PQgetResult restituisce NULL e PQgetResult si bloccherà se PQisBusy non restituisce 0. Tuttavia PQisBusy restituisce 1 se non c'è più input, quindi non posso chiamare PQgetResult e ottenere il NULL. Pertanto non posso sapere se la query è finita. C'è un altro modo per sapere se la query è stata eseguita? Ho frainteso l'API asincrona?Postgres Async API che rileva la fine della query
---- ----- modificare
L'idea di base come codice C è:
PQsendQuery(conn, query)
while(true)
{
PQconsumeInput(conn)
if(PQisBusy(conn) == 0)
{
PGresult* res = PQgetResult(conn);
if(res)
{
//print result
}
else
{
//res == NULL
//indicates query is over
break;
}
}
}
Il risultato verrà stampato, ma il ciclo non termina. Perché PQisBusy restituisce 0 solo una volta.
Potrebbe valere la pena ideare questo fuori con il codice che mostra quello che stai facendo. –
Penso che PQgetResult controlli e attenda il segnale di occupato prima di restituire il risultato. Quindi potrebbe non essere necessario se (PQisBusy (conn) == 0) controllare. –
@MuhammadUsama il punto del codice è che non può mai bloccare, quindi l'asincrono. So che fare l'I/O asincrono in un ciclo occupato è inutile ma avevo bisogno di un esempio minimo. – JustMaximumPower