diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2007-06-23 22:12:52 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2007-06-23 22:12:52 +0000 |
commit | 46379d6e60f0f95e127a5045ca1fa74dfdc48a85 (patch) | |
tree | 7d6fe8004575203b40a38184c154dc7f34a20345 /src/include/nodes/parsenodes.h | |
parent | ec0bb02db8452d4098023f82b100ba68d8f7dfab (diff) | |
download | postgresql-46379d6e60f0f95e127a5045ca1fa74dfdc48a85.tar.gz postgresql-46379d6e60f0f95e127a5045ca1fa74dfdc48a85.zip |
Separate parse-analysis for utility commands out of parser/analyze.c
(which now deals only in optimizable statements), and put that code
into a new file parser/parse_utilcmd.c. This helps clarify and enforce
the design rule that utility statements shouldn't be processed during
the regular parse analysis phase; all interpretation of their meaning
should happen after they are given to ProcessUtility to execute.
(We need this because we don't retain any locks for a utility statement
that's in a plan cache, nor have any way to detect that it's stale.)
We are also able to simplify the API for parse_analyze() and related
routines, because they will now always return exactly one Query structure.
In passing, fix bug #3403 concerning trying to add a serial column to
an existing temp table (this is largely Heikki's work, but we needed
all that restructuring to make it safe).
Diffstat (limited to 'src/include/nodes/parsenodes.h')
-rw-r--r-- | src/include/nodes/parsenodes.h | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index 179d7a765db..50bb6c2048f 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/nodes/parsenodes.h,v 1.348 2007/04/27 22:05:49 tgl Exp $ + * $PostgreSQL: pgsql/src/include/nodes/parsenodes.h,v 1.349 2007/06/23 22:12:52 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -21,7 +21,7 @@ typedef enum QuerySource { QSRC_ORIGINAL, /* original parsetree (explicit query) */ - QSRC_PARSER, /* added by parse analysis */ + QSRC_PARSER, /* added by parse analysis (now unused) */ QSRC_INSTEAD_RULE, /* added by unconditional INSTEAD rule */ QSRC_QUAL_INSTEAD_RULE, /* added by conditional INSTEAD rule */ QSRC_NON_INSTEAD_RULE /* added by non-INSTEAD rule */ @@ -799,10 +799,12 @@ typedef struct SetOperationStmt /***************************************************************************** * Other Statements (no optimizations required) * - * Some of them require a little bit of transformation (which is also - * done by transformStmt). The whole structure is then passed on to - * ProcessUtility (by-passing the optimization step) as the utilityStmt - * field in Query. + * These are not touched by parser/analyze.c except to put them into + * the utilityStmt field of a Query. This is eventually passed to + * ProcessUtility (by-passing rewriting and planning). Some of the + * statements do need attention from parse analysis, and this is + * done by routines in parser/parse_utilcmd.c after ProcessUtility + * receives the command for execution. *****************************************************************************/ /* @@ -886,7 +888,7 @@ typedef enum AlterTableType AT_ReAddIndex, /* internal to commands/tablecmds.c */ AT_AddConstraint, /* add constraint */ AT_ProcessedConstraint, /* pre-processed add constraint (local in - * parser/analyze.c) */ + * parser/parse_utilcmd.c) */ AT_DropConstraint, /* drop constraint */ AT_DropConstraintQuietly, /* drop constraint, no error/warning (local in * commands/tablecmds.c) */ @@ -1083,7 +1085,7 @@ typedef struct CreateStmt * relation). We should never have both in the same node! * * Constraint attributes (DEFERRABLE etc) are initially represented as - * separate Constraint nodes for simplicity of parsing. analyze.c makes + * separate Constraint nodes for simplicity of parsing. parse_utilcmd.c makes * a pass through the constraints list to attach the info to the appropriate * FkConstraint node (and, perhaps, someday to other kinds of constraints). * ---------- |