? Makefile.custom
? GNUmakefile
? Makefile.global
? log
? crtags
? backend/postgres
? backend/catalog/global.description
? backend/catalog/global.bki
? backend/catalog/template1.bki
? backend/catalog/template1.description
? backend/parser/scan.y
? backend/port/Makefile
? bin/initdb/initdb
? bin/initlocation/initlocation
? bin/ipcclean/ipcclean
? bin/pg_config/pg_config
? bin/pg_ctl/pg_ctl
? bin/pg_dump/pg_dump
? bin/pg_dump/pg_restore
? bin/pg_dump/pg_dumpall
? bin/pg_id/pg_id
? bin/pg_passwd/pg_passwd
? bin/pgaccess/pgaccess
? bin/pgtclsh/Makefile.tkdefs
? bin/pgtclsh/Makefile.tcldefs
? bin/pgtclsh/pgtclsh
? bin/pgtclsh/pgtksh
? bin/psql/psql
? bin/scripts/createlang
? include/config.h
? include/stamp-h
? interfaces/ecpg/lib/libecpg.so.3.2.0
? interfaces/ecpg/preproc/ecpg
? interfaces/libpgeasy/libpgeasy.so.2.1
? interfaces/libpgtcl/libpgtcl.so.2.1
? interfaces/libpq/libpq.so.2.1
? interfaces/perl5/blib
? interfaces/perl5/Makefile
? interfaces/perl5/pm_to_blib
? interfaces/perl5/Pg.c
? interfaces/perl5/Pg.bs
? pl/plperl/blib
? pl/plperl/Makefile
? pl/plperl/pm_to_blib
? pl/plperl/SPI.c
? pl/plperl/plperl.bs
? pl/plpgsql/src/libplpgsql.so.1.0
? pl/tcl/Makefile.tcldefs
? test/regress/pg_regress
? test/regress/results
? test/regress/expected/copy.out
? test/regress/expected/create_function_1.out
? test/regress/expected/create_function_2.out
? test/regress/expected/misc.out
? test/regress/expected/constraints.out
? test/regress/sql/copy.sql
? test/regress/sql/create_function_1.sql
? test/regress/sql/create_function_2.sql
? test/regress/sql/misc.sql
? test/regress/sql/constraints.sql
Index: backend/bootstrap/bootparse.y
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/bootstrap/bootparse.y,v
retrieving revision 1.33
retrieving revision 1.34
diff -c -r1.33 -r1.34
*** backend/bootstrap/bootparse.y	2000/11/21 21:15:59	1.33
--- backend/bootstrap/bootparse.y	2001/01/17 17:26:44	1.34
***************
*** 9,15 ****
   *
   *
   * IDENTIFICATION
!  *	  $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/bootstrap/bootparse.y,v 1.33 2000/11/21 21:15:59 petere Exp $
   *
   *-------------------------------------------------------------------------
   */
--- 9,15 ----
   *
   *
   * IDENTIFICATION
!  *	  $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/bootstrap/bootparse.y,v 1.34 2001/01/17 17:26:44 momjian Exp $
   *
   *-------------------------------------------------------------------------
   */
***************
*** 254,260 ****
  
  boot_index_params:
  		boot_index_params COMMA boot_index_param	{ $$ = lappend($1, $3); }
! 		| boot_index_param							{ $$ = lcons($1, NIL); }
  		;
  
  boot_index_param:
--- 254,260 ----
  
  boot_index_params:
  		boot_index_params COMMA boot_index_param	{ $$ = lappend($1, $3); }
! 		| boot_index_param							{ $$ = makeList1($1); }
  		;
  
  boot_index_param:
Index: backend/commands/user.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/commands/user.c,v
retrieving revision 1.70
retrieving revision 1.71
diff -c -r1.70 -r1.71
*** backend/commands/user.c	2000/11/16 22:30:19	1.70
--- backend/commands/user.c	2001/01/17 17:26:44	1.71
***************
*** 6,12 ****
   * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
   * Portions Copyright (c) 1994, Regents of the University of California
   *
!  * $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/commands/user.c,v 1.70 2000/11/16 22:30:19 tgl Exp $
   *
   *-------------------------------------------------------------------------
   */
--- 6,12 ----
   * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
   * Portions Copyright (c) 1994, Regents of the University of California
   *
!  * $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/commands/user.c,v 1.71 2001/01/17 17:26:44 momjian Exp $
   *
   *-------------------------------------------------------------------------
   */
***************
*** 311,317 ****
  		ags.name = strVal(lfirst(item));		/* the group name to add
  												 * this in */
  		ags.action = +1;
! 		ags.listUsers = lcons((void *) makeInteger(havesysid ? stmt->sysid : max_id + 1), NIL);
  		AlterGroup(&ags, "CREATE USER");
  	}
  
--- 311,318 ----
  		ags.name = strVal(lfirst(item));		/* the group name to add
  												 * this in */
  		ags.action = +1;
! 		ags.listUsers = makeList1(makeInteger(havesysid ?
! 							stmt->sysid : max_id + 1));
  		AlterGroup(&ags, "CREATE USER");
  	}
  
***************
*** 600,606 ****
  			datum = heap_getattr(tmp_tuple, Anum_pg_group_groname, pg_dsc, &null);
  			ags.name = DatumGetCString(DirectFunctionCall1(nameout, datum));
  			ags.action = -1;
! 			ags.listUsers = lcons((void *) makeInteger(usesysid), NIL);
  			AlterGroup(&ags, "DROP USER");
  		}
  		heap_endscan(scan);
--- 601,607 ----
  			datum = heap_getattr(tmp_tuple, Anum_pg_group_groname, pg_dsc, &null);
  			ags.name = DatumGetCString(DirectFunctionCall1(nameout, datum));
  			ags.action = -1;
! 			ags.listUsers = makeList1(makeInteger(usesysid));
  			AlterGroup(&ags, "DROP USER");
  		}
  		heap_endscan(scan);
Index: backend/executor/execJunk.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/executor/execJunk.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -c -r1.22 -r1.23
*** backend/executor/execJunk.c	2000/01/26 05:56:21	1.22
--- backend/executor/execJunk.c	2001/01/17 17:26:44	1.23
***************
*** 8,14 ****
   *
   *
   * IDENTIFICATION
!  *	  $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/executor/execJunk.c,v 1.22 2000/01/26 05:56:21 momjian Exp $
   *
   *-------------------------------------------------------------------------
   */
--- 8,14 ----
   *
   *
   * IDENTIFICATION
!  *	  $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/executor/execJunk.c,v 1.23 2001/01/17 17:26:44 momjian Exp $
   *
   *-------------------------------------------------------------------------
   */
***************
*** 124,130 ****
  			Fjoin	   *fjNode = (Fjoin *) tl_node(fjList);
  
  			cleanFjoin = (Fjoin) copyObject((Node) fjNode);
! 			cleanFjList = lcons(cleanFjoin, NIL);
  
  			resdom = (Resdom) lfirst(get_fj_innerNode(fjNode));
  			expr = lsecond(get_fj_innerNode(fjNode));
--- 124,130 ----
  			Fjoin	   *fjNode = (Fjoin *) tl_node(fjList);
  
  			cleanFjoin = (Fjoin) copyObject((Node) fjNode);
! 			cleanFjList = makeList1(cleanFjoin);
  
  			resdom = (Resdom) lfirst(get_fj_innerNode(fjNode));
  			expr = lsecond(get_fj_innerNode(fjNode));
Index: backend/nodes/copyfuncs.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v
retrieving revision 1.136
retrieving revision 1.137
diff -c -r1.136 -r1.137
*** backend/nodes/copyfuncs.c	2001/01/05 06:34:17	1.136
--- backend/nodes/copyfuncs.c	2001/01/17 17:26:44	1.137
***************
*** 15,21 ****
   * Portions Copyright (c) 1994, Regents of the University of California
   *
   * IDENTIFICATION
!  *	  $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.136 2001/01/05 06:34:17 tgl Exp $
   *
   *-------------------------------------------------------------------------
   */
--- 15,21 ----
   * Portions Copyright (c) 1994, Regents of the University of California
   *
   * IDENTIFICATION
!  *	  $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.137 2001/01/17 17:26:44 momjian Exp $
   *
   *-------------------------------------------------------------------------
   */
