postgres_fdw: Fix bug in checking of return value of PQsendQuery().
authorFujii Masao <[email protected]>
Thu, 21 Jul 2022 13:52:50 +0000 (22:52 +0900)
committerFujii Masao <[email protected]>
Fri, 22 Jul 2022 02:59:38 +0000 (11:59 +0900)
When postgres_fdw begins an asynchronous data fetch, it submits FETCH query
by using PQsendQuery(). If PQsendQuery() fails and returns 0, postgres_fdw
should report an error. But, previously, postgres_fdw reported an error
only when the return value is less than 0, though PQsendQuery() never return
the values other than 0 and 1. Therefore postgres_fdw could not handle
the failure to send FETCH query in an asynchronous data fetch.

This commit fixes postgres_fdw so that it reports an error
when PQsendQuery() returns 0.

Back-patch to v14 where asynchronous execution was supported in postgres_fdw.

Author: Fujii Masao
Reviewed-by: Japin Li, Tom Lane
Discussion: https://postgr.es/m/b187a7cf-d4e3-5a32-4d01-8383677797f3@oss.nttdata.com

contrib/postgres_fdw/postgres_fdw.c

index f3b93954eeaed80df1e8aab9e02054262366fd40..048db542d34e8c8b12dccc8668d83cc8427b931e 100644 (file)
@@ -7070,7 +7070,7 @@ fetch_more_data_begin(AsyncRequest *areq)
    snprintf(sql, sizeof(sql), "FETCH %d FROM c%u",
             fsstate->fetch_size, fsstate->cursor_number);
 
-   if (PQsendQuery(fsstate->conn, sql) < 0)
+   if (!PQsendQuery(fsstate->conn, sql))
        pgfdw_report_error(ERROR, NULL, fsstate->conn, false, fsstate->query);
 
    /* Remember that the request is in process */