Tom Lane <[EMAIL PROTECTED]> writes:
> One thing that is *not* fine is something that I see had snuck past
> me in the previous WITH OIDS patch.  It is not okay for gram.y or
> scan.l to be looking at GUC variables --- that creates
> synchronization issues.

Good point (I remember reading gram.y's warning about this, but it
must have slipped my mind...). Attached is a revised patch that
corrects this.

-Neil
Index: doc/src/sgml/runtime.sgml
===================================================================
RCS file: /var/lib/cvs/pgsql-server/doc/src/sgml/runtime.sgml,v
retrieving revision 1.227
diff -c -r1.227 runtime.sgml
*** doc/src/sgml/runtime.sgml	13 Dec 2003 23:59:06 -0000	1.227
--- doc/src/sgml/runtime.sgml	7 Jan 2004 02:29:15 -0000
***************
*** 2437,2453 ****
        <term><varname>default_with_oids</varname> (<type>boolean</type>)</term>
        <listitem>
         <para>
!         This controls whether <command>CREATE TABLE</command> will
!         include OIDs in newly-created tables, if neither <literal>WITH
!         OIDS</literal> or <literal>WITHOUT OIDS</literal> have been
!         specified. It also determines whether OIDs will be included in
!         the table generated by <command>SELECT INTO</command> and
!         <command>CREATE TABLE AS</command>. In
          <productname>PostgreSQL</productname> &version;
!         <varname>default_with_oids</varname> defaults to true. This is
!         also the behavior of previous versions of
!         <productname>PostgreSQL</productname>. However, assuming that
!         tables will contain OIDs by default is not
          encouraged. Therefore, this option will default to false in a
          future release of <productname>PostgreSQL</productname>.
         </para>
--- 2437,2453 ----
        <term><varname>default_with_oids</varname> (<type>boolean</type>)</term>
        <listitem>
         <para>
!         This controls whether <command>CREATE TABLE</command>
!         and <command>CREATE TABLE AS</command> will include OIDs in
!         newly-created tables, if neither <literal>WITH OIDS</literal>
!         or <literal>WITHOUT OIDS</literal> have been specified. It
!         also determines whether OIDs will be included in the table
!         created by <command>SELECT INTO</command>. In
          <productname>PostgreSQL</productname> &version;
!         <varname>default_with_oids</varname> defaults to
!         true. This is also the behavior of previous versions
!         of <productname>PostgreSQL</productname>. However, assuming
!         that tables will contain OIDs by default is not
          encouraged. Therefore, this option will default to false in a
          future release of <productname>PostgreSQL</productname>.
         </para>
Index: doc/src/sgml/ref/create_table_as.sgml
===================================================================
RCS file: /var/lib/cvs/pgsql-server/doc/src/sgml/ref/create_table_as.sgml,v
retrieving revision 1.19
diff -c -r1.19 create_table_as.sgml
*** doc/src/sgml/ref/create_table_as.sgml	13 Dec 2003 23:59:07 -0000	1.19
--- doc/src/sgml/ref/create_table_as.sgml	7 Jan 2004 03:18:20 -0000
***************
*** 20,26 ****
  
   <refsynopsisdiv>
  <synopsis>
! CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE <replaceable>table_name</replaceable> [ (<replaceable>column_name</replaceable> [, ...] ) ]
      AS <replaceable>query</replaceable>
  </synopsis>
   </refsynopsisdiv>
--- 20,26 ----
  
   <refsynopsisdiv>
  <synopsis>
! CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE <replaceable>table_name</replaceable> [ (<replaceable>column_name</replaceable> [, ...] ) ] [ [ WITH | WITHOUT ] OIDS ]
      AS <replaceable>query</replaceable>
  </synopsis>
   </refsynopsisdiv>
***************
*** 99,104 ****
--- 99,118 ----
     </varlistentry>
  
     <varlistentry>
