mirror of
https://github.com/postgres/postgres.git
synced 2025-06-17 00:02:17 -04:00
joinclauses is determined accurately for each join. Formerly, the code only considered joinclauses that used all of the rels from the outer side of the join; thus for example FROM (a CROSS JOIN b) JOIN c ON (c.f1 = a.x AND c.f2 = b.y) could not exploit a two-column index on c(f1,f2), since neither of the qual clauses would be in the joininfo list it looked in. The new code does this correctly, and also is able to eliminate redundant clauses, thus fixing the problem noted 24-Oct-02 by Hans-Jürgen Schönig.
28 lines
893 B
C
28 lines
893 B
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* restrictinfo.h
|
|
* prototypes for restrictinfo.c.
|
|
*
|
|
*
|
|
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* $Id: restrictinfo.h,v 1.16 2002/11/24 21:52:15 tgl Exp $
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef RESTRICTINFO_H
|
|
#define RESTRICTINFO_H
|
|
|
|
#include "nodes/relation.h"
|
|
|
|
extern bool restriction_is_or_clause(RestrictInfo *restrictinfo);
|
|
extern List *get_actual_clauses(List *restrictinfo_list);
|
|
extern void get_actual_join_clauses(List *restrictinfo_list,
|
|
List **joinquals, List **otherquals);
|
|
extern List *remove_redundant_join_clauses(Query *root,
|
|
List *restrictinfo_list,
|
|
JoinType jointype);
|
|
|
|
#endif /* RESTRICTINFO_H */
|