diff options
| author | Tom Lane <tgl@sss.pgh.pa.us> | 1999-10-01 04:08:24 +0000 |
|---|---|---|
| committer | Tom Lane <tgl@sss.pgh.pa.us> | 1999-10-01 04:08:24 +0000 |
| commit | 389af07cf0bf80655b4f8f4eb0add8859d2154f8 (patch) | |
| tree | 38e81bcdb5e7d8ca864d2220c9e15628ba901e89 /src/include/rewrite | |
| parent | ce1f5ed5472d6fb3878cfc0ee5026a3764c25b57 (diff) | |
| download | postgresql-389af07cf0bf80655b4f8f4eb0add8859d2154f8.tar.gz | |
Clean up rewriter routines to use expression_tree_walker and
expression_tree_mutator rather than ad-hoc tree walking code. This shortens
the code materially and fixes a fair number of sins of omission. Also,
change modifyAggrefQual to *not* recurse into subselects, since its mission
is satisfied if it removes aggregate functions from the top level of a
WHERE clause. This cures problems with queries of the form SELECT ...
WHERE x IN (SELECT ... HAVING something-using-an-aggregate), which would
formerly get mucked up by modifyAggrefQual. The routine is still
fundamentally broken, of course, but I don't think there's any way to get
rid of it before we implement subselects in FROM ...
Diffstat (limited to 'src/include/rewrite')
| -rw-r--r-- | src/include/rewrite/rewriteManip.h | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/src/include/rewrite/rewriteManip.h b/src/include/rewrite/rewriteManip.h index 273b2fd499..fa212ef8f8 100644 --- a/src/include/rewrite/rewriteManip.h +++ b/src/include/rewrite/rewriteManip.h @@ -6,7 +6,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: rewriteManip.h,v 1.17 1999/07/15 15:21:30 momjian Exp $ + * $Id: rewriteManip.h,v 1.18 1999/10/01 04:08:15 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -16,19 +16,18 @@ #include "rewrite/rewriteHandler.h" /* RewriteManip.c */ -void OffsetVarNodes(Node *node, int offset, int sublevels_up); -void ChangeVarNodes(Node *node, int old_varno, int new_varno, - int sublevels_up); -void AddQual(Query *parsetree, Node *qual); -void AddHavingQual(Query *parsetree, Node *havingQual); +extern void OffsetVarNodes(Node *node, int offset, int sublevels_up); +extern void ChangeVarNodes(Node *node, int old_varno, int new_varno, + int sublevels_up); +extern void AddQual(Query *parsetree, Node *qual); +extern void AddHavingQual(Query *parsetree, Node *havingQual); +extern void AddNotQual(Query *parsetree, Node *qual); +extern void AddGroupClause(Query *parsetree, List *group_by, List *tlist); -void AddNotQual(Query *parsetree, Node *qual); -void AddGroupClause(Query *parsetree, List *group_by, List *tlist); +extern void FixNew(RewriteInfo *info, Query *parsetree); -void FixNew(RewriteInfo *info, Query *parsetree); - -void HandleRIRAttributeRule(Query *parsetree, List *rtable, List *targetlist, - int rt_index, int attr_num, int *modified, - int *badpostquel); +extern void HandleRIRAttributeRule(Query *parsetree, List *rtable, + List *targetlist, int rt_index, + int attr_num, int *modified, int *badsql); #endif /* REWRITEMANIP_H */ |
