Get rid of the last remaining uses of var_is_rel(), to wit some debugging
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 25 Aug 2008 20:20:30 +0000 (20:20 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 25 Aug 2008 20:20:30 +0000 (20:20 +0000)
checks in ExecIndexBuildScanKeys() that were inadequate anyway: it's better
to verify the correct varno on an expected index key, not just reject OUTER
and INNER.

This makes the entire current contents of nodeFuncs.c dead code.  I'll be
replacing it with some other stuff later, as per recent proposal.

src/backend/executor/nodeBitmapIndexscan.c
src/backend/executor/nodeIndexscan.c
src/include/executor/nodeIndexscan.h

index e7a81b4d8e2dcfdf006547df0cda3077ce5fa28d..30f0e158de3f9fac7be13f516b98e8da94cbb668 100644 (file)
@@ -275,6 +275,7 @@ ExecInitBitmapIndexScan(BitmapIndexScan *node, EState *estate, int eflags)
         */
        ExecIndexBuildScanKeys((PlanState *) indexstate,
                                                   indexstate->biss_RelationDesc,
+                                                  node->scan.scanrelid,
                                                   node->indexqual,
                                                   &indexstate->biss_ScanKeys,
                                                   &indexstate->biss_NumScanKeys,
index c6fcc015b2165aa6e1e019ce7d4a30102938932c..4d106ec9819633ed9a5203ecb7eaf50d423418fa 100644 (file)
@@ -29,7 +29,6 @@
 #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"
@@ -576,6 +575,7 @@ ExecInitIndexScan(IndexScan *node, EState *estate, int eflags)
         */
        ExecIndexBuildScanKeys((PlanState *) indexstate,
                                                   indexstate->iss_RelationDesc,
+                                                  node->scan.scanrelid,
                                                   node->indexqual,
                                                   &indexstate->iss_ScanKeys,
                                                   &indexstate->iss_NumScanKeys,
@@ -653,6 +653,7 @@ ExecInitIndexScan(IndexScan *node, EState *estate, int eflags)
  *
  * 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:
@@ -668,8 +669,8 @@ ExecInitIndexScan(IndexScan *node, EState *estate, int eflags)
  * 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)
 {
@@ -753,7 +754,7 @@ ExecIndexBuildScanKeys(PlanState *planstate, Relation index, List *quals,
                        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;
@@ -837,7 +838,7 @@ ExecIndexBuildScanKeys(PlanState *planstate, Relation index, List *quals,
                                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;
@@ -942,7 +943,7 @@ ExecIndexBuildScanKeys(PlanState *planstate, Relation index, List *quals,
                        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;
@@ -1003,7 +1004,7 @@ ExecIndexBuildScanKeys(PlanState *planstate, Relation index, List *quals,
                        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;
index 615b78bd65f6bc9bc60da37c361479058393fc88..f239cc598e7871ebd49d7c6286873c51a2f3fa40 100644 (file)
@@ -26,6 +26,7 @@ extern void ExecIndexReScan(IndexScanState *node, ExprContext *exprCtxt);
 
 /* routines exported to share code with nodeBitmapIndexscan.c */
 extern void ExecIndexBuildScanKeys(PlanState *planstate, Relation index,
+                                          Index scanrelid,
                                           List *quals, ScanKey *scanKeys, int *numScanKeys,
                                           IndexRuntimeKeyInfo **runtimeKeys, int *numRuntimeKeys,
                                           IndexArrayKeyInfo **arrayKeys, int *numArrayKeys);