+     <term><literal>WITH OIDS</literal></term>
+     <term><literal>WITHOUT OIDS</literal></term>
+      <listitem>
+       <para>
+        This optional clause specifies whether the table created by
+        <command>CREATE TABLE AS</command> should include OIDs. If
+        neither form of this clause if specified, the value of the
+        <varname>default_with_oids</varname> configuration parameter is
+        used.
+       </para>
+      </listitem>
+    </varlistentry>
+ 
+    <varlistentry>
      <term><replaceable>query</replaceable></term>
      <listitem>
       <para>
***************
*** 121,143 ****
     This command is functionally similar to <xref
     linkend="sql-selectinto" endterm="sql-selectinto-title">, but it is
     preferred since it is less likely to be confused with other uses of
!    the <command>SELECT INTO</command> syntax.
    </para>
  
    <para>
!    Prior to <productname>PostgreSQL</> 7.5, <command>CREATE TABLE
!    AS</command> always included OIDs in the table it
     produced. Furthermore, these OIDs were newly generated: they were
     distinct from the OIDs of any of the rows in the source tables of
     the <command>SELECT</command> or <command>EXECUTE</command>
     statement. Therefore, if <command>CREATE TABLE AS</command> was
     frequently executed, the OID counter would be rapidly
!    incremented. As of <productname>PostgreSQL</> 7.5, the inclusion of
!    OIDs in the table generated by <command>CREATE TABLE AS</command>
!    is controlled by the <varname>default_with_oids</varname>
!    configuration variable. This variable currently defaults to true,
!    but will likely default to false in a future release of
!    <productname>PostgreSQL</>.
    </para>
   </refsect1>
  
--- 135,164 ----
     This command is functionally similar to <xref
     linkend="sql-selectinto" endterm="sql-selectinto-title">, but it is
     preferred since it is less likely to be confused with other uses of
!    the <command>SELECT INTO</> syntax. Furthermore, <command>CREATE
!    TABLE AS</command> offers a superset of the functionality offerred
!    by <command>SELECT INTO</command>.
    </para>
  
    <para>
!    Prior to <productname>PostgreSQL</productname> 7.5, <command>CREATE
!    TABLE AS</command> always included OIDs in the table it
     produced. Furthermore, these OIDs were newly generated: they were
     distinct from the OIDs of any of the rows in the source tables of
     the <command>SELECT</command> or <command>EXECUTE</command>
     statement. Therefore, if <command>CREATE TABLE AS</command> was
     frequently executed, the OID counter would be rapidly
!    incremented. As of <productname>PostgresSQL</productname> 7.5,
!    the <command>CREATE TABLE AS</command> command allows the user to
!    explicitely specify whether OIDs should be included. If the
!    presence of OIDs is not explicitely specified,
!    the <varname>default_with_oids</varname> configuration variable is
!    used. While this variable currently defaults to true, the default
!    value may be changed in the future. Therefore, applications that
!    require OIDs in the table created by <command>CREATE TABLE
!    AS</command> should explicitely specify <literal>WITH
!    OIDS</literal> to ensure compatibility with future versions
!    of <productname>PostgreSQL</productname>.
    </para>
   </refsect1>
  
Index: src/backend/commands/sequence.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/commands/sequence.c,v
retrieving revision 1.106
diff -c -r1.106 sequence.c
*** src/backend/commands/sequence.c	14 Dec 2003 00:34:47 -0000	1.106
--- src/backend/commands/sequence.c	7 Jan 2004 02:51:37 -0000
***************
*** 178,184 ****
  	stmt->relation = seq->sequence;
  	stmt->inhRelations = NIL;
  	stmt->constraints = NIL;
! 	stmt->hasoids = false;
  	stmt->oncommit = ONCOMMIT_NOOP;
  
  	seqoid = DefineRelation(stmt, RELKIND_SEQUENCE);
--- 178,184 ----
  	stmt->relation = seq->sequence;
  	stmt->inhRelations = NIL;
  	stmt->constraints = NIL;
