postgres_fdw: Remove redundancy in postgresAcquireSampleRowsFunc().
Previously, in the loop in postgresAcquireSampleRowsFunc() to iterate fetching rows from a given remote table, we redundantly 1) determined the fetch size by parsing the table's server/table-level options and then 2) constructed the fetch command; remove that redundancy. Author: Etsuro Fujita Reviewed-by: Julien Rouhaud Discussion: https://postgr.es/m/CAPmGK17_urk9qkLV65_iYMFw64z5qhdfhY=tMVV6Jg4KNYx8+w@mail.gmail.com
This commit is contained in:
parent
e72489e101
commit
2a1612104c
|
@ -4490,20 +4490,51 @@ postgresAcquireSampleRowsFunc(Relation relation, int elevel,
|
|||
/* In what follows, do not risk leaking any PGresults. */
|
||||
PG_TRY();
|
||||
{
|
||||
char fetch_sql[64];
|
||||
int fetch_size;
|
||||
ListCell *lc;
|
||||
|
||||
res = pgfdw_exec_query(conn, sql.data);
|
||||
if (PQresultStatus(res) != PGRES_COMMAND_OK)
|
||||
pgfdw_report_error(ERROR, res, conn, false, sql.data);
|
||||
PQclear(res);
|
||||
res = NULL;
|
||||
|
||||
/*
|
||||
* Determine the fetch size. The default is arbitrary, but shouldn't
|
||||
* be enormous.
|
||||
*/
|
||||
fetch_size = 100;
|
||||
foreach(lc, server->options)
|
||||
{
|
||||
DefElem *def = (DefElem *) lfirst(lc);
|
||||
|
||||
if (strcmp(def->defname, "fetch_size") == 0)
|
||||
{
|
||||
fetch_size = strtol(defGetString(def), NULL, 10);
|
||||
break;
|
||||
}
|
||||
}
|
||||
foreach(lc, table->options)
|
||||
{
|
||||
DefElem *def = (DefElem *) lfirst(lc);
|
||||
|
||||
if (strcmp(def->defname, "fetch_size") == 0)
|
||||
{
|
||||
fetch_size = strtol(defGetString(def), NULL, 10);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Construct command to fetch rows from remote. */
|
||||
snprintf(fetch_sql, sizeof(fetch_sql), "FETCH %d FROM c%u",
|
||||
fetch_size, cursor_number);
|
||||
|
||||
/* Retrieve and process rows a batch at a time. */
|
||||
for (;;)
|
||||
{
|
||||
char fetch_sql[64];
|
||||
int fetch_size;
|
||||
int numrows;
|
||||
int i;
|
||||
ListCell *lc;
|
||||
|
||||
/* Allow users to cancel long query */
|
||||
CHECK_FOR_INTERRUPTS();
|
||||
|
@ -4514,33 +4545,7 @@ postgresAcquireSampleRowsFunc(Relation relation, int elevel,
|
|||
* then just adjust rowstoskip and samplerows appropriately.
|
||||
*/
|
||||
|
||||
/* The fetch size is arbitrary, but shouldn't be enormous. */
|
||||
fetch_size = 100;
|
||||
foreach(lc, server->options)
|
||||
{
|
||||
DefElem *def = (DefElem *) lfirst(lc);
|
||||
|
||||
if (strcmp(def->defname, "fetch_size") == 0)
|
||||
{
|
||||
fetch_size = strtol(defGetString(def), NULL, 10);
|
||||
break;
|
||||
}
|
||||
}
|
||||
foreach(lc, table->options)
|
||||
{
|
||||
DefElem *def = (DefElem *) lfirst(lc);
|
||||
|
||||
if (strcmp(def->defname, "fetch_size") == 0)
|
||||
{
|
||||
fetch_size = strtol(defGetString(def), NULL, 10);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Fetch some rows */
|
||||
snprintf(fetch_sql, sizeof(fetch_sql), "FETCH %d FROM c%u",
|
||||
fetch_size, cursor_number);
|
||||
|
||||
res = pgfdw_exec_query(conn, fetch_sql);
|
||||
/* On error, report the original query, not the FETCH. */
|
||||
if (PQresultStatus(res) != PGRES_TUPLES_OK)
|
||||
|
|
Loading…
Reference in New Issue