Re: [HACKERS] OR clause - check code - Mailing list pgsql-hackers

From Vadim Mikheev
Subject Re: [HACKERS] OR clause - check code
Date
Msg-id 35C30159.673D85FF@krs.ru
Whole thread Raw
In response to OR clause - check code  (Bruce Momjian <maillist@candle.pha.pa.us>)
Responses Re: [HACKERS] OR clause - check code  (Bruce Momjian <maillist@candle.pha.pa.us>)
List pgsql-hackers
Bruce Momjian wrote:
>
> Vadim, would you please review this code, and let me know if it is
> correct.  I am unsure about the calls to ExecStoreTuple(), ExecQual()
> (is proper context used?), and placement of ReleaseBuffer().  Do I need
   ^^^^^^^^^^^^^^^^^^^^^^
Yes.
execScan.c:ExecScan() sets econtext->ecxt_scantuple = slot <--
returned by Seq/Index scan -- before check Scan qual and
so econtext->ecxt_scantuple already points to the slot where
you store new tuple. It seems that no one change this pointer...

But did you try to use multi-index scan in inner plan of
Nestloop? It seems that you should add this to ExecIndexReScan():

if (exprCtxt != NULL)
    node->scan.scanstate->cstate.cs_ExprContext->ecxt_outertuple =
        exprCtxt->ecxt_outertuple;

Also, ExecIndexReScan() evaluates run-time keys for _current_
index scan only - this must be changed and indexstate->iss_IndexPtr
must be setted to 0.

> to free the tuple buffer if I decide it doesn't meet my ExecQual test?

Yes, you have to free buffer.

Vadim

pgsql-hackers by date:

Previous
From: Bruce Momjian
Date:
Subject: OR clause - check code
Next
From: Bruce Momjian
Date:
Subject: OR with multi-key indexes