From 748e3003176c94d5db2174e959b46f7745d806a7 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Mon, 21 Sep 1998 15:41:28 +0000 Subject: [PATCH] Fix for AND/OR handling. --- src/backend/optimizer/path/indxpath.c | 7 ++++++- src/backend/optimizer/path/orindxpath.c | 11 ++++++++++- src/backend/optimizer/util/pathnode.c | 23 ++++++++++------------- 3 files changed, 26 insertions(+), 15 deletions(-) diff --git a/src/backend/optimizer/path/indxpath.c b/src/backend/optimizer/path/indxpath.c index 24f46ec933..3d505c87c0 100644 --- a/src/backend/optimizer/path/indxpath.c +++ b/src/backend/optimizer/path/indxpath.c @@ -8,7 +8,7 @@ * * * 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), &temp_pages, &temp_selec); + pathnode->path.pathtype = T_IndexScan; 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->indexkeys = index->indexkeys; pathnode->indexqual = clausegroup; diff --git a/src/backend/optimizer/path/orindxpath.c b/src/backend/optimizer/path/orindxpath.c index 3f8d6b15da..31bd977de1 100644 --- a/src/backend/optimizer/path/orindxpath.c +++ b/src/backend/optimizer/path/orindxpath.c @@ -7,7 +7,7 @@ * * * 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.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->indexid = indexids; pathnode->path.path_cost = cost; diff --git a/src/backend/optimizer/util/pathnode.c b/src/backend/optimizer/util/pathnode.c index 598400fa49..d7dcbcc84f 100644 --- a/src/backend/optimizer/util/pathnode.c +++ b/src/backend/optimizer/util/pathnode.c @@ -7,7 +7,7 @@ * * * 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, &selec); /* each clause gets an equal selectivity */ - clausesel = - pow(selec, - 1.0 / (double) length(restriction_clauses)); + clausesel = pow(selec, 1.0 / (double) length(restriction_clauses)); pathnode->indexqual = restriction_clauses; - pathnode->path.path_cost = - cost_index(lfirsti(index->relids), - (int) npages, - selec, - rel->pages, - rel->tuples, - index->pages, - index->tuples, - false); + pathnode->path.path_cost = cost_index(lfirsti(index->relids), + (int) npages, + selec, + rel->pages, + rel->tuples, + index->pages, + index->tuples, + false); #if 0 /* add in expensive functions cost! -- JMH, 7/7/92 */