Re: Missing conversion error handling in postgres_fdw

From: Robert Haas <robertmhaas(at)gmail(dot)com>
To: Etsuro Fujita <fujita(dot)etsuro(at)lab(dot)ntt(dot)co(dot)jp>
Cc: "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Missing conversion error handling in postgres_fdw
Date: 2016-03-15 20:55:14
Message-ID: CA+TgmobZ9UJkoXmwFG2g5TLVU8x1-roZs6Kq56dzmDyDpi6OMA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Tue, Mar 15, 2016 at 4:06 AM, Etsuro Fujita
<fujita(dot)etsuro(at)lab(dot)ntt(dot)co(dot)jp> wrote:
> I noticed that this in make_tuple_from_result_row does conversion error
> handling only for the ordinary-column case (ie, errpos.cur_attno is set
> for that case, but not for the ctid case).
>
> /* convert value to internal representation */
> 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)
> {
> /* ctid --- note we ignore any other system column in result */
> if (valstr != NULL)
> {
> Datum datum;
>
> datum = DirectFunctionCall1(tidin, CStringGetDatum(valstr));
> ctid = (ItemPointer) DatumGetPointer(datum);
> }
> }
>
> I think errpos.cur_attno should be set for the ctid case as well.
> Attached is a patch for that.

Hmm, I'd say you are right. Committed.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Corey Huinker 2016-03-15 21:10:50 Re: Soliciting Feedback on Improving Server-Side Programming Documentation
Previous Message Robert Haas 2016-03-15 20:44:12 Re: Re: [COMMITTERS] pgsql: Only try to push down foreign joins if the user mapping OIDs mat