mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	OR clause index fix
This commit is contained in:
		@@ -8,7 +8,7 @@
 | 
			
		||||
 *
 | 
			
		||||
 *
 | 
			
		||||
 * IDENTIFICATION
 | 
			
		||||
 *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/indxpath.c,v 1.31 1998/08/19 02:02:11 momjian Exp $
 | 
			
		||||
 *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/indxpath.c,v 1.32 1998/08/31 07:19:54 momjian Exp $
 | 
			
		||||
 *
 | 
			
		||||
 *-------------------------------------------------------------------------
 | 
			
		||||
 */
 | 
			
		||||
@@ -340,10 +340,10 @@ match_index_orclause(RelOptInfo *rel,
 | 
			
		||||
								   index) &&
 | 
			
		||||
			  IsA(get_rightop((Expr *) clause), Const)) ||
 | 
			
		||||
			 (match_index_to_operand(indexkey,
 | 
			
		||||
								   (Expr *) get_leftop((Expr *) clause),
 | 
			
		||||
								   (Expr *) get_rightop((Expr *) clause),
 | 
			
		||||
								   rel,
 | 
			
		||||
								   index) &&
 | 
			
		||||
			 IsA(get_rightop((Expr *) clause), Const))))
 | 
			
		||||
			 IsA(get_leftop((Expr *) clause), Const))))
 | 
			
		||||
		{
 | 
			
		||||
			lfirst(matching_indices) = lcons(index, lfirst(matching_indices));
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
 *
 | 
			
		||||
 *
 | 
			
		||||
 * IDENTIFICATION
 | 
			
		||||
 *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/orindxpath.c,v 1.8 1998/08/01 22:12:13 momjian Exp $
 | 
			
		||||
 *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/orindxpath.c,v 1.9 1998/08/31 07:19:55 momjian Exp $
 | 
			
		||||
 *
 | 
			
		||||
 *-------------------------------------------------------------------------
 | 
			
		||||
 */
 | 
			
		||||
@@ -84,6 +84,7 @@ create_or_index_paths(Query *root,
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			/* do they all have indexes? */
 | 
			
		||||
			if (index_flag)
 | 
			
		||||
			{					/* used to be a lisp every function */
 | 
			
		||||
				IndexPath  *pathnode = makeNode(IndexPath);
 | 
			
		||||
@@ -216,6 +217,11 @@ best_or_subclause_index(Query *root,
 | 
			
		||||
	List *ilist;
 | 
			
		||||
	bool first_run = true;
 | 
			
		||||
 | 
			
		||||
	/* if we don't match anything, return zeros */
 | 
			
		||||
	*retIndexid = 0;
 | 
			
		||||
	*retCost = 0.0;
 | 
			
		||||
	*retSelec = 0.0;
 | 
			
		||||
	
 | 
			
		||||
	foreach (ilist, indices)
 | 
			
		||||
	{
 | 
			
		||||
		RelOptInfo		   *index = (RelOptInfo *) lfirst(ilist);
 | 
			
		||||
@@ -268,12 +274,5 @@ best_or_subclause_index(Query *root,
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* we didn't get any indexes, so zero return values */
 | 
			
		||||
	if (first_run)
 | 
			
		||||
	{
 | 
			
		||||
		*retIndexid = 0;
 | 
			
		||||
		*retCost = 0.0;
 | 
			
		||||
		*retSelec = 0.0;
 | 
			
		||||
	}
 | 
			
		||||
	return;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
 *
 | 
			
		||||
 *
 | 
			
		||||
 * IDENTIFICATION
 | 
			
		||||
 *	  $Header: /cvsroot/pgsql/src/backend/optimizer/util/clauses.c,v 1.20 1998/08/10 02:26:29 momjian Exp $
 | 
			
		||||
 *	  $Header: /cvsroot/pgsql/src/backend/optimizer/util/clauses.c,v 1.21 1998/08/31 07:19:56 momjian Exp $
 | 
			
		||||
 *
 | 
			
		||||
 * HISTORY
 | 
			
		||||
 *	  AUTHOR			DATE			MAJOR EVENT
 | 
			
		||||
@@ -198,9 +198,8 @@ make_funcclause(Func *func, List *funcargs)
 | 
			
		||||
bool
 | 
			
		||||
or_clause(Node *clause)
 | 
			
		||||
{
 | 
			
		||||
	return
 | 
			
		||||
	(clause != NULL &&
 | 
			
		||||
	 nodeTag(clause) == T_Expr && ((Expr *) clause)->opType == OR_EXPR);
 | 
			
		||||
	return clause != NULL &&
 | 
			
		||||
		   nodeTag(clause) == T_Expr && ((Expr *) clause)->opType == OR_EXPR);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user