Fix for AND/OR handling.

This commit is contained in:
Bruce Momjian 1998-09-21 15:41:28 +00:00
parent 06b8c8a8b8
commit 748e300317
3 changed files with 26 additions and 15 deletions

View File

@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/indxpath.c,v 1.34 1998/09/01 04:29:33 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/optimizer/path/indxpath.c,v 1.35 1998/09/21 15:41:26 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -1293,8 +1293,13 @@ index_innerjoin(Query *root, RelOptInfo * rel, List *clausegroup_list,
length(clausegroup), length(clausegroup),
&temp_pages, &temp_pages,
&temp_selec); &temp_selec);
pathnode->path.pathtype = T_IndexScan; pathnode->path.pathtype = T_IndexScan;
pathnode->path.parent = rel; pathnode->path.parent = rel;
pathnode->path.p_ordering.ordtype = SORTOP_ORDER;
pathnode->path.p_ordering.ord.sortop = index->ordering;
pathnode->path.keys = NIL; /* not sure about this, bjm 1998/09/21 */
pathnode->indexid = index->relids; pathnode->indexid = index->relids;
pathnode->indexkeys = index->indexkeys; pathnode->indexkeys = index->indexkeys;
pathnode->indexqual = clausegroup; pathnode->indexqual = clausegroup;

View File

@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/orindxpath.c,v 1.11 1998/09/01 04:29:41 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/optimizer/path/orindxpath.c,v 1.12 1998/09/21 15:41:27 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -104,6 +104,15 @@ create_or_index_paths(Query *root,
pathnode->path.pathtype = T_IndexScan; pathnode->path.pathtype = T_IndexScan;
pathnode->path.parent = rel; pathnode->path.parent = rel;
pathnode->path.p_ordering.ordtype = SORTOP_ORDER;
/*
* This is an IndexScan, but it does index lookups based
* on the order of the fields specified in the WHERE clause,
* not in any order, so the sortop is NULL.
*/
pathnode->path.p_ordering.ord.sortop = NULL;
pathnode->path.keys = NIL; /* not sure about this, bjm 1998/09/21 */
pathnode->indexqual = lcons(clausenode, NIL); pathnode->indexqual = lcons(clausenode, NIL);
pathnode->indexid = indexids; pathnode->indexid = indexids;
pathnode->path.path_cost = cost; pathnode->path.path_cost = cost;

View File

@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/util/pathnode.c,v 1.12 1998/09/01 04:30:08 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/optimizer/util/pathnode.c,v 1.13 1998/09/21 15:41:28 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -355,20 +355,17 @@ create_index_path(Query *root,
&npages, &npages,
&selec); &selec);
/* each clause gets an equal selectivity */ /* each clause gets an equal selectivity */
clausesel = clausesel = pow(selec, 1.0 / (double) length(restriction_clauses));
pow(selec,
1.0 / (double) length(restriction_clauses));
pathnode->indexqual = restriction_clauses; pathnode->indexqual = restriction_clauses;
pathnode->path.path_cost = pathnode->path.path_cost = cost_index(lfirsti(index->relids),
cost_index(lfirsti(index->relids), (int) npages,
(int) npages, selec,
selec, rel->pages,
rel->pages, rel->tuples,
rel->tuples, index->pages,
index->pages, index->tuples,
index->tuples, false);
false);
#if 0 #if 0
/* add in expensive functions cost! -- JMH, 7/7/92 */ /* add in expensive functions cost! -- JMH, 7/7/92 */