Fix using indices in OR.
EXPLAIN all indices used.
This commit is contained in:
parent
1f00f0dc2e
commit
34680930d5
@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/explain.c,v 1.26 1998/11/08 19:38:34 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/explain.c,v 1.27 1998/11/22 10:48:34 vadim Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -217,9 +217,14 @@ explain_outNode(StringInfo str, Plan *plan, int indent, ExplainState *es)
|
||||
{
|
||||
case T_IndexScan:
|
||||
appendStringInfo(str, " using ");
|
||||
l = ((IndexScan *) plan)->indxid;
|
||||
relation = RelationIdCacheGetRelation((int) lfirst(l));
|
||||
appendStringInfo(str, (RelationGetRelationName(relation))->data);
|
||||
i = 0;
|
||||
foreach (l, ((IndexScan *) plan)->indxid)
|
||||
{
|
||||
relation = RelationIdCacheGetRelation((int) lfirst(l));
|
||||
if (++i > 1)
|
||||
appendStringInfo(str, ", ");
|
||||
appendStringInfo(str, (RelationGetRelationName(relation))->data);
|
||||
}
|
||||
case T_SeqScan:
|
||||
if (((Scan *) plan)->scanrelid > 0)
|
||||
{
|
||||
|
@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/executor/nodeIndexscan.c,v 1.27 1998/09/01 04:28:32 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/executor/nodeIndexscan.c,v 1.28 1998/11/22 10:48:36 vadim Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -154,7 +154,7 @@ IndexNext(IndexScan *node)
|
||||
prev_index++)
|
||||
{
|
||||
scanstate->cstate.cs_ExprContext->ecxt_scantuple = slot;
|
||||
if (ExecQual(nth(prev_index, node->indxqual),
|
||||
if (ExecQual(nth(prev_index, node->indxqualorig),
|
||||
scanstate->cstate.cs_ExprContext))
|
||||
{
|
||||
prev_matches = true;
|
||||
|
@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.49 1998/10/22 13:52:20 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.50 1998/11/22 10:48:38 vadim Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -247,6 +247,7 @@ _copyIndexScan(IndexScan *from)
|
||||
*/
|
||||
newnode->indxid = listCopy(from->indxid);
|
||||
Node_Copy(from, newnode, indxqual);
|
||||
Node_Copy(from, newnode, indxqualorig);
|
||||
Node_Copy(from, newnode, indxstate);
|
||||
|
||||
return newnode;
|
||||
|
@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/nodes/outfuncs.c,v 1.47 1998/10/22 13:52:21 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/nodes/outfuncs.c,v 1.48 1998/11/22 10:48:39 vadim Exp $
|
||||
*
|
||||
* NOTES
|
||||
* Every (plan) node in POSTGRES has an associated "out" routine which
|
||||
@ -517,6 +517,9 @@ _outIndexScan(StringInfo str, IndexScan *node)
|
||||
appendStringInfo(str, " :indxqual ");
|
||||
_outNode(str, node->indxqual);
|
||||
|
||||
appendStringInfo(str, " :indxqualorig ");
|
||||
_outNode(str, node->indxqualorig);
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.38 1998/10/22 13:52:22 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.39 1998/11/22 10:48:40 vadim Exp $
|
||||
*
|
||||
* NOTES
|
||||
* Most of the read functions for plan nodes are tested. (In fact, they
|
||||
@ -546,6 +546,9 @@ _readIndexScan()
|
||||
token = lsptok(NULL, &length); /* eat :indxqual */
|
||||
local_node->indxqual = nodeRead(true); /* now read it */
|
||||
|
||||
token = lsptok(NULL, &length); /* eat :indxqualorig */
|
||||
local_node->indxqualorig = nodeRead(true); /* now read it */
|
||||
|
||||
return local_node;
|
||||
}
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.32 1998/09/01 04:29:47 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.33 1998/11/22 10:48:43 vadim Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -63,7 +63,7 @@ static Node *fix_indxqual_references(Node *clause, Path *index_path);
|
||||
static Temp *make_temp(List *tlist, List *keys, Oid *operators,
|
||||
Plan *plan_node, int temptype);
|
||||
static IndexScan *make_indexscan(List *qptlist, List *qpqual, Index scanrelid,
|
||||
List *indxid, List *indxqual, Cost cost);
|
||||
List *indxid, List *indxqual, List *indxqualorig, Cost cost);
|
||||
static NestLoop *make_nestloop(List *qptlist, List *qpqual, Plan *lefttree,
|
||||
Plan *righttree);
|
||||
static HashJoin *make_hashjoin(List *tlist, List *qpqual,
|
||||
@ -405,6 +405,7 @@ create_indexscan_node(IndexPath *best_path,
|
||||
lfirsti(best_path->path.parent->relids),
|
||||
best_path->indexid,
|
||||
fixed_indxqual,
|
||||
indxqual,
|
||||
best_path->path.path_cost);
|
||||
|
||||
return scan_node;
|
||||
@ -937,6 +938,7 @@ make_indexscan(List *qptlist,
|
||||
Index scanrelid,
|
||||
List *indxid,
|
||||
List *indxqual,
|
||||
List *indxqualorig,
|
||||
Cost cost)
|
||||
{
|
||||
IndexScan *node = makeNode(IndexScan);
|
||||
@ -951,6 +953,7 @@ make_indexscan(List *qptlist,
|
||||
node->scan.scanrelid = scanrelid;
|
||||
node->indxid = indxid;
|
||||
node->indxqual = indxqual;
|
||||
node->indxqualorig = indxqualorig;
|
||||
node->scan.scanstate = (CommonScanState *) NULL;
|
||||
|
||||
return node;
|
||||
|
@ -229,7 +229,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/parser/Attic/gram.c,v 2.48 1998/10/30 04:54:01 scrappy Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/parser/Attic/gram.c,v 2.49 1998/11/22 10:48:45 vadim Exp $
|
||||
*
|
||||
* HISTORY
|
||||
* AUTHOR DATE MAJOR EVENT
|
||||
|
Loading…
x
Reference in New Issue
Block a user