***************
*** 58,68 ****
  	if (list == NIL)
  		return NIL;
  
! 	newlist = nl = lcons(lfirst(list), NIL);
  
  	foreach(l, lnext(list))
  	{
! 		lnext(nl) = lcons(lfirst(l), NIL);
  		nl = lnext(nl);
  	}
  	return newlist;
--- 58,68 ----
  	if (list == NIL)
  		return NIL;
  
! 	newlist = nl = makeList1(lfirst(list));
  
  	foreach(l, lnext(list))
  	{
! 		lnext(nl) = makeList1(lfirst(l));
  		nl = lnext(nl);
  	}
  	return newlist;
***************
*** 2745,2756 ****
  
  				/* rather ugly coding for speed... */
  				/* Note the input list cannot be NIL if we got here. */
! 				nl = lcons(copyObject(lfirst(list)), NIL);
  				retval = nl;
  
  				foreach(l, lnext(list))
  				{
! 					lnext(nl) = lcons(copyObject(lfirst(l)), NIL);
  					nl = lnext(nl);
  				}
  			}
--- 2745,2756 ----
  
  				/* rather ugly coding for speed... */
  				/* Note the input list cannot be NIL if we got here. */
! 				nl = makeList1(copyObject(lfirst(list)));
  				retval = nl;
  
  				foreach(l, lnext(list))
  				{
! 					lnext(nl) = makeList1(copyObject(lfirst(l)));
  					nl = lnext(nl);
  				}
  			}
Index: backend/nodes/list.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/nodes/list.c,v
retrieving revision 1.36
retrieving revision 1.37
diff -c -r1.36 -r1.37
*** backend/nodes/list.c	2000/10/31 10:22:10	1.36
--- backend/nodes/list.c	2001/01/17 17:26:44	1.37
***************
*** 8,14 ****
   *
   *
   * IDENTIFICATION
!  *	  $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/nodes/list.c,v 1.36 2000/10/31 10:22:10 petere Exp $
   *
   * NOTES
   *	  XXX a few of the following functions are duplicated to handle
--- 8,14 ----
   *
   *
   * IDENTIFICATION
!  *	  $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/nodes/list.c,v 1.37 2001/01/17 17:26:44 momjian Exp $
   *
   * NOTES
   *	  XXX a few of the following functions are duplicated to handle
***************
*** 127,133 ****
  List *
  lappend(List *list, void *obj)
  {
! 	return nconc(list, lcons(obj, NIL));
  }
  
  /*
--- 127,133 ----
  List *
  lappend(List *list, void *obj)
  {
! 	return nconc(list, makeList1(obj));
  }
  
  /*
***************
*** 138,144 ****
  List *
  lappendi(List *list, int datum)
  {
! 	return nconc(list, lconsi(datum, NIL));
  }
  
  /*
--- 138,144 ----
  List *
  lappendi(List *list, int datum)
  {
! 	return nconc(list, makeListi1(datum));
  }
  
  /*
Index: backend/nodes/makefuncs.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/nodes/makefuncs.c,v
retrieving revision 1.23
retrieving revision 1.24
diff -c -r1.23 -r1.24
*** backend/nodes/makefuncs.c	2000/11/16 22:30:23	1.23
--- backend/nodes/makefuncs.c	2001/01/17 17:26:44	1.24
***************
*** 8,14 ****
   *
   *
   * IDENTIFICATION
!  *	  $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/nodes/makefuncs.c,v 1.23 2000/11/16 22:30:23 tgl Exp $
   *
   * NOTES
   *	  Creator functions in POSTGRES 4.2 are generated automatically. Most of
--- 8,14 ----
   *
   *
   * IDENTIFICATION
!  *	  $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/nodes/makefuncs.c,v 1.24 2001/01/17 17:26:44 momjian Exp $
   *
   * NOTES
   *	  Creator functions in POSTGRES 4.2 are generated automatically. Most of
***************
*** 178,184 ****
  	a->relname = pstrdup(relname);
  	a->paramNo = NULL;
  	if (attname != NULL)
! 		a->attrs = lcons(makeString(pstrdup(attname)), NIL);
  	a->indirection = NULL;
  
  	return a;
--- 178,184 ----
  	a->relname = pstrdup(relname);
  	a->paramNo = NULL;
  	if (attname != NULL)
! 		a->attrs = makeList1(makeString(pstrdup(attname)));
  	a->indirection = NULL;
  
  	return a;
Index: backend/optimizer/README
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/optimizer/README,v
retrieving revision 1.21
retrieving revision 1.22
diff -c -r1.21 -r1.22
*** backend/optimizer/README	2000/12/14 22:30:45	1.21
--- backend/optimizer/README	2001/01/17 06:41:31	1.22
***************
*** 80,86 ****
  for tab1 listing tab2 as an unjoined relation, and also one for tab2
  showing tab1 as an unjoined relation.
  
! If we have only a single base relation in the query, we are done now.
  Otherwise we have to figure out how to join the base relations into a
  single join relation.
  
--- 80,86 ----
  for tab1 listing tab2 as an unjoined relation, and also one for tab2
  showing tab1 as an unjoined relation.
  
! If we have only a single base relation in the query, we are done.
  Otherwise we have to figure out how to join the base relations into a
  single join relation.
  
Index: backend/optimizer/geqo/geqo_eval.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/optimizer/geqo/geqo_eval.c,v
retrieving revision 1.55
retrieving revision 1.56
diff -c -r1.55 -r1.56
*** backend/optimizer/geqo/geqo_eval.c	2000/09/19 18:42:33	1.55
--- backend/optimizer/geqo/geqo_eval.c	2001/01/17 17:26:44	1.56
***************
*** 6,12 ****
   * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
   * Portions Copyright (c) 1994, Regents of the University of California
   *
!  * $Id: geqo_eval.c,v 1.55 2000/09/19 18:42:33 tgl Exp $
   *
   *-------------------------------------------------------------------------
   */
--- 6,12 ----
   * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
   * Portions Copyright (c) 1994, Regents of the University of California
   *
!  * $Id: geqo_eval.c,v 1.56 2001/01/17 17:26:44 momjian Exp $
   *
   *-------------------------------------------------------------------------
   */
***************
*** 122,128 ****
  		else
  		{
  			/* tree main part */
! 			List	   *acceptable_rels = lcons(inner_rel, NIL);
  			List	   *new_rels;
  			RelOptInfo *new_rel;
  
--- 122,128 ----
  		else
  		{
  			/* tree main part */
! 			List	   *acceptable_rels = makeList1(inner_rel);
  			List	   *new_rels;
  			RelOptInfo *new_rel;
  
Index: backend/optimizer/path/pathkeys.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/optimizer/path/pathkeys.c,v
retrieving revision 1.28
retrieving revision 1.29
diff -c -r1.28 -r1.29
*** backend/optimizer/path/pathkeys.c	2000/12/14 22:30:43	1.28
--- backend/optimizer/path/pathkeys.c	2001/01/17 17:26:45	1.29
***************
*** 11,17 ****
   * Portions Copyright (c) 1994, Regents of the University of California
   *
   * IDENTIFICATION
!  *	  $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/optimizer/path/pathkeys.c,v 1.28 2000/12/14 22:30:43 tgl Exp $
   *
   *-------------------------------------------------------------------------
   */
--- 11,17 ----
   * Portions Copyright (c) 1994, Regents of the University of California
   *
   * IDENTIFICATION
!  *	  $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/optimizer/path/pathkeys.c,v 1.29 2001/01/17 17:26:45 momjian Exp $
   *
   *-------------------------------------------------------------------------
   */
***************
*** 119,125 ****
  
  			/* Build the new set only when we know we must */
  			if (newset == NIL)
! 				newset = lcons(item1, lcons(item2, NIL));
  
  			/* Found a set to merge into our new set */
  			newset = set_union(newset, curset);
--- 119,125 ----
  
  			/* Build the new set only when we know we must */
  			if (newset == NIL)
! 				newset = makeList2(item1, item2);
  
  			/* Found a set to merge into our new set */
  			newset = set_union(newset, curset);
***************
*** 135,141 ****
  
  	/* Build the new set only when we know we must */
  	if (newset == NIL)
! 		newset = lcons(item1, lcons(item2, NIL));
  
  	root->equi_key_list = lcons(newset, root->equi_key_list);
  }
--- 135,141 ----
  
  	/* Build the new set only when we know we must */
  	if (newset == NIL)
! 		newset = makeList2(item1, item2);
  
  	root->equi_key_list = lcons(newset, root->equi_key_list);
  }