! 	stmt->hasoids = MUST_NOT_HAVE_OIDS;
  	stmt->oncommit = ONCOMMIT_NOOP;
  
  	seqoid = DefineRelation(stmt, RELKIND_SEQUENCE);
Index: src/backend/commands/tablecmds.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/commands/tablecmds.c,v
retrieving revision 1.94
diff -c -r1.94 tablecmds.c
*** src/backend/commands/tablecmds.c	29 Nov 2003 19:51:47 -0000	1.94
--- src/backend/commands/tablecmds.c	7 Jan 2004 03:03:49 -0000
***************
*** 47,52 ****
--- 47,53 ----
  #include "utils/acl.h"
  #include "utils/builtins.h"
  #include "utils/fmgroids.h"
+ #include "utils/guc.h"
  #include "utils/inval.h"
  #include "utils/lsyscache.h"
  #include "utils/relcache.h"
***************
*** 185,191 ****
  	 */
  	descriptor = BuildDescForRelation(schema);
  
! 	descriptor->tdhasoid = (stmt->hasoids || parentHasOids);
  
  	if (old_constraints != NIL)
  	{
--- 186,210 ----
  	 */
  	descriptor = BuildDescForRelation(schema);
  
! 	if (parentHasOids)
! 		descriptor->tdhasoid = true;
! 	else
! 	{
! 		switch (stmt->hasoids)
! 		{
! 			case MUST_HAVE_OIDS:
! 				descriptor->tdhasoid = true;
! 				break;
! 
! 			case MUST_NOT_HAVE_OIDS:
! 				descriptor->tdhasoid = false;
! 				break;
! 
! 			case DEFAULT_OIDS:
! 				descriptor->tdhasoid = default_with_oids;
! 				break;
! 		}
! 	}
  
  	if (old_constraints != NIL)
  	{
Index: src/backend/commands/typecmds.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/commands/typecmds.c,v
retrieving revision 1.51
diff -c -r1.51 typecmds.c
*** src/backend/commands/typecmds.c	29 Nov 2003 19:51:47 -0000	1.51
--- src/backend/commands/typecmds.c	7 Jan 2004 02:51:13 -0000
***************
*** 1066,1072 ****
  	createStmt->tableElts = coldeflist;
  	createStmt->inhRelations = NIL;
  	createStmt->constraints = NIL;
! 	createStmt->hasoids = false;
  	createStmt->oncommit = ONCOMMIT_NOOP;
  
  	/*
--- 1066,1072 ----
  	createStmt->tableElts = coldeflist;
  	createStmt->inhRelations = NIL;
  	createStmt->constraints = NIL;
! 	createStmt->hasoids = MUST_NOT_HAVE_OIDS;
  	createStmt->oncommit = ONCOMMIT_NOOP;
  
  	/*
Index: src/backend/commands/view.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/commands/view.c,v
retrieving revision 1.79
diff -c -r1.79 view.c
*** src/backend/commands/view.c	29 Nov 2003 19:51:48 -0000	1.79
--- src/backend/commands/view.c	7 Jan 2004 02:50:44 -0000
***************
*** 141,147 ****
  		createStmt->tableElts = attrList;
  		createStmt->inhRelations = NIL;
  		createStmt->constraints = NIL;
! 		createStmt->hasoids = false;
  		createStmt->oncommit = ONCOMMIT_NOOP;
  
  		/*
--- 141,147 ----
  		createStmt->tableElts = attrList;
  		createStmt->inhRelations = NIL;
  		createStmt->constraints = NIL;
! 		createStmt->hasoids = MUST_NOT_HAVE_OIDS;
  		createStmt->oncommit = ONCOMMIT_NOOP;
  
  		/*
Index: src/backend/executor/execMain.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/executor/execMain.c,v
retrieving revision 1.224
diff -c -r1.224 execMain.c
*** src/backend/executor/execMain.c	28 Dec 2003 21:57:36 -0000	1.224
--- src/backend/executor/execMain.c	7 Jan 2004 02:29:15 -0000
***************
*** 593,606 ****
  	if (operation == CMD_SELECT && parseTree->into != NULL)
  	{
  		do_select_into = true;
! 
! 		/*
! 		 * The presence of OIDs in the result set of SELECT INTO is
! 		 * controlled by the default_with_oids GUC parameter. The
! 		 * behavior in versions of PostgreSQL prior to 7.5 is to
! 		 * always include OIDs.
! 		 */
! 		estate->es_force_oids = default_with_oids;
  	}
  
  	/*
--- 593,599 ----
  	if (operation == CMD_SELECT && parseTree->into != NULL)
  	{
  		do_select_into = true;
! 		estate->es_force_oids = parseTree->intoHasOids;
  	}
  
  	/*
Index: src/backend/nodes/copyfuncs.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/nodes/copyfuncs.c,v
retrieving revision 1.273
diff -c -r1.273 copyfuncs.c
*** src/backend/nodes/copyfuncs.c	5 Jan 2004 05:07:35 -0000	1.273
--- src/backend/nodes/copyfuncs.c	7 Jan 2004 02:29:15 -0000
***************
*** 1538,1543 ****
--- 1538,1544 ----
  	COPY_NODE_FIELD(utilityStmt);
  	COPY_SCALAR_FIELD(resultRelation);
  	COPY_NODE_FIELD(into);
+ 	COPY_SCALAR_FIELD(intoHasOids);
  	COPY_SCALAR_FIELD(hasAggs);
  	COPY_SCALAR_FIELD(hasSubLinks);
  	COPY_NODE_FIELD(rtable);
***************
*** 1612,1617 ****
--- 1613,1619 ----
  	COPY_NODE_FIELD(distinctClause);
  	COPY_NODE_FIELD(into);
  	COPY_NODE_FIELD(intoColNames);
+ 	COPY_SCALAR_FIELD(intoHasOids);
  	COPY_NODE_FIELD(targetList);
  	COPY_NODE_FIELD(fromClause);
  	COPY_NODE_FIELD(whereClause);
Index: src/backend/nodes/equalfuncs.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/nodes/equalfuncs.c,v
retrieving revision 1.212
diff -c -r1.212 equalfuncs.c
*** src/backend/nodes/equalfuncs.c	5 Jan 2004 05:07:35 -0000	1.212
--- src/backend/nodes/equalfuncs.c	7 Jan 2004 02:29:15 -0000
***************
*** 604,609 ****
--- 604,610 ----
  	COMPARE_NODE_FIELD(utilityStmt);
  	COMPARE_SCALAR_FIELD(resultRelation);
  	COMPARE_NODE_FIELD(into);
+ 	COMPARE_SCALAR_FIELD(intoHasOids);
  	COMPARE_SCALAR_FIELD(hasAggs);
  	COMPARE_SCALAR_FIELD(hasSubLinks);
  	COMPARE_NODE_FIELD(rtable);
***************
*** 667,672 ****
--- 668,674 ----
  	COMPARE_NODE_FIELD(distinctClause);
  	COMPARE_NODE_FIELD(into);
  	COMPARE_NODE_FIELD(intoColNames);
+ 	COMPARE_SCALAR_FIELD(intoHasOids);
  	COMPARE_NODE_FIELD(targetList);
  	COMPARE_NODE_FIELD(fromClause);
  	COMPARE_NODE_FIELD(whereClause);
Index: src/backend/parser/analyze.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/parser/analyze.c,v
retrieving revision 1.292
diff -c -r1.292 analyze.c
*** src/backend/parser/analyze.c	29 Nov 2003 19:51:51 -0000	1.292
--- src/backend/parser/analyze.c	7 Jan 2004 03:02:51 -0000
***************
*** 41,46 ****
--- 41,47 ----
  #include "utils/acl.h"
  #include "utils/builtins.h"
  #include "utils/fmgroids.h"
+ #include "utils/guc.h"
  #include "utils/lsyscache.h"
  #include "utils/relcache.h"
  #include "utils/syscache.h"
***************
*** 1964,1969 ****
--- 1965,1985 ----
  	if (stmt->intoColNames)
  		applyColumnNames(qry->targetList, stmt->intoColNames);
  
+ 	switch (stmt->intoHasOids)
+ 	{
+ 		case MUST_HAVE_OIDS:
+ 			qry->intoHasOids = true;
+ 			break;
+ 
+ 		case MUST_NOT_HAVE_OIDS:
+ 			qry->intoHasOids = false;
+ 			break;
+ 
+ 		case DEFAULT_OIDS:
+ 			qry->intoHasOids = default_with_oids;
+ 			break;
+ 	}
+ 
  	/* mark column origins */
  	markTargetListOrigins(pstate, qry->targetList);
  
Index: src/backend/parser/gram.y
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/parser/gram.y,v
retrieving revision 2.441
diff -c -r2.441 gram.y
*** src/backend/parser/gram.y	1 Dec 2003 22:07:58 -0000	2.441
--- src/backend/parser/gram.y	7 Jan 2004 03:19:16 -0000
***************
*** 63,69 ****
  #include "utils/numeric.h"
  #include "utils/datetime.h"
  #include "utils/date.h"
- #include "utils/guc.h"
  
  extern List *parsetree;			/* final parse result is delivered here */
  
--- 63,68 ----
***************
*** 108,113 ****
--- 107,113 ----
  	JoinType			jtype;
  	DropBehavior		dbehavior;
  	OnCommitAction		oncommit;
+ 	ContainsOids		withoids;
  	List				*list;
  	FastList			fastlist;
  	Node				*node;
***************
*** 232,239 ****
  %type <defelt>	createfunc_opt_item
  %type <typnam>	func_arg func_return func_type aggr_argtype
  
! %type <boolean> opt_arg TriggerForType OptTemp OptWithOids
! %type <oncommit>	OnCommitOption
  
  %type <list>	for_update_clause opt_for_update_clause update_list
  %type <boolean>	opt_all
--- 232,240 ----
  %type <defelt>	createfunc_opt_item
  %type <typnam>	func_arg func_return func_type aggr_argtype
  
! %type <boolean> opt_arg TriggerForType OptTemp
! %type <oncommit> OnCommitOption
! %type <withoids> OptWithOids WithOidsAs
  
  %type <list>	for_update_clause opt_for_update_clause update_list
  %type <boolean>	opt_all
***************
*** 1821,1834 ****
  		;
  
  OptWithOids:
! 			WITH OIDS								{ $$ = TRUE; }
! 			| WITHOUT OIDS							{ $$ = FALSE; }
! 			/*
! 			 * If the user didn't explicitely specify WITH or WITHOUT
! 			 * OIDS, decide whether to include OIDs based on the
! 			 * "default_with_oids" GUC var
! 			 */
! 			| /*EMPTY*/								{ $$ = default_with_oids; }
  		;
  
  OnCommitOption:  ON COMMIT DROP				{ $$ = ONCOMMIT_DROP; }
--- 1822,1830 ----
  		;
  
  OptWithOids:
! 			WITH OIDS								{ $$ = MUST_HAVE_OIDS; }
! 			| WITHOUT OIDS							{ $$ = MUST_NOT_HAVE_OIDS; }
! 			| /*EMPTY*/								{ $$ = DEFAULT_OIDS; }
  		;
  
  OnCommitOption:  ON COMMIT DROP				{ $$ = ONCOMMIT_DROP; }
***************
*** 1844,1850 ****
   */
  
  CreateAsStmt:
! 			CREATE OptTemp TABLE qualified_name OptCreateAs AS SelectStmt
  				{
  					/*
  					 * When the SelectStmt is a set-operation tree, we must
--- 1840,1846 ----
   */
  
  CreateAsStmt:
! 			CREATE OptTemp TABLE qualified_name OptCreateAs WithOidsAs SelectStmt
  				{
  					/*
  					 * When the SelectStmt is a set-operation tree, we must
***************
*** 1861,1870 ****
--- 1857,1879 ----
  					$4->istemp = $2;
  					n->into = $4;
  					n->intoColNames = $5;
+ 					n->intoHasOids = $6;
  					$$ = $7;
  				}
  		;
  
+ /*
+  * To avoid a shift/reduce conflict in CreateAsStmt, we need to
+  * include the 'AS' terminal in the parsing of WITH/WITHOUT
+  * OIDS. Unfortunately that means this production is effectively a
+  * duplicate of OptWithOids.
+  */
+ WithOidsAs:
+ 			WITH OIDS AS 							{ $$ = MUST_HAVE_OIDS; }
+ 			| WITHOUT OIDS AS 						{ $$ = MUST_NOT_HAVE_OIDS; }
+ 			| AS 									{ $$ = DEFAULT_OIDS; }
+ 			;
+ 
  OptCreateAs:
  			'(' CreateAsList ')'					{ $$ = $2; }
  			| /*EMPTY*/								{ $$ = NIL; }
***************
*** 4511,4516 ****
--- 4520,4526 ----
  					n->targetList = $3;
  					n->into = $4;
  					n->intoColNames = NIL;
+ 					n->intoHasOids = DEFAULT_OIDS;
  					n->fromClause = $5;
  					n->whereClause = $6;
  					n->groupClause = $7;
Index: src/include/nodes/parsenodes.h
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/include/nodes/parsenodes.h,v
retrieving revision 1.250
diff -c -r1.250 parsenodes.h
*** src/include/nodes/parsenodes.h	29 Nov 2003 22:41:06 -0000	1.250
--- src/include/nodes/parsenodes.h	7 Jan 2004 02:58:52 -0000
***************
*** 55,60 ****
--- 55,61 ----
  	int			resultRelation; /* target relation (index into rtable) */
  
  	RangeVar   *into;			/* target relation for SELECT INTO */
+ 	bool		intoHasOids;	/* should target relation contain OIDs? */
  
  	bool		hasAggs;		/* has aggregates in tlist or havingQual */
  	bool		hasSubLinks;	/* has subquery SubLink */
***************
*** 595,600 ****
--- 596,611 ----
  	SETOP_EXCEPT
  } SetOperation;
  
+ typedef enum ContainsOids
+ {
+ 	MUST_HAVE_OIDS,				/* WITH OIDS explicitely specified */
+ 	MUST_NOT_HAVE_OIDS,			/* WITHOUT OIDS explicitely specified */
+ 	DEFAULT_OIDS				/* neither specified; use the default,
+ 								 * which is the value of the
+ 								 * default_with_oids GUC var
+ 								 */
+ } ContainsOids;
+ 
  typedef struct SelectStmt
  {
  	NodeTag		type;
***************
*** 602,614 ****
  	/*
  	 * These fields are used only in "leaf" SelectStmts.
  	 *
! 	 * into and intoColNames are a kluge; they belong somewhere else...
  	 */
  	List	   *distinctClause; /* NULL, list of DISTINCT ON exprs, or
  								 * lcons(NIL,NIL) for all (SELECT
  								 * DISTINCT) */
  	RangeVar   *into;			/* target table (for select into table) */
  	List	   *intoColNames;	/* column names for into table */
  	List	   *targetList;		/* the target list (of ResTarget) */
  	List	   *fromClause;		/* the FROM clause */
  	Node	   *whereClause;	/* WHERE qualification */
--- 613,627 ----
  	/*
  	 * These fields are used only in "leaf" SelectStmts.
  	 *
! 	 * into, intoColNames and intoHasOids are a kluge; they belong
! 	 * somewhere else...
  	 */
  	List	   *distinctClause; /* NULL, list of DISTINCT ON exprs, or
  								 * lcons(NIL,NIL) for all (SELECT
  								 * DISTINCT) */
  	RangeVar   *into;			/* target table (for select into table) */
  	List	   *intoColNames;	/* column names for into table */
+ 	ContainsOids intoHasOids;	/* should target table have OIDs? */
  	List	   *targetList;		/* the target list (of ResTarget) */
  	List	   *fromClause;		/* the FROM clause */
  	Node	   *whereClause;	/* WHERE qualification */
***************
*** 895,901 ****
  	List	   *inhRelations;	/* relations to inherit from (list of
  								 * inhRelation) */
  	List	   *constraints;	/* constraints (list of Constraint nodes) */
! 	bool		hasoids;		/* should it have OIDs? */
  	OnCommitAction oncommit;	/* what do we do at COMMIT? */
  } CreateStmt;
  
--- 908,914 ----
  	List	   *inhRelations;	/* relations to inherit from (list of
  								 * inhRelation) */
  	List	   *constraints;	/* constraints (list of Constraint nodes) */
! 	ContainsOids   hasoids;		/* should it have OIDs? */
  	OnCommitAction oncommit;	/* what do we do at COMMIT? */
  } CreateStmt;
  
Index: src/test/regress/expected/without_oid.out
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/test/regress/expected/without_oid.out,v
retrieving revision 1.2
diff -c -r1.2 without_oid.out
*** src/test/regress/expected/without_oid.out	1 Dec 2003 22:08:02 -0000	1.2
--- src/test/regress/expected/without_oid.out	7 Jan 2004 02:29:15 -0000
***************
*** 36,38 ****
--- 36,62 ----
  
  DROP TABLE wi;
  DROP TABLE wo;
+ --
+ -- WITH / WITHOUT OIDS in CREATE TABLE AS
+ --
+ CREATE TABLE create_table_test (
+     a int,
+     b int
+ );
+ COPY create_table_test FROM stdin;
+ CREATE TABLE create_table_test2 WITH OIDS AS
+     SELECT a + b AS c1, a - b AS c2 FROM create_table_test;
+ CREATE TABLE create_table_test3 WITHOUT OIDS AS
+     SELECT a + b AS c1, a - b AS c2 FROM create_table_test;
+ SELECT count(oid) FROM create_table_test2;
+  count 
+ -------
+      2
+ (1 row)
+ 
+ -- should fail
+ SELECT count(oid) FROM create_table_test3;
+ ERROR:  column "oid" does not exist
+ DROP TABLE create_table_test;
+ DROP TABLE create_table_test2;
+ DROP TABLE create_table_test3;
Index: src/test/regress/sql/without_oid.sql
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/test/regress/sql/without_oid.sql,v
retrieving revision 1.2
diff -c -r1.2 without_oid.sql
*** src/test/regress/sql/without_oid.sql	1 Dec 2003 22:08:02 -0000	1.2
--- src/test/regress/sql/without_oid.sql	7 Jan 2004 02:29:15 -0000
***************
*** 33,35 ****
--- 33,62 ----
  
  DROP TABLE wi;
  DROP TABLE wo;
+ 
+ --
+ -- WITH / WITHOUT OIDS in CREATE TABLE AS
+ --
+ CREATE TABLE create_table_test (
+     a int,
+     b int
+ );
+ 
+ COPY create_table_test FROM stdin;
+ 5	10
+ 10	15
+ \.
+ 
+ CREATE TABLE create_table_test2 WITH OIDS AS
+     SELECT a + b AS c1, a - b AS c2 FROM create_table_test;
+ 
+ CREATE TABLE create_table_test3 WITHOUT OIDS AS
+     SELECT a + b AS c1, a - b AS c2 FROM create_table_test;
+ 
+ SELECT count(oid) FROM create_table_test2;
+ -- should fail
+ SELECT count(oid) FROM create_table_test3;
+ 
+ DROP TABLE create_table_test;
+ DROP TABLE create_table_test2;
+ DROP TABLE create_table_test3;
---------------------------(end of broadcast)---------------------------
TIP 7: don't forget to increase your free space map settings

Reply via email to