diff options
Diffstat (limited to 'src/backend/rewrite/rewriteHandler.c')
-rw-r--r-- | src/backend/rewrite/rewriteHandler.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c index f3ccf54c23e..5bb24720f8f 100644 --- a/src/backend/rewrite/rewriteHandler.c +++ b/src/backend/rewrite/rewriteHandler.c @@ -6,7 +6,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.14 1998/02/26 04:35:16 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.15 1998/03/30 16:36:43 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -195,7 +195,7 @@ FireRetrieveRulesAtQuery(Query *parsetree, if ((rt_entry_locks = relation->rd_rules) == NULL) return NIL; - locks = matchLocks(CMD_SELECT, rt_entry_locks, rt_index, parsetree); + locks = matchLocks(CMD_SELECT, rt_entry_locks, rt_index, parsetree); /* find all retrieve instead */ foreach(i, locks) @@ -375,6 +375,7 @@ ProcessRetrieveQuery(Query *parsetree, List *product_queries = NIL; int rt_index = 0; + foreach(rt, rtable) { RangeTblEntry *rt_entry = lfirst(rt); @@ -384,6 +385,8 @@ ProcessRetrieveQuery(Query *parsetree, rt_index++; rt_entry_relation = heap_openr(rt_entry->relname); + + if (rt_entry_relation->rd_rules != NULL) { result = @@ -414,6 +417,7 @@ ProcessRetrieveQuery(Query *parsetree, rt_entry_locks = rt_entry_relation->rd_rules; heap_close(rt_entry_relation); + if (rt_entry_locks) { locks = @@ -683,7 +687,6 @@ static int numQueryRewriteInvoked = 0; List * QueryRewrite(Query *parsetree) { - QueryRewriteSubLink(parsetree->qual); return QueryRewriteOne(parsetree); } @@ -780,6 +783,8 @@ deepRewriteQuery(Query *parsetree) bool instead; List *qual_products = NIL; + + if (++numQueryRewriteInvoked > REWRITE_INVOKE_MAX) { elog(ERROR, "query rewritten %d times, may contain cycles", |