***************
*** 534,540 ****
  		/* Make a one-sublist pathkeys list for the function expression */
  		item = makePathKeyItem((Node *) make_funcclause(funcnode, funcargs),
  							   sortop);
! 		retval = lcons(make_canonical_pathkey(root, item), NIL);
  	}
  	else
  	{
--- 534,540 ----
  		/* Make a one-sublist pathkeys list for the function expression */
  		item = makePathKeyItem((Node *) make_funcclause(funcnode, funcargs),
  							   sortop);
! 		retval = makeList1(make_canonical_pathkey(root, item));
  	}
  	else
  	{
***************
*** 678,684 ****
  		 * canonicalize_pathkeys() might replace it with a longer sublist
  		 * later.
  		 */
! 		pathkeys = lappend(pathkeys, lcons(pathkey, NIL));
  	}
  	return pathkeys;
  }
--- 678,684 ----
  		 * canonicalize_pathkeys() might replace it with a longer sublist
  		 * later.
  		 */
! 		pathkeys = lappend(pathkeys, makeList1(pathkey));
  	}
  	return pathkeys;
  }
Index: backend/optimizer/path/_deadcode/xfunc.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/optimizer/path/_deadcode/xfunc.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -c -r1.13 -r1.14
*** backend/optimizer/path/_deadcode/xfunc.c	2000/01/26 05:56:36	1.13
--- backend/optimizer/path/_deadcode/xfunc.c	2001/01/17 17:26:45	1.14
***************
*** 10,16 ****
   *
   *
   * IDENTIFICATION
!  *	  $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/optimizer/path/_deadcode/xfunc.c,v 1.13 2000/01/26 05:56:36 momjian Exp $
   *
   *-------------------------------------------------------------------------
   */
--- 10,16 ----
   *
   *
   * IDENTIFICATION
!  *	  $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/optimizer/path/_deadcode/xfunc.c,v 1.14 2001/01/17 17:26:45 momjian Exp $
   *
   *-------------------------------------------------------------------------
   */
***************
*** 300,306 ****
  										get_clause(cinfo), LispNil);
  	xfunc_copyrel(get_parent(newkid), &newrel);
  	set_parent(newkid, newrel);
! 	set_pathlist(newrel, lcons(newkid, NIL));
  	set_unorderedpath(newrel, (PathPtr) newkid);
  	set_cheapestpath(newrel, (PathPtr) newkid);
  	set_size(newrel,
--- 300,306 ----
  										get_clause(cinfo), LispNil);
  	xfunc_copyrel(get_parent(newkid), &newrel);
  	set_parent(newkid, newrel);
! 	set_pathlist(newrel, makeList1(newkid));
  	set_unorderedpath(newrel, (PathPtr) newkid);
  	set_cheapestpath(newrel, (PathPtr) newkid);
  	set_size(newrel,
Index: backend/optimizer/prep/prepunion.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/optimizer/prep/prepunion.c,v
retrieving revision 1.58
retrieving revision 1.59
diff -c -r1.58 -r1.59
*** backend/optimizer/prep/prepunion.c	2000/12/14 22:30:44	1.58
--- backend/optimizer/prep/prepunion.c	2001/01/17 17:26:45	1.59
***************
*** 14,20 ****
   *
   *
   * IDENTIFICATION
!  *	  $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/optimizer/prep/prepunion.c,v 1.58 2000/12/14 22:30:44 tgl Exp $
   *
   *-------------------------------------------------------------------------
   */
--- 14,20 ----
   *
   *
   * IDENTIFICATION
!  *	  $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/optimizer/prep/prepunion.c,v 1.59 2001/01/17 17:26:45 momjian Exp $
   *
   *-------------------------------------------------------------------------
   */
***************
*** 467,473 ****
  find_all_inheritors(Oid parentrel)
  {
  	List	   *examined_relids = NIL;
! 	List	   *unexamined_relids = lconsi(parentrel, NIL);
  
  	/*
  	 * While the queue of unexamined relids is nonempty, remove the first
--- 467,473 ----
  find_all_inheritors(Oid parentrel)
  {
  	List	   *examined_relids = NIL;
! 	List	   *unexamined_relids = makeListi1(parentrel);
  
  	/*
  	 * While the queue of unexamined relids is nonempty, remove the first
Index: backend/parser/gram.y
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/parser/gram.y,v
retrieving revision 2.215
retrieving revision 2.216
diff -c -r2.215 -r2.216
*** backend/parser/gram.y	2001/01/15 20:36:36	2.215
--- backend/parser/gram.y	2001/01/17 17:26:45	2.216
***************
*** 11,17 ****
   *
   *
   * IDENTIFICATION
!  *	  $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/parser/gram.y,v 2.215 2001/01/15 20:36:36 tgl Exp $
   *
   * HISTORY
   *	  AUTHOR			DATE			MAJOR EVENT
--- 11,17 ----
   *
   *
   * IDENTIFICATION
!  *	  $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/parser/gram.y,v 2.216 2001/01/17 17:26:45 momjian Exp $
   *
   * HISTORY
   *	  AUTHOR			DATE			MAJOR EVENT
***************
*** 2918,2924 ****
  				}
  		| LOCATION '=' DEFAULT
  				{
! 					$$ = lconsi(1, makeList1((char *) NULL));
  				}
  		| TEMPLATE '=' name
  				{
--- 2918,2924 ----
  				}
  		| LOCATION '=' DEFAULT
  				{
! 					$$ = lconsi(1, makeList1(NULL));
  				}
  		| TEMPLATE '=' name
  				{
***************
*** 2926,2932 ****
  				}
  		| TEMPLATE '=' DEFAULT
  				{
! 					$$ = lconsi(2, makeList1((char *) NULL));
  				}
  		| ENCODING '=' Sconst
  				{
--- 2926,2932 ----
  				}
  		| TEMPLATE '=' DEFAULT
  				{
! 					$$ = lconsi(2, makeList1(NULL));
  				}
  		| ENCODING '=' Sconst
  				{
***************
*** 3383,3389 ****
  
  		/* easy way to return two values. Can someone improve this?  bjm */
  into_clause:  INTO OptTempTableName		{ $$ = $2; }
! 		| /*EMPTY*/						{ $$ = lcons(makeInteger(FALSE), NIL); }
  		;
  
  /*
--- 3383,3389 ----
  
  		/* easy way to return two values. Can someone improve this?  bjm */
  into_clause:  INTO OptTempTableName		{ $$ = $2; }
! 		| /*EMPTY*/						{ $$ = makeList1(makeInteger(FALSE)); }
  		;
  
  /*
Index: backend/parser/parse_coerce.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/parser/parse_coerce.c,v
retrieving revision 2.52
retrieving revision 2.53
diff -c -r2.52 -r2.53
*** backend/parser/parse_coerce.c	2000/12/17 04:32:29	2.52
--- backend/parser/parse_coerce.c	2001/01/17 17:26:45	2.53
***************
*** 8,14 ****
   *
   *
   * IDENTIFICATION
!  *	  $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/parser/parse_coerce.c,v 2.52 2000/12/17 04:32:29 tgl Exp $
   *
   *-------------------------------------------------------------------------
   */
--- 8,14 ----
   *
   *
   * IDENTIFICATION
!  *	  $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/parser/parse_coerce.c,v 2.53 2001/01/17 17:26:45 momjian Exp $
   *
   *-------------------------------------------------------------------------
   */
***************
*** 128,134 ****
  		FuncCall   *n = makeNode(FuncCall);
  
  		n->funcname = typeidTypeName(targetTypeId);
! 		n->args = lcons(node, NIL);
  		n->agg_star = false;
  		n->agg_distinct = false;
  
--- 128,134 ----
  		FuncCall   *n = makeNode(FuncCall);
  
  		n->funcname = typeidTypeName(targetTypeId);
! 		n->args = makeList1(node);
  		n->agg_star = false;
  		n->agg_distinct = false;
  
***************
*** 304,310 ****
  		cons->val.val.ival = atttypmod;
  
  		func->funcname = funcname;
! 		func->args = lappend(lcons(node, NIL), cons);
  		func->agg_star = false;
  		func->agg_distinct = false;
  
--- 304,310 ----
  		cons->val.val.ival = atttypmod;
  
  		func->funcname = funcname;
! 		func->args = makeList2(node, cons);
  		func->agg_star = false;
  		func->agg_distinct = false;
  
Index: backend/utils/adt/datetime.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/utils/adt/datetime.c,v
retrieving revision 1.57
retrieving revision 1.58
diff -c -r1.57 -r1.58
*** backend/utils/adt/datetime.c	2000/12/03 20:45:35	1.57
--- backend/utils/adt/datetime.c	2001/01/17 16:46:56	1.58
***************
*** 8,14 ****
   *
   *
   * IDENTIFICATION
!  *	  $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/utils/adt/datetime.c,v 1.57 2000/12/03 20:45:35 tgl Exp $
   *
   *-------------------------------------------------------------------------
   */
--- 8,14 ----
   *
   *
   * IDENTIFICATION
!  *	  $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/utils/adt/datetime.c,v 1.58 2001/01/17 16:46:56 thomas Exp $
   *
   *-------------------------------------------------------------------------
   */
***************
*** 2229,2249 ****
  				sprintf(cp, "%d year%s",
  						tm->tm_year, ((tm->tm_year != 1) ? "s" : ""));
  				cp += strlen(cp);
  				is_nonzero = TRUE;
  			}
  
  			if (tm->tm_mon != 0)
  			{
! 				sprintf(cp, "%s%d mon%s", (is_nonzero ? " " : ""),
  						tm->tm_mon, ((tm->tm_mon != 1) ? "s" : ""));
  				cp += strlen(cp);
  				is_nonzero = TRUE;
  			}
  
  			if (tm->tm_mday != 0)
  			{
! 				sprintf(cp, "%s%d", (is_nonzero ? " " : ""), tm->tm_mday);
  				cp += strlen(cp);
  				is_nonzero = TRUE;
  			}
  			{
--- 2229,2255 ----
  				sprintf(cp, "%d year%s",
  						tm->tm_year, ((tm->tm_year != 1) ? "s" : ""));
  				cp += strlen(cp);
+ 				is_before = (tm->tm_year < 0);
  				is_nonzero = TRUE;
  			}
  
  			if (tm->tm_mon != 0)
  			{
! 				sprintf(cp, "%s%s%d mon%s", (is_nonzero ? " " : ""),
! 						((is_before && (tm->tm_mon > 0)) ? "+" : ""),
  						tm->tm_mon, ((tm->tm_mon != 1) ? "s" : ""));
  				cp += strlen(cp);
+ 				is_before = (tm->tm_mon < 0);
  				is_nonzero = TRUE;
  			}
  
  			if (tm->tm_mday != 0)
  			{
! 				sprintf(cp, "%s%s%d day%s", (is_nonzero ? " " : ""),
! 						((is_before && (tm->tm_mday > 0)) ? "+" : ""),
! 						tm->tm_mday, ((tm->tm_mday != 1) ? "s" : ""));
  				cp += strlen(cp);
+ 				is_before = (tm->tm_mday < 0);
  				is_nonzero = TRUE;
  			}
  			{
***************
*** 2251,2257 ****
  							 || (tm->tm_sec < 0) || (fsec < 0));
  
  				sprintf(cp, "%s%s%02d:%02d", (is_nonzero ? " " : ""),
! 						(minus ? "-" : "+"),
  						abs(tm->tm_hour), abs(tm->tm_min));
  				cp += strlen(cp);
  				/* Mark as "non-zero" since the fields are now filled in */
--- 2257,2263 ----
  							 || (tm->tm_sec < 0) || (fsec < 0));
  
  				sprintf(cp, "%s%s%02d:%02d", (is_nonzero ? " " : ""),
! 						(minus ? "-" : (is_nonzero ? "+" : "")),
  						abs(tm->tm_hour), abs(tm->tm_min));
  				cp += strlen(cp);
  				/* Mark as "non-zero" since the fields are now filled in */
