> On Wed, Apr 22, 2015 at 10:48 PM, Kouhei Kaigai <kaigai@ak.jp.nec.com> wrote:
> >> + else if (scan->scanrelid == 0 &&
> >> + (IsA(scan, ForeignScan) || IsA(scan, CustomScan)))
> >> + varno = INDEX_VAR;
> >>
> >> Suppose scan->scanrelid == 0 but the scan type is something else? Is
> >> that legal? Is varno == 0 the correct outcome in that case?
> >>
> > Right now, no other scan type has capability to return a tuples
> > with flexible type/attributes more than static definition.
> > I think it is a valid restriction that only foreign/custom-scan
> > can have scanrelid == 0.
>
> But the code as you've written it doesn't enforce any such
> restriction. It just spends CPU cycles testing for a condition which,
> to the best of your knowledge, will never happen.
>
> If it's really a can't happen condition, how about checking it via an Assert()?
>
> else if (scan->scanrelid == 0)
> {
> Assert(IsA(scan, ForeignScan) || IsA(scan, CustomScan));
> varno = INDEX_VAR;
> }
>
Thanks for your suggestion. I'd like to use this idea on the next patch.
--
NEC Business Creation Division / PG-Strom Project
KaiGai Kohei <kaigai@ak.jp.nec.com>