postgres_fdw: make_tuple_from_result_row should set cur_attno for ctid.
authorRobert Haas <rhaas@postgresql.org>
Tue, 15 Mar 2016 20:51:56 +0000 (16:51 -0400)
committerRobert Haas <rhaas@postgresql.org>
Tue, 15 Mar 2016 20:51:56 +0000 (16:51 -0400)
There's no reason for this function to do this for every other
attribute number and omit it for CTID, especially since
conversion_error_callback has code to handle that case.  This seems
to be an oversight in commit e690b9515072fd7767fdeca5c54166f6a77733bc.

Etsuro Fujita

contrib/postgres_fdw/postgres_fdw.c

index 96875b418486fcc1d1739d2af3a5a864e65f367a..e446cc5645a293717e3df22856d09d5e4cb52d2f 100644 (file)
@@ -3803,18 +3803,17 @@ make_tuple_from_result_row(PGresult *res,
                        valstr = PQgetvalue(res, row, j);
 
                /* convert value to internal representation */
+               errpos.cur_attno = i;
                if (i > 0)
                {
                        /* ordinary column */
                        Assert(i <= tupdesc->natts);
                        nulls[i - 1] = (valstr == NULL);
                        /* Apply the input function even to nulls, to support domains */
-                       errpos.cur_attno = i;
                        values[i - 1] = InputFunctionCall(&attinmeta->attinfuncs[i - 1],
                                                                                          valstr,
                                                                                          attinmeta->attioparams[i - 1],
                                                                                          attinmeta->atttypmods[i - 1]);
-                       errpos.cur_attno = 0;
                }
                else if (i == SelfItemPointerAttributeNumber)
                {
@@ -3827,6 +3826,7 @@ make_tuple_from_result_row(PGresult *res,
                                ctid = (ItemPointer) DatumGetPointer(datum);
                        }
                }
+               errpos.cur_attno = 0;
 
                j++;
        }