***************
*** 2283,2341 ****
  
  			if (tm->tm_year != 0)
  			{
! 				is_before = (tm->tm_year < 0);
! 				if (is_before)
! 					tm->tm_year = -tm->tm_year;
! 				sprintf(cp, "%d year%s",
! 						tm->tm_year, ((tm->tm_year != 1) ? "s" : ""));
  				cp += strlen(cp);
  				is_nonzero = TRUE;
  			}
  
  			if (tm->tm_mon != 0)
  			{
  				if (! is_nonzero)
  					is_before = (tm->tm_mon < 0);
- 				if (is_before)
- 					tm->tm_mon = -tm->tm_mon;
- 				sprintf(cp, "%s%d mon%s", (is_nonzero ? " " : ""),
- 						tm->tm_mon, ((tm->tm_mon != 1) ? "s" : ""));
- 				cp += strlen(cp);
  				is_nonzero = TRUE;
  			}
  
  			if (tm->tm_mday != 0)
  			{
  				if (! is_nonzero)
  					is_before = (tm->tm_mday < 0);
- 				if (is_before)
- 					tm->tm_mday = -tm->tm_mday;
- 				sprintf(cp, "%s%d day%s", (is_nonzero ? " " : ""),
- 				 tm->tm_mday, ((tm->tm_mday != 1) ? "s" : ""));
- 				cp += strlen(cp);
  				is_nonzero = TRUE;
  			}
  			if (tm->tm_hour != 0)
  			{
  				if (! is_nonzero)
  					is_before = (tm->tm_hour < 0);
- 				if (is_before)
- 					tm->tm_hour = -tm->tm_hour;
- 				sprintf(cp, "%s%d hour%s", (is_nonzero ? " " : ""),
- 				 tm->tm_hour, ((tm->tm_hour != 1) ? "s" : ""));
- 				cp += strlen(cp);
  				is_nonzero = TRUE;
  			}
  
  			if (tm->tm_min != 0)
  			{
  				if (! is_nonzero)
  					is_before = (tm->tm_min < 0);
- 				if (is_before)
- 					tm->tm_min = -tm->tm_min;
- 				sprintf(cp, "%s%d min%s", (is_nonzero ? " " : ""),
- 				   tm->tm_min, ((tm->tm_min != 1) ? "s" : ""));
- 				cp += strlen(cp);
  				is_nonzero = TRUE;
  			}
  
--- 2289,2347 ----
  
  			if (tm->tm_year != 0)
  			{
! 				int year = ((tm->tm_year < 0) ? -(tm->tm_year) : tm->tm_year);
! 
! 				sprintf(cp, "%d year%s", year,
! 						((year != 1) ? "s" : ""));
  				cp += strlen(cp);
+ 				is_before = (tm->tm_year < 0);
  				is_nonzero = TRUE;
  			}
  
  			if (tm->tm_mon != 0)
  			{
+ 				int mon = ((is_before && (tm->tm_mon > 0)) ? -(tm->tm_mon) : tm->tm_mon);
+ 
+ 				sprintf(cp, "%s%d mon%s", (is_nonzero ? " " : ""), mon,
+ 						((mon != 1) ? "s" : ""));
+ 				cp += strlen(cp);
  				if (! is_nonzero)
  					is_before = (tm->tm_mon < 0);
  				is_nonzero = TRUE;
  			}
  
  			if (tm->tm_mday != 0)
  			{
+ 				int day = ((is_before && (tm->tm_mday > 0)) ? -(tm->tm_mday) : tm->tm_mday);
+ 
+ 				sprintf(cp, "%s%d day%s", (is_nonzero ? " " : ""), day,
+ 						((day != 1) ? "s" : ""));
+ 				cp += strlen(cp);
  				if (! is_nonzero)
  					is_before = (tm->tm_mday < 0);
  				is_nonzero = TRUE;
  			}
  			if (tm->tm_hour != 0)
  			{
+ 				int hour = ((is_before && (tm->tm_hour > 0)) ? -(tm->tm_hour) : tm->tm_hour);
+ 
+ 				sprintf(cp, "%s%d hour%s", (is_nonzero ? " " : ""), hour,
+ 						((hour != 1) ? "s" : ""));
+ 				cp += strlen(cp);
  				if (! is_nonzero)
  					is_before = (tm->tm_hour < 0);
  				is_nonzero = TRUE;
  			}
  
  			if (tm->tm_min != 0)
  			{
+ 				int min = ((is_before && (tm->tm_min > 0)) ? -(tm->tm_min) : tm->tm_min);
+ 
+ 				sprintf(cp, "%s%d min%s", (is_nonzero ? " " : ""), min,
+ 						((min != 1) ? "s" : ""));
+ 				cp += strlen(cp);
  				if (! is_nonzero)
  					is_before = (tm->tm_min < 0);
  				is_nonzero = TRUE;
  			}
  
