summaryrefslogtreecommitdiff
path: root/src/include/rewrite
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>1999-10-01 04:08:24 +0000
committerTom Lane <tgl@sss.pgh.pa.us>1999-10-01 04:08:24 +0000
commit389af07cf0bf80655b4f8f4eb0add8859d2154f8 (patch)
tree38e81bcdb5e7d8ca864d2220c9e15628ba901e89 /src/include/rewrite
parentce1f5ed5472d6fb3878cfc0ee5026a3764c25b57 (diff)
downloadpostgresql-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.h25
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 */