diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2002-02-26 22:47:12 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2002-02-26 22:47:12 +0000 |
commit | 56ee2ecba96a742bb6e18dfe8ee48054e90ebaa9 (patch) | |
tree | 905c72dc3db475d47d04472a1de7ab715b5725c7 /src/backend/parser/analyze.c | |
parent | f71dc6d0e28a855f2d782ec48f950ffeaca1307d (diff) | |
download | postgresql-56ee2ecba96a742bb6e18dfe8ee48054e90ebaa9.tar.gz postgresql-56ee2ecba96a742bb6e18dfe8ee48054e90ebaa9.zip |
Restructure command-completion-report code so that there is just one
report for each received SQL command, regardless of rewriting activity.
Also ensure that this report comes from the 'original' command, not the
last command generated by rewrite; this fixes 7.2 breakage for INSERT
commands that have actions added by rules. Fernando Nasser and Tom Lane.
Diffstat (limited to 'src/backend/parser/analyze.c')
-rw-r--r-- | src/backend/parser/analyze.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index aed1cf29649..35944ff6533 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -6,7 +6,7 @@ * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.214 2002/02/25 04:21:55 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.215 2002/02/26 22:47:08 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -122,10 +122,11 @@ parse_analyze(Node *parseTree, ParseState *parentParseState) { List *result = NIL; ParseState *pstate = make_parsestate(parentParseState); - Query *query; /* Lists to return extra commands from transformation */ - List *extras_before = NIL; - List *extras_after = NIL; + List *extras_before = NIL; + List *extras_after = NIL; + Query *query; + List *listscan; query = transformStmt(pstate, parseTree, &extras_before, &extras_after); release_pstate_resources(pstate); @@ -144,6 +145,18 @@ parse_analyze(Node *parseTree, ParseState *parentParseState) extras_after = lnext(extras_after); } + /* + * Make sure that only the original query is marked original. + * We have to do this explicitly since recursive calls of parse_analyze + * will have set originalQuery in some of the added-on queries. + */ + foreach(listscan, result) + { + Query *q = lfirst(listscan); + + q->originalQuery = (q == query); + } + pfree(pstate); return result; |