From: | Noah Misch <noah(at)leadboat(dot)com> |
---|---|
To: | Robert Haas <robertmhaas(at)gmail(dot)com> |
Cc: | Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>, Kouhei Kaigai <kaigai(at)ak(dot)jp(dot)nec(dot)com>, Haribabu Kommi <kommi(dot)haribabu(at)gmail(dot)com>, Gavin Flower <GavinFlower(at)archidevsys(dot)co(dot)nz>, Jeff Davis <pgsql(at)j-davis(dot)com>, Andres Freund <andres(at)2ndquadrant(dot)com>, Amit Langote <amitlangote09(at)gmail(dot)com>, Amit Langote <Langote_Amit_f8(at)lab(dot)ntt(dot)co(dot)jp>, Fabrízio Mello <fabriziomello(at)gmail(dot)com>, Thom Brown <thom(at)linux(dot)com>, Stephen Frost <sfrost(at)snowman(dot)net>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Parallel Seq Scan |
Date: | 2015-10-24 01:38:28 |
Message-ID: | 20151024013828.GA421105@tornado.leadboat.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Thu, Oct 22, 2015 at 11:59:58PM -0400, Robert Haas wrote:
> On Thu, Oct 15, 2015 at 8:23 PM, Noah Misch <noah(at)leadboat(dot)com> wrote:
> > Agreed. More specifically, I had in mind for copyParamList() to check the
> > mask while e.g. ExecEvalParamExtern() would either check nothing or merely
> > assert that any mask included the requested parameter. It would be tricky to
> > verify that as safe, so ...
> >
> >> Would it work to define this as "if non-NULL,
> >> params lacking a 1-bit may be safely ignored"? Or some other tweak
> >> that basically says that you don't need to care about this, but you
> >> can if you want to.
> >
> > ... this is a better specification.
>
> Here's an attempt to implement that.
Since that specification permits ParamListInfo consumers to ignore paramMask,
the plpgsql_param_fetch() change from copy-paramlistinfo-fixes.patch is still
formally required.
> @@ -50,6 +51,7 @@ copyParamList(ParamListInfo from)
> retval->parserSetup = NULL;
> retval->parserSetupArg = NULL;
> retval->numParams = from->numParams;
> + retval->paramMask = bms_copy(from->paramMask);
Considering that this function squashes the masked params, I wonder if it
should just store NULL here.
>
> for (i = 0; i < from->numParams; i++)
> {
> @@ -58,6 +60,20 @@ copyParamList(ParamListInfo from)
> int16 typLen;
> bool typByVal;
>
> + /*
> + * Ignore parameters we don't need, to save cycles and space, and
> + * in case the fetch hook might fail.
> + */
> + if (retval->paramMask != NULL &&
> + !bms_is_member(i, retval->paramMask))
The "and in case the fetch hook might fail" in this comment and its clones is
contrary to the above specification. Under that specification, it would be a
bug in the ParamListInfo producer to rely on consumers checking paramMask.
Saving cycles/space would be the spec-approved paramMask use.
Consider adding an XXX comment to the effect that cursors ought to stop using
unshared param lists. The leading comment at setup_unshared_param_list() is a
good home for such an addition.
From | Date | Subject | |
---|---|---|---|
Next Message | Dave Cramer | 2015-10-24 01:50:01 | Re: [HACKERS] JDBC driver debug out? |
Previous Message | Dave Cramer | 2015-10-24 01:32:26 | Re: JDBC driver debug out? |