Changing the result of ExecutorRun - Mailing list pgsql-hackers

From Tom Lane
Subject Changing the result of ExecutorRun
Date
Msg-id 5344.1225471174@sss.pgh.pa.us
Whole thread Raw
Responses Re: Changing the result of ExecutorRun
List pgsql-hackers
Currently, the result of ExecutorRun is typically NULL, but if it's
executing a SELECT and you pass a limiting count and the SELECT stops
early because of that limit, then you get back a TupleTableSlot
containing the last tuple processed.

This is pretty ugly.

There is only one call site that even examines the result, and that's
functions.c.  With the rewrite that I plan to commit shortly,
functions.c doesn't actually use the slot contents --- it expects
the tuple to have been put into a tuplestore by the DestReceiver
mechanism.  It's currently checking the result to determine whether
it obtained a tuple or not, but that could easily be reported by the
DestReceiver code (... or we could make tuplestores a bit more helpful
about reporting if they have any content or not).

So I'm thinking that we could and should make ExecutorRun's API a little
less baroque.  Two possibilities are:

* Just return void.  (Then we need a few more lines in functions.c.)

* Return the count of tuples processed, probably as a long since that's
what the input limit-count is.  There are potential overflow issues with
this definition on 32-bit machines, though that's not going to affect
functions.c since it passes a limit of 1 tuple in the cases where it
needs to examine the result, and no one else presently cares at all.
But the possibility of overflow might limit the usefulness of this
definition in other scenarios.

Comments?  I'm leaning a bit towards the first way because minor
convenience for functions.c doesn't seem to justify bending a core
executor API.
        regards, tom lane


pgsql-hackers by date:

Previous
From: "Kevin Grittner"
Date:
Subject: Re: Enabling archive_mode without restart
Next
From: Teodor Sigaev
Date:
Subject: B-Tree emulation for GIN