***************
*** 2343,2367 ****
  			if (fsec != 0)
  			{
  				fsec += tm->tm_sec;
  				if (! is_nonzero)
  					is_before = (fsec < 0);
- 				if (is_before)
- 					fsec = -fsec;
- 				sprintf(cp, "%s%.2f secs", (is_nonzero ? " " : ""), fsec);
- 				cp += strlen(cp);
  				is_nonzero = TRUE;
  
  				/* otherwise, integer seconds only? */
  			}
  			else if (tm->tm_sec != 0)
  			{
  				if (! is_nonzero)
  					is_before = (tm->tm_sec < 0);
- 				if (is_before)
- 					tm->tm_sec = -tm->tm_sec;
- 				sprintf(cp, "%s%d sec%s", (is_nonzero ? " " : ""),
- 				   tm->tm_sec, ((tm->tm_sec != 1) ? "s" : ""));
- 				cp += strlen(cp);
  				is_nonzero = TRUE;
  			}
  			break;
--- 2349,2372 ----
  			if (fsec != 0)
  			{
  				fsec += tm->tm_sec;
+ 				sprintf(cp, "%s%.2f secs", (is_nonzero ? " " : ""),
+ 						((is_before && (fsec > 0)) ? -(fsec) : fsec));
+ 				cp += strlen(cp);
  				if (! is_nonzero)
  					is_before = (fsec < 0);
  				is_nonzero = TRUE;
  
  				/* otherwise, integer seconds only? */
  			}
  			else if (tm->tm_sec != 0)
  			{
+ 				int sec = ((is_before && (tm->tm_sec > 0)) ? -(tm->tm_sec) : tm->tm_sec);
+ 
+ 				sprintf(cp, "%s%d sec%s", (is_nonzero ? " " : ""), sec,
+ 						((sec != 1) ? "s" : ""));
+ 				cp += strlen(cp);
  				if (! is_nonzero)
  					is_before = (tm->tm_sec < 0);
  				is_nonzero = TRUE;
  			}
  			break;
***************
*** 2374,2380 ****
  		cp += strlen(cp);
  	}
  
! 	if (is_before)
  	{
  		strcat(cp, " ago");
  		cp += strlen(cp);
--- 2379,2385 ----
  		cp += strlen(cp);
  	}
  
