#include "access/relscan.h"
#include "executor/execdebug.h"
#include "executor/nodeIndexscan.h"
-#include "nodes/nodeFuncs.h"
#include "optimizer/clauses.h"
#include "utils/array.h"
#include "utils/lsyscache.h"
*/
ExecIndexBuildScanKeys((PlanState *) indexstate,
indexstate->iss_RelationDesc,
+ node->scan.scanrelid,
node->indexqual,
&indexstate->iss_ScanKeys,
&indexstate->iss_NumScanKeys,
*
* planstate: executor state node we are working for
* index: the index we are building scan keys for
+ * scanrelid: varno of the index's relation within current query
* quals: indexquals expressions
*
* Output params are:
* ScalarArrayOpExpr quals are not supported.
*/
void
-ExecIndexBuildScanKeys(PlanState *planstate, Relation index, List *quals,
- ScanKey *scanKeys, int *numScanKeys,
+ExecIndexBuildScanKeys(PlanState *planstate, Relation index, Index scanrelid,
+ List *quals, ScanKey *scanKeys, int *numScanKeys,
IndexRuntimeKeyInfo **runtimeKeys, int *numRuntimeKeys,
IndexArrayKeyInfo **arrayKeys, int *numArrayKeys)
{
Assert(leftop != NULL);
if (!(IsA(leftop, Var) &&
- var_is_rel((Var *) leftop)))
+ ((Var *) leftop)->varno == scanrelid))
elog(ERROR, "indexqual doesn't have key on left side");
varattno = ((Var *) leftop)->varattno;
Assert(leftop != NULL);
if (!(IsA(leftop, Var) &&
- var_is_rel((Var *) leftop)))
+ ((Var *) leftop)->varno == scanrelid))
elog(ERROR, "indexqual doesn't have key on left side");
varattno = ((Var *) leftop)->varattno;
Assert(leftop != NULL);
if (!(IsA(leftop, Var) &&
- var_is_rel((Var *) leftop)))
+ ((Var *) leftop)->varno == scanrelid))
elog(ERROR, "indexqual doesn't have key on left side");
varattno = ((Var *) leftop)->varattno;
Assert(leftop != NULL);
if (!(IsA(leftop, Var) &&
- var_is_rel((Var *) leftop)))
+ ((Var *) leftop)->varno == scanrelid))
elog(ERROR, "NullTest indexqual has wrong key");
varattno = ((Var *) leftop)->varattno;