! 	if (is_before && (style == USE_POSTGRES_DATES))
  	{
  		strcat(cp, " ago");
  		cp += strlen(cp);
Index: backend/utils/adt/formatting.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/utils/adt/formatting.c,v
retrieving revision 1.28
retrieving revision 1.29
diff -c -r1.28 -r1.29
*** backend/utils/adt/formatting.c	2000/12/23 04:05:31	1.28
--- backend/utils/adt/formatting.c	2001/01/17 16:46:56	1.29
***************
*** 1,7 ****
  /* -----------------------------------------------------------------------
   * formatting.c
   *
!  * $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/utils/adt/formatting.c,v 1.28 2000/12/23 04:05:31 tgl Exp $
   *
   *
   *	 Portions Copyright (c) 1999-2000, PostgreSQL, Inc
--- 1,7 ----
  /* -----------------------------------------------------------------------
   * formatting.c
   *
!  * $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/utils/adt/formatting.c,v 1.29 2001/01/17 16:46:56 thomas Exp $
   *
   *
   *	 Portions Copyright (c) 1999-2000, PostgreSQL, Inc
***************
*** 382,388 ****
  		elog(DEBUG_elog_output, "TM:\nsec %d\nyear %d\nmin %d\nwday %d\nhour %d\nyday %d\nmday %d\nnisdst %d\nmon %d\n",\
  			tm->tm_sec, tm->tm_year,\
  			tm->tm_min, tm->tm_wday, tm->tm_hour, tm->tm_yday,\
! 			tm->tm_mday, tm->tm_isdst,tm->tm_mon)
  #endif
  
  #define ZERO_tm( _X ) \
--- 382,388 ----
  		elog(DEBUG_elog_output, "TM:\nsec %d\nyear %d\nmin %d\nwday %d\nhour %d\nyday %d\nmday %d\nnisdst %d\nmon %d\n",\
  			tm->tm_sec, tm->tm_year,\
  			tm->tm_min, tm->tm_wday, tm->tm_hour, tm->tm_yday,\
! 			tm->tm_mday, tm->tm_isdst, tm->tm_mon)
  #endif
  
  #define ZERO_tm( _X ) \
***************
*** 2933,2941 ****
  # elif defined(HAVE_INT_TIMEZONE)
  
  #  ifdef __CYGWIN__
! 		tz = (tm->tm_isdst ? (_timezone - 3600) : _timezone);
  #  else
! 		tz = (tm->tm_isdst ? (timezone - 3600) : timezone);
  #  endif
  
  # endif
--- 2933,2941 ----
  # elif defined(HAVE_INT_TIMEZONE)
  
  #  ifdef __CYGWIN__
! 		tz = ((tm->tm_isdst > 0) ? (_timezone - 3600) : _timezone);
  #  else
! 		tz = ((tm->tm_isdst > 0) ? (timezone - 3600) : timezone);
  #  endif
  
  # endif
Index: backend/utils/adt/nabstime.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/utils/adt/nabstime.c,v
retrieving revision 1.77
retrieving revision 1.78
diff -c -r1.77 -r1.78
*** backend/utils/adt/nabstime.c	2000/12/09 20:40:57	1.77
--- backend/utils/adt/nabstime.c	2001/01/17 16:46:56	1.78
***************
*** 9,15 ****
   *
   *
   * IDENTIFICATION
!  *	  $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/utils/adt/nabstime.c,v 1.77 2000/12/09 20:40:57 tgl Exp $
   *
   * NOTES
   *
--- 9,15 ----
   *
   *
   * IDENTIFICATION
!  *	  $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/utils/adt/nabstime.c,v 1.78 2001/01/17 16:46:56 thomas Exp $
   *
   * NOTES
   *
***************
*** 162,170 ****
  		CDayLight = tm->tm_isdst;
  		CTimeZone =
  # ifdef __CYGWIN__
! 			(tm->tm_isdst ? (_timezone - 3600) : _timezone);
  # else
! 			(tm->tm_isdst ? (timezone - 3600) : timezone);
  # endif
  		strcpy(CTZName, tzname[tm->tm_isdst]);
  #else /* neither HAVE_TM_ZONE nor HAVE_INT_TIMEZONE */
--- 162,170 ----
  		CDayLight = tm->tm_isdst;
  		CTimeZone =
  # ifdef __CYGWIN__
! 			((tm->tm_isdst > 0) ? (_timezone - 3600) : _timezone);
  # else
! 			((tm->tm_isdst > 0) ? (timezone - 3600) : timezone);
  # endif
  		strcpy(CTZName, tzname[tm->tm_isdst]);
  #else /* neither HAVE_TM_ZONE nor HAVE_INT_TIMEZONE */
***************
*** 245,253 ****
  # elif defined(HAVE_INT_TIMEZONE)
  	if (tzp != NULL)
  #  ifdef __CYGWIN__
! 		*tzp = (tm->tm_isdst ? (_timezone - 3600) : _timezone);
  #  else
! 		*tzp = (tm->tm_isdst ? (timezone - 3600) : timezone);
  #  endif
  	if (tzn != NULL)
  	{
--- 245,253 ----
  # elif defined(HAVE_INT_TIMEZONE)
  	if (tzp != NULL)
  #  ifdef __CYGWIN__
! 		*tzp = ((tm->tm_isdst > 0) ? (_timezone - 3600) : _timezone);
  #  else
! 		*tzp = ((tm->tm_isdst > 0) ? (timezone - 3600) : timezone);
  #  endif
  	if (tzn != NULL)
  	{
Index: backend/utils/adt/timestamp.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/utils/adt/timestamp.c,v
retrieving revision 1.41
retrieving revision 1.42
diff -c -r1.41 -r1.42
*** backend/utils/adt/timestamp.c	2001/01/03 16:48:02	1.41
--- backend/utils/adt/timestamp.c	2001/01/17 16:46:56	1.42
***************
*** 8,14 ****
   *
   *
   * IDENTIFICATION
!  *	  $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/utils/adt/timestamp.c,v 1.41 2001/01/03 16:48:02 thomas Exp $
   *
   *-------------------------------------------------------------------------
   */
--- 8,14 ----
   *
   *
   * IDENTIFICATION
!  *	  $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/utils/adt/timestamp.c,v 1.42 2001/01/17 16:46:56 thomas Exp $
   *
   *-------------------------------------------------------------------------
   */
***************
*** 341,349 ****
  				*tzn = (char *) tm->tm_zone;
  # elif defined(HAVE_INT_TIMEZONE)
  #  ifdef __CYGWIN__
! 			*tzp = (tm->tm_isdst ? (_timezone - 3600) : _timezone);
  #  else
! 			*tzp = (tm->tm_isdst ? (timezone - 3600) : timezone);
  #  endif
  			if (tzn != NULL)
  				*tzn = tzname[(tm->tm_isdst > 0)];
--- 341,349 ----
  				*tzn = (char *) tm->tm_zone;
  # elif defined(HAVE_INT_TIMEZONE)
  #  ifdef __CYGWIN__
! 			*tzp = ((tm->tm_isdst > 0) ? (_timezone - 3600) : _timezone);
  #  else
! 			*tzp = ((tm->tm_isdst > 0) ? (timezone - 3600) : timezone);
  #  endif
  			if (tzn != NULL)
  				*tzn = tzname[(tm->tm_isdst > 0)];
***************
*** 1086,1094 ****
  # elif defined(HAVE_INT_TIMEZONE)
  
  #  ifdef __CYGWIN__
! 					tz = (tm->tm_isdst ? (_timezone - 3600) : _timezone);
  #  else
! 					tz = (tm->tm_isdst ? (timezone - 3600) : timezone);
  #  endif
  
  # endif
--- 1086,1094 ----
  # elif defined(HAVE_INT_TIMEZONE)
  
  #  ifdef __CYGWIN__
! 					tz = ((tm->tm_isdst > 0) ? (_timezone - 3600) : _timezone);
  #  else
! 					tz = ((tm->tm_isdst > 0) ? (timezone - 3600) : timezone);
  #  endif
  
  # endif
***************
*** 1735,1743 ****
  # elif defined(HAVE_INT_TIMEZONE)
  
  #  ifdef __CYGWIN__
! 				tz = (tm->tm_isdst ? (_timezone - 3600) : _timezone);
  #  else
! 				tz = (tm->tm_isdst ? (timezone - 3600) : timezone);
  #  endif
  
  # endif
--- 1735,1743 ----
  # elif defined(HAVE_INT_TIMEZONE)
  
  #  ifdef __CYGWIN__
! 				tz = ((tm->tm_isdst > 0) ? (_timezone - 3600) : _timezone);
  #  else
! 				tz = ((tm->tm_isdst > 0) ? (timezone - 3600) : timezone);
  #  endif
  
  # endif
Index: include/nodes/primnodes.h
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/include/nodes/primnodes.h,v
retrieving revision 1.49
retrieving revision 1.50
diff -c -r1.49 -r1.50
*** include/nodes/primnodes.h	2000/09/29 18:21:39	1.49
--- include/nodes/primnodes.h	2001/01/17 06:41:31	1.50
***************
*** 10,16 ****
   * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
   * Portions Copyright (c) 1994, Regents of the University of California
   *
!  * $Id: primnodes.h,v 1.49 2000/09/29 18:21:39 tgl Exp $
   *
   *-------------------------------------------------------------------------
   */
--- 10,16 ----
   * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
   * Portions Copyright (c) 1994, Regents of the University of California
   *
!  * $Id: primnodes.h,v 1.50 2001/01/17 06:41:31 momjian Exp $
   *
   *-------------------------------------------------------------------------
   */
***************
*** 29,45 ****
   * ----------------------------------------------------------------
   */
  
! /* ----------------
   * Resdom (Result Domain)
-  *		resno			- attribute number
-  *		restype			- type of the value
-  *		restypmod		- type-specific modifier of the value
-  *		resname			- name of the resdom (could be NULL)
-  *		ressortgroupref - nonzero if referenced by a sort/group clause
-  *		reskey			- order of key in a sort (for those > 0)
-  *		reskeyop		- sort operator's regproc Oid
-  *		resjunk			- set to true to eliminate the attribute
-  *						  from final target list
   *
   * Notes:
   * ressortgroupref is the parse/plan-time representation of ORDER BY and
--- 29,36 ----
   * ----------------------------------------------------------------
   */
  
! /*
   * Resdom (Result Domain)
   *
   * Notes:
   * ressortgroupref is the parse/plan-time representation of ORDER BY and
***************
*** 59,104 ****
   *
   * Both reskey and reskeyop are typically zero during parse/plan stages.
   * The executor does not pay any attention to ressortgroupref.
!  * ----------------
   */
  typedef struct Resdom
  {
! 	NodeTag		type;
! 	AttrNumber	resno;
! 	Oid			restype;
! 	int32		restypmod;
! 	char	   *resname;
  	Index		ressortgroupref;
! 	Index		reskey;
! 	Oid			reskeyop;
! 	bool		resjunk;
  } Resdom;
  
! /* -------------
   * Fjoin
-  *		initialized		- true if the Fjoin has already been initialized for
-  *						  the current target list evaluation
-  *		nNodes			- The number of Iter nodes returning sets that the
-  *						  node will flatten
-  *		outerList		- 1 or more Iter nodes
-  *		inner			- exactly one Iter node.  We eval every node in the
-  *						  outerList once then eval the inner node to completion
-  *						  pair the outerList result vector with each inner
-  *						  result to form the full result.  When the inner has
-  *						  been exhausted, we get the next outer result vector
-  *						  and reset the inner.
-  *		results			- The complete (flattened) result vector
-  *		alwaysNull		- a null vector to indicate sets with a cardinality of
-  *						  0, we treat them as the set {NULL}.
   */
  typedef struct Fjoin
  {
  	NodeTag		type;
! 	bool		fj_initialized;
! 	int			fj_nNodes;
! 	List	   *fj_innerNode;
! 	DatumPtr	fj_results;
! 	BoolPtr		fj_alwaysDone;
  } Fjoin;
  
  
--- 50,97 ----
   *
   * Both reskey and reskeyop are typically zero during parse/plan stages.
   * The executor does not pay any attention to ressortgroupref.
!  *
   */
  typedef struct Resdom
  {
! 	NodeTag		type;		
! 	AttrNumber	resno;		/* attribute number */
! 	Oid			restype;	/* type of the value */
! 	int32		restypmod;	/* type-specific modifier of the value */
! 	char	   *resname;	/* name of the resdom (could be NULL) */
  	Index		ressortgroupref;
! 							/* nonzero if referenced by a sort/group clause */
! 	Index		reskey;		/* order of key in a sort (for those > 0) */
! 	Oid			reskeyop;	/* sort operator's regproc Oid */
! 	bool		resjunk;	/* set to true to eliminate the attribute
!  *						       from final target list */
  } Resdom;
  
! /*
   * Fjoin
   */
  typedef struct Fjoin
  {
  	NodeTag		type;
! 	bool		fj_initialized;	/* true if the Fjoin has already been
! 								 * initialized for the current target
! 								 * list evaluation */
! 	int			fj_nNodes;		/* The number of Iter nodes returning
! 								 * sets that the node will flatten */
! 	List	   *fj_innerNode;	/* exactly one Iter node.  We eval every
! 								 * node in the outerList once then eval
! 								 * the inner node to completion pair the
! 								 * outerList result vector with each inner
! 								 * result to form the full result.  When
! 								 * the inner has been exhausted, we get
! 								 * the next outer result vector and reset
! 								 * the inner.
! 								 */
! 	DatumPtr	fj_results;		/* The complete (flattened) result vector */
! 	BoolPtr		fj_alwaysDone;	/* a null vector to indicate sets with a
! 								 * cardinality of 0, we treat them as the
! 								 * set {NULL}.
! 								 */
  } Fjoin;
  
  
***************
*** 107,119 ****
   * ----------------------------------------------------------------
   */
  
! /* ----------------
   * Expr
-  *		typeOid			- oid of the type of this expression
-  *		opType			- type of this expression
-  *		oper			- operator node if needed (Oper, Func, or SubPlan)
-  *		args			- arguments to this expression
-  * ----------------
   */
  typedef enum OpType
  {
--- 100,107 ----
   * ----------------------------------------------------------------
   */
  
! /*
   * Expr
   */
  typedef enum OpType
  {
***************
*** 123,145 ****
  typedef struct Expr
  {
  	NodeTag		type;
! 	Oid			typeOid;		/* oid of the type of this expr */
! 	OpType		opType;			/* type of the op */
! 	Node	   *oper;			/* could be Oper or Func or SubPlan */
! 	List	   *args;			/* list of argument nodes */
  } Expr;
  
! /* ----------------
   * Var
-  *		varno			- index of this var's relation in the range table
-  *						  (could also be INNER or OUTER)
-  *		varattno		- attribute number of this var, or zero for all
-  *		vartype			- pg_type tuple OID for the type of this var
-  *		vartypmod		- pg_attribute typmod value
-  *		varlevelsup		- for subquery variables referencing outer relations;
-  *						  0 in a normal var, >0 means N levels up
-  *		varnoold		- original value of varno
-  *		varoattno		- original value of varattno
   *
   * Note: during parsing/planning, varnoold/varoattno are always just copies
   * of varno/varattno.  At the tail end of planning, Var nodes appearing in
--- 111,125 ----
  typedef struct Expr
  {
  	NodeTag		type;
! 	Oid			typeOid;	/* oid of the type of this expression */
! 	OpType		opType;		/* type of this expression */
! 	Node	   *oper;		/* operator node if needed (Oper, Func, or
! 							 * SubPlan) */
! 	List	   *args;		/* arguments to this expression */
  } Expr;
  
! /*
   * Var
   *
   * Note: during parsing/planning, varnoold/varoattno are always just copies
   * of varno/varattno.  At the tail end of planning, Var nodes appearing in
***************
*** 160,182 ****
  typedef struct Var
  {
  	NodeTag		type;
! 	Index		varno;
! 	AttrNumber	varattno;
! 	Oid			vartype;
! 	int32		vartypmod;
  	Index		varlevelsup;
! 	Index		varnoold;		/* mainly for debugging --- see above */
! 	AttrNumber	varoattno;
  } Var;
  
! /* ----------------
   * Oper
-  *		opno			- PG_OPERATOR OID of the operator
-  *		opid			- PG_PROC OID for the operator's underlying function
-  *		opresulttype	- PG_TYPE OID of the operator's return value
-  *		op_fcache		- runtime state while running the function
   *
-  * ----
   * NOTE: in the good old days 'opno' used to be both (or either, or
   * neither) the pg_operator oid, and/or the pg_proc oid depending
   * on the postgres module in question (parser->pg_operator,
--- 140,161 ----
  typedef struct Var
  {
  	NodeTag		type;
! 	Index		varno;		/* index of this var's relation in the range
! 							 * table (could also be INNER or OUTER) */
! 	AttrNumber	varattno;	/* attribute number of this var, or zero for all */
! 	Oid			vartype;	/* pg_type tuple OID for the type of this var */
! 	int32		vartypmod;	/* pg_attribute typmod value */
  	Index		varlevelsup;
! 							/* for subquery variables referencing outer
! 							 * relations; 0 in a normal var, >0 means N
! 							 * levels up */
! 	Index		varnoold;	/* original value of varno, for debugging */
! 	AttrNumber	varoattno;	/* original value of varattno */
  } Var;
  
! /*
   * Oper
   *
   * NOTE: in the good old days 'opno' used to be both (or either, or
   * neither) the pg_operator oid, and/or the pg_proc oid depending
   * on the postgres module in question (parser->pg_operator,
***************
*** 190,232 ****
   * Note also that opid is not necessarily filled in immediately on creation
   * of the node.  The planner makes sure it is valid before passing the node
   * tree to the executor, but during parsing/planning opid is typically 0.
!  * ----------------
   */
  typedef struct Oper
  {
  	NodeTag		type;
! 	Oid			opno;
! 	Oid			opid;
  	Oid			opresulttype;
  	FunctionCachePtr op_fcache;
  } Oper;
  
  
! /* ----------------
   * Const
-  *		consttype - PG_TYPE OID of the constant's value
-  *		constlen - length in bytes of the constant's value
-  *		constvalue - the constant's value
-  *		constisnull - whether the constant is null
-  *				(if true, the other fields are undefined)
-  *		constbyval - whether the information in constvalue
-  *				if passed by value.  If true, then all the information
-  *				is stored in the datum. If false, then the datum
-  *				contains a pointer to the information.
-  *		constisset - whether the const represents a set.  The const
-  *				value corresponding will be the query that defines
-  *				the set.
-  * ----------------
   */
  typedef struct Const
  {
  	NodeTag		type;
! 	Oid			consttype;
! 	int			constlen;
! 	Datum		constvalue;
! 	bool		constisnull;
! 	bool		constbyval;
! 	bool		constisset;
  	bool		constiscast;
  } Const;
  
--- 169,208 ----
   * Note also that opid is not necessarily filled in immediately on creation
   * of the node.  The planner makes sure it is valid before passing the node
   * tree to the executor, but during parsing/planning opid is typically 0.
!  *
   */
  typedef struct Oper
  {
  	NodeTag		type;
! 	Oid			opno;		/* PG_OPERATOR OID of the operator */
! 	Oid			opid;		/* PG_PROC OID for the operator's underlying
! 							 * function */
  	Oid			opresulttype;
+ 							/* PG_TYPE OID of the operator's return value */
  	FunctionCachePtr op_fcache;
+ 							/* runtime state while running the function */
  } Oper;
  
  
! /*
   * Const
   */
  typedef struct Const
  {
  	NodeTag		type;
! 	Oid			consttype;		/* PG_TYPE OID of the constant's value */
! 	int			constlen;		/* length in bytes of the constant's value */
! 	Datum		constvalue;		/* the constant's value */
! 	bool		constisnull;	/* whether the constant is null (if true,
! 								 * the other fields are undefined) */
! 	bool		constbyval;		/* whether the information in constvalue
! 								 * if passed by value.  If true, then all
! 								 * the information is stored in the datum.
! 								 * If false, then the datum contains a pointer
! 								 * to the information. */
! 	bool		constisset;		/* whether the const represents a set.
! 								 * The const value corresponding will be the
! 								 * query that defines the set. */
  	bool		constiscast;
  } Const;
  
***************
*** 250,287 ****
   *
   *		PARAM_OLD:	 Same as PARAM_NEW, but in this case we refer to
   *				the "OLD" tuple.
-  *
-  *		paramid - numeric identifier for literal-constant parameters ("$1")
-  *		paramname - attribute name for tuple-substitution parameters ("$.foo")
-  *		paramtype - PG_TYPE OID of the parameter's value
   * ----------------
   */
  typedef struct Param
  {
  	NodeTag		type;
! 	int			paramkind;
! 	AttrNumber	paramid;
! 	char	   *paramname;
! 	Oid			paramtype;
  } Param;
  
  
! /* ----------------
   * Func
-  *		funcid			- PG_PROC OID of the function
-  *		functype		- PG_TYPE OID of the function's return value
-  *		func_fcache		- runtime state while running this function.  Where
-  *						  we are in the execution of the function if it
-  *						  returns more than one value, etc.
-  *						  See utils/fcache.h
-  * ----------------
   */
  typedef struct Func
  {
  	NodeTag		type;
! 	Oid			funcid;
! 	Oid			functype;
  	FunctionCachePtr func_fcache;
  } Func;
  
  /* ----------------
--- 226,258 ----
   *
   *		PARAM_OLD:	 Same as PARAM_NEW, but in this case we refer to
   *				the "OLD" tuple.
   * ----------------
   */
  typedef struct Param
  {
  	NodeTag		type;
! 	int			paramkind;	/* specifies the kind of parameter.  See above */
! 	AttrNumber	paramid;	/* numeric identifier for literal-constant
! 							 * parameters ("$1") */
! 	char	   *paramname;	/* attribute name for tuple-substitution
! 							 * parameters ("$.foo") */
! 	Oid			paramtype;	/* PG_TYPE OID of the parameter's value */
  } Param;
  
  
! /*
   * Func
   */
  typedef struct Func
  {
  	NodeTag		type;
! 	Oid			funcid;		/* PG_PROC OID of the function */
! 	Oid			functype;	/* PG_TYPE OID of the function's return value */
  	FunctionCachePtr func_fcache;
+ 							/* runtime state while running this function.
+ 							 * Where we are in the execution of the function
+ 							 * if it returns more than one value, etc.
+ 							 * See utils/fcache.h */
  } Func;
  
  /* ----------------
***************
*** 298,333 ****
  								 * checking) */
  } Iter;
  
! /* ----------------
   * Aggref
-  *		aggname			- name of the aggregate
-  *		basetype		- base type Oid of the aggregate (ie, input type)
-  *		aggtype			- type Oid of final result of the aggregate
-  *		target			- attribute or expression we are aggregating on
-  *		aggstar			- TRUE if argument was really '*'
-  *		aggdistinct		- TRUE if it's agg(DISTINCT ...)
-  *		aggno			- workspace for executor (see nodeAgg.c)
-  * ----------------
   */
  typedef struct Aggref
  {
  	NodeTag		type;
! 	char	   *aggname;
! 	Oid			basetype;
! 	Oid			aggtype;
! 	Node	   *target;
! 	bool		aggstar;
! 	bool		aggdistinct;
! 	int			aggno;
  } Aggref;
  
  /* ----------------
   * SubLink
-  *		subLinkType		- EXISTS, ALL, ANY, MULTIEXPR, EXPR
-  *		useor			- TRUE to combine column results with "OR" not "AND"
-  *		lefthand		- list of outer-query expressions on the left
-  *		oper			- list of Oper nodes for combining operators
-  *		subselect		- subselect as Query* or parsetree
   *
   * A SubLink represents a subselect appearing in an expression, and in some
   * cases also the combining operator(s) just above it.	The subLinkType
--- 269,292 ----
  								 * checking) */
  } Iter;
  
! /*
   * Aggref
   */
  typedef struct Aggref
  {
  	NodeTag		type;
! 	char	   *aggname;	/* name of the aggregate */
! 	Oid			basetype;	/* base type Oid of the aggregate
! 							 * (ie, input type) */
! 	Oid			aggtype;	/* type Oid of final result of the aggregate */
! 	Node	   *target;		/* attribute or expression we are aggregating on */
! 	bool		aggstar;	/* TRUE if argument was really '*' */
! 	bool		aggdistinct;/* TRUE if it's agg(DISTINCT ...) */
! 	int			aggno;		/* workspace for executor (see nodeAgg.c) */
  } Aggref;
  
  /* ----------------
   * SubLink
   *
   * A SubLink represents a subselect appearing in an expression, and in some
   * cases also the combining operator(s) just above it.	The subLinkType
***************
*** 385,395 ****
  typedef struct SubLink
  {
  	NodeTag		type;
! 	SubLinkType subLinkType;
! 	bool		useor;
! 	List	   *lefthand;
! 	List	   *oper;
! 	Node	   *subselect;
  } SubLink;
  
  /* ----------------
--- 344,355 ----
  typedef struct SubLink
  {
  	NodeTag		type;
! 	SubLinkType subLinkType;/* EXISTS, ALL, ANY, MULTIEXPR, EXPR */
! 	bool		useor;		/* TRUE to combine column results with "OR"
! 							 * not "AND" */
! 	List	   *lefthand;	/* list of outer-query expressions on the left */
! 	List	   *oper;		/* list of Oper nodes for combining operators */
! 	Node	   *subselect;	/* subselect as Query* or parsetree */
  } SubLink;
  
  /* ----------------
***************
*** 402,416 ****
   * appropriate part of the array; the result of the operation is an
   * entire new modified array value.
   *
-  *		refattrlength	- typlen of array type
-  *		refelemtype		- type of the result of the ArrayRef operation
-  *		refelemlength	- typlen of the array element type
-  *		refelembyval	- is the element type pass-by-value?
-  *		refupperindexpr - expressions that evaluate to upper array indexes
-  *		reflowerindexpr - expressions that evaluate to lower array indexes
-  *		refexpr			- the expression that evaluates to an array value
-  *		refassgnexpr	- expression for the source value, or NULL if fetch
-  *
   * If reflowerindexpr = NIL, then we are fetching or storing a single array
   * element at the subscripts given by refupperindexpr.	Otherwise we are
   * fetching or storing an array slice, that is a rectangular subarray
--- 362,367 ----
***************
*** 432,453 ****
  typedef struct ArrayRef
  {
  	NodeTag		type;
! 	int			refattrlength;
! 	int			refelemlength;
! 	Oid			refelemtype;
! 	bool		refelembyval;
! 	List	   *refupperindexpr;
! 	List	   *reflowerindexpr;
! 	Node	   *refexpr;
! 	Node	   *refassgnexpr;
  } ArrayRef;
  
  /* ----------------
   * FieldSelect
-  *		arg				- input expression
-  *		fieldnum		- attribute number of field to extract
-  *		resulttype		- type of the field (result type of this node)
-  *		resulttypmod	- output typmod (usually -1)
   *
   * FieldSelect represents the operation of extracting one field from a tuple
   * value.  At runtime, the input expression is expected to yield a Datum
--- 383,405 ----
  typedef struct ArrayRef
  {
  	NodeTag		type;
! 	int			refattrlength;		/* typlen of array type */
! 	int			refelemlength;		/* typlen of the array element type */
! 	Oid			refelemtype;		/* type of the result of the ArrayRef
! 								 	 * operation */
! 	bool		refelembyval;		/* is the element type pass-by-value? */
! 	List	   *refupperindexpr;	/* expressions that evaluate to upper
! 								 	 * array indexes */
! 	List	   *reflowerindexpr;	/* expressions that evaluate to lower
! 								 	 * array indexes */
! 	Node	   *refexpr;			/* the expression that evaluates to an
! 									 * array value */
! 	Node	   *refassgnexpr;		/* expression for the source value, or NULL
! 								 	 * if fetch */
  } ArrayRef;
  
  /* ----------------
   * FieldSelect
   *
   * FieldSelect represents the operation of extracting one field from a tuple
   * value.  At runtime, the input expression is expected to yield a Datum
***************
*** 459,475 ****
  typedef struct FieldSelect
  {
  	NodeTag		type;
! 	Node	   *arg;
! 	AttrNumber	fieldnum;
! 	Oid			resulttype;
! 	int32		resulttypmod;
  } FieldSelect;
  
  /* ----------------
   * RelabelType
-  *		arg				- input expression
-  *		resulttype		- output type of coercion expression
-  *		resulttypmod	- output typmod (usually -1)
   *
   * RelabelType represents a "dummy" type coercion between two binary-
   * compatible datatypes, such as reinterpreting the result of an OID
--- 411,425 ----
  typedef struct FieldSelect
  {
  	NodeTag		type;
! 	Node	   *arg;			/* input expression */
! 	AttrNumber	fieldnum;		/* attribute number of field to extract */
! 	Oid			resulttype;		/* type of the field (result type of this
! 								 * node) */
! 	int32		resulttypmod;	/* output typmod (usually -1) */
  } FieldSelect;
  
  /* ----------------
   * RelabelType
   *
   * RelabelType represents a "dummy" type coercion between two binary-
   * compatible datatypes, such as reinterpreting the result of an OID
***************
*** 484,492 ****
  typedef struct RelabelType
  {
  	NodeTag		type;
! 	Node	   *arg;
! 	Oid			resulttype;
! 	int32		resulttypmod;
  } RelabelType;
  
  
--- 434,442 ----
  typedef struct RelabelType
  {
  	NodeTag		type;
! 	Node	   *arg;			/* input expression */
! 	Oid			resulttype;		/* output type of coercion expression */
! 	int32		resulttypmod;	/* output typmod (usually -1) */
  } RelabelType;
  
  
