diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c
index 27b187f2a5e3b70fa6c3feffce71969c81b1056d..67f36f73e4ab799031117e40adf14763e152ff79 100644
--- a/src/backend/executor/execMain.c
+++ b/src/backend/executor/execMain.c
@@ -27,7 +27,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.165 2002/06/20 20:29:27 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.166 2002/06/25 17:27:20 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -62,14 +62,14 @@ static TupleTableSlot *ExecutePlan(EState *estate, Plan *plan,
 			long numberTuples,
 			ScanDirection direction,
 			DestReceiver *destfunc);
-static void ExecRetrieve(TupleTableSlot *slot,
+static void ExecSelect(TupleTableSlot *slot,
 			 DestReceiver *destfunc,
 			 EState *estate);
-static void ExecAppend(TupleTableSlot *slot, ItemPointer tupleid,
+static void ExecInsert(TupleTableSlot *slot, ItemPointer tupleid,
 		   EState *estate);
 static void ExecDelete(TupleTableSlot *slot, ItemPointer tupleid,
 		   EState *estate);
-static void ExecReplace(TupleTableSlot *slot, ItemPointer tupleid,
+static void ExecUpdate(TupleTableSlot *slot, ItemPointer tupleid,
 			EState *estate);
 static TupleTableSlot *EvalPlanQualNext(EState *estate);
 static void EndEvalPlanQual(EState *estate);
@@ -251,7 +251,7 @@ ExecCheckQueryPerms(CmdType operation, Query *parseTree, Plan *plan)
 	ExecCheckRTPerms(parseTree->rtable, operation);
 
 	/*
-	 * Search for subplans and APPEND nodes to check their rangetables.
+	 * Search for subplans and INSERT nodes to check their rangetables.
 	 */
 	ExecCheckPlanPerms(plan, parseTree->rtable, operation);
 }
@@ -583,7 +583,7 @@ InitPlan(CmdType operation, Query *parseTree, Plan *plan, EState *estate)
 	/*
 	 * Get the tuple descriptor describing the type of tuples to return.
 	 * (this is especially important if we are creating a relation with
-	 * "retrieve into")
+	 * "SELECT INTO")
 	 */
 	tupType = ExecGetTupType(plan);		/* tuple descriptor */
 
@@ -892,7 +892,7 @@ EndPlan(Plan *plan, EState *estate)
  *		Retrieves all tuples if numberTuples is 0
  *
  *		result is either a slot containing the last tuple in the case
- *		of a RETRIEVE or NULL otherwise.
+ *		of a SELECT or NULL otherwise.
  *
  * Note: the ctid attribute is a 'junk' attribute that is removed before the
  * user can see it
@@ -1068,29 +1068,26 @@ lnext:	;
 
 			slot = ExecStoreTuple(newTuple,		/* tuple to store */
 								  junkfilter->jf_resultSlot,	/* dest slot */
-								  InvalidBuffer,		/* this tuple has no
-														 * buffer */
+								  InvalidBuffer,	/* this tuple has no buffer */
 								  true);		/* tuple should be pfreed */
-		}						/* if (junkfilter... */
+		}
 
 		/*
 		 * now that we have a tuple, do the appropriate thing with it..
 		 * either return it to the user, add it to a relation someplace,
 		 * delete it from a relation, or modify some of its attributes.
 		 */
-
 		switch (operation)
 		{
 			case CMD_SELECT:
-				ExecRetrieve(slot,		/* slot containing tuple */
-							 destfunc,	/* destination's tuple-receiver
-										 * obj */
-							 estate);	/* */
+				ExecSelect(slot,		/* slot containing tuple */
+						   destfunc,	/* destination's tuple-receiver obj */
+						   estate);
 				result = slot;
 				break;
 
 			case CMD_INSERT:
-				ExecAppend(slot, tupleid, estate);
+				ExecInsert(slot, tupleid, estate);
 				result = NULL;
 				break;
 
@@ -1100,7 +1097,7 @@ lnext:	;
 				break;
 
 			case CMD_UPDATE:
-				ExecReplace(slot, tupleid, estate);
+				ExecUpdate(slot, tupleid, estate);
 				result = NULL;
 				break;
 
@@ -1121,25 +1118,25 @@ lnext:	;
 
 	/*
 	 * here, result is either a slot containing a tuple in the case of a
-	 * RETRIEVE or NULL otherwise.
+	 * SELECT or NULL otherwise.
 	 */
 	return result;
 }
 
 /* ----------------------------------------------------------------
- *		ExecRetrieve
+ *		ExecSelect
  *
- *		RETRIEVEs are easy.. we just pass the tuple to the appropriate
+ *		SELECTs are easy.. we just pass the tuple to the appropriate
  *		print function.  The only complexity is when we do a
- *		"retrieve into", in which case we insert the tuple into
+ *		"SELECT INTO", in which case we insert the tuple into
  *		the appropriate relation (note: this is a newly created relation
  *		so we don't need to worry about indices or locks.)
  * ----------------------------------------------------------------
  */
 static void
-ExecRetrieve(TupleTableSlot *slot,
-			 DestReceiver *destfunc,
-			 EState *estate)
+ExecSelect(TupleTableSlot *slot,
+		   DestReceiver *destfunc,
+		   EState *estate)
 {
 	HeapTuple	tuple;
 	TupleDesc	attrtype;
@@ -1169,16 +1166,15 @@ ExecRetrieve(TupleTableSlot *slot,
 }
 
 /* ----------------------------------------------------------------
- *		ExecAppend
+ *		ExecInsert
  *
- *		APPENDs are trickier.. we have to insert the tuple into
+ *		INSERTs are trickier.. we have to insert the tuple into
  *		the base relation and insert appropriate tuples into the
  *		index relations.
  * ----------------------------------------------------------------
  */
-
 static void
-ExecAppend(TupleTableSlot *slot,
+ExecInsert(TupleTableSlot *slot,
 		   ItemPointer tupleid,
 		   EState *estate)
 {
@@ -1227,7 +1223,7 @@ ExecAppend(TupleTableSlot *slot,
 	 * Check the constraints of the tuple
 	 */
 	if (resultRelationDesc->rd_att->constr)
-		ExecConstraints("ExecAppend", resultRelInfo, slot, estate);
+		ExecConstraints("ExecInsert", resultRelInfo, slot, estate);
 
 	/*
 	 * insert the tuple
@@ -1259,7 +1255,7 @@ ExecAppend(TupleTableSlot *slot,
 /* ----------------------------------------------------------------
  *		ExecDelete
  *
- *		DELETE is like append, we delete the tuple and its
+ *		DELETE is like UPDATE, we delete the tuple and its
  *		index tuples.
  * ----------------------------------------------------------------
  */
@@ -1346,18 +1342,18 @@ ldelete:;
 }
 
 /* ----------------------------------------------------------------
- *		ExecReplace
+ *		ExecUpdate
  *
- *		note: we can't run replace queries with transactions
- *		off because replaces are actually appends and our
- *		scan will mistakenly loop forever, replacing the tuple
- *		it just appended..	This should be fixed but until it
+ *		note: we can't run UPDATE queries with transactions
+ *		off because UPDATEs are actually INSERTs and our
+ *		scan will mistakenly loop forever, updating the tuple
+ *		it just inserted..	This should be fixed but until it
  *		is, we don't want to get stuck in an infinite loop
  *		which corrupts your database..
  * ----------------------------------------------------------------
  */
 static void
-ExecReplace(TupleTableSlot *slot,
+ExecUpdate(TupleTableSlot *slot,
 			ItemPointer tupleid,
 			EState *estate)
 {
@@ -1373,7 +1369,7 @@ ExecReplace(TupleTableSlot *slot,
 	 */
 	if (IsBootstrapProcessingMode())
 	{
-		elog(WARNING, "ExecReplace: replace can't run without transactions");
+		elog(WARNING, "ExecUpdate: UPDATE can't run without transactions");
 		return;
 	}
 
@@ -1424,7 +1420,7 @@ ExecReplace(TupleTableSlot *slot,
 	 */
 lreplace:;
 	if (resultRelationDesc->rd_att->constr)
-		ExecConstraints("ExecReplace", resultRelInfo, slot, estate);
+		ExecConstraints("ExecUpdate", resultRelInfo, slot, estate);
 
 	/*
 	 * replace the heap tuple
@@ -1472,7 +1468,7 @@ lreplace:;
 	/*
 	 * Note: instead of having to update the old index tuples associated
 	 * with the heap tuple, all we do is form and insert new index tuples.
-	 * This is because replaces are actually deletes and inserts and index
+	 * This is because UPDATEs are actually DELETEs and INSERTs and index
 	 * tuple deletion is done automagically by the vacuum daemon. All we
 	 * do is insert new index tuples.  -cim 9/27/89
 	 */
@@ -1481,7 +1477,7 @@ lreplace:;
 	 * process indices
 	 *
 	 * heap_update updates a tuple in the base relation by invalidating it
-	 * and then appending a new tuple to the relation.	As a side effect,
+	 * and then inserting a new tuple to the relation.	As a side effect,
 	 * the tupleid of the new tuple is placed in the new tuple's t_ctid
 	 * field.  So we now insert index tuples using the new tupleid stored
 	 * there.
@@ -1554,7 +1550,7 @@ ExecRelCheck(ResultRelInfo *resultRelInfo,
 }
 
 void
-ExecConstraints(char *caller, ResultRelInfo *resultRelInfo,
+ExecConstraints(const char *caller, ResultRelInfo *resultRelInfo,
 				TupleTableSlot *slot, EState *estate)
 {
 	Relation	rel = resultRelInfo->ri_RelationDesc;
diff --git a/src/backend/executor/execUtils.c b/src/backend/executor/execUtils.c
index 122417efd61bb37c61272ca931322818aaa54d41..74bb477e0e65b6d611afb2f4b393d5ce44b648d3 100644
--- a/src/backend/executor/execUtils.c
+++ b/src/backend/executor/execUtils.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.83 2002/06/20 20:29:28 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.84 2002/06/25 17:27:20 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -18,7 +18,7 @@
  *
  *		ExecOpenIndices			\
  *		ExecCloseIndices		 | referenced by InitPlan, EndPlan,
- *		ExecInsertIndexTuples	/  ExecAppend, ExecReplace
+ *		ExecInsertIndexTuples	/  ExecInsert, ExecUpdate
  *
  *		RegisterExprContextCallback    Register function shutdown callback
  *		UnregisterExprContextCallback  Deregister function shutdown callback
diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c
index 3bf6d2f4dc8353ba96e42fbac80cd0f6f6e67bf8..b626567b21c78f3a7f6d450c462625e3899edc16 100644
--- a/src/backend/optimizer/path/costsize.c
+++ b/src/backend/optimizer/path/costsize.c
@@ -42,7 +42,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/costsize.c,v 1.85 2002/06/20 20:29:29 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/costsize.c,v 1.86 2002/06/25 17:27:20 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -154,11 +154,11 @@ cost_seqscan(Path *path, Query *root,
  *
  * Given a guesstimated cache size, we estimate the actual I/O cost per page
  * with the entirely ad-hoc equations:
- *	for rel_size <= effective_cache_size:
- *		1 + (random_page_cost/2-1) * (rel_size/effective_cache_size) ** 2
- *	for rel_size >= effective_cache_size:
- *		random_page_cost * (1 - (effective_cache_size/rel_size)/2)
- * These give the right asymptotic behavior (=> 1.0 as rel_size becomes
+ *	if relpages >= effective_cache_size:
+ *		random_page_cost * (1 - (effective_cache_size/relpages)/2)
+ *	if relpages < effective_cache_size:
+ *		1 + (random_page_cost/2-1) * (relpages/effective_cache_size) ** 2
+ * These give the right asymptotic behavior (=> 1.0 as relpages becomes
  * small, => random_page_cost as it becomes large) and meet in the middle
  * with the estimate that the cache is about 50% effective for a relation
  * of the same size as effective_cache_size.  (XXX this is probably all
diff --git a/src/backend/optimizer/prep/_deadcode/prepkeyset.c b/src/backend/optimizer/prep/_deadcode/prepkeyset.c
index b67431716fb3a5da2617b4b0e08f7e064fe09180..9de8ebb6c7fbc6f85e520c147d43d862a66e86a3 100644
--- a/src/backend/optimizer/prep/_deadcode/prepkeyset.c
+++ b/src/backend/optimizer/prep/_deadcode/prepkeyset.c
@@ -1,7 +1,7 @@
 /*-------------------------------------------------------------------------
  *
  * prepkeyset.c
- *	  Special preperation for keyset queries.
+ *	  Special preparation for keyset queries (KSQO).
  *
  * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
@@ -14,12 +14,6 @@
 #include "postgres.h"
 #include "optimizer/planmain.h"
 
-/*
- * Node_Copy
- *		  a macro to simplify calling of copyObject on the specified field
- */
-#define Node_Copy(from, newnode, field) newnode->field = copyObject(from->field)
-
 bool		_use_keyset_query_optimizer = FALSE;
 
 #ifdef ENABLE_KEY_SET_QUERY
@@ -55,13 +49,20 @@ static int	TotalExpr;
  *	 a HAVING, or a GROUP BY.	It must be a single table and have KSQO
  *	 set to 'on'.
  *
- *	 The primary use of this transformation is to avoid the exponrntial
+ *	 The primary use of this transformation is to avoid the exponential
  *	 memory consumption of cnfify() and to make use of index access
  *	 methods.
  *
  *		  daveh@insightdist.com   1998-08-31
  *
  *	 May want to also prune out duplicate terms.
+ *
+ *	 XXX: this code is currently not compiled because it has not been
+ *	 updated to work with the re-implementation of UNION/INTERSECT/EXCEPT
+ *	 in PostgreSQL 7.1. However, it is of questionable value in any
+ *	 case, because it changes the semantics of the original query:
+ *	 UNION will add an implicit SELECT DISTINCT, which might change
+ *	 the results that are returned.
  **********************************************************************/
 void
 transformKeySetQuery(Query *origNode)
diff --git a/src/include/executor/executor.h b/src/include/executor/executor.h
index 70486ab68b13efb2d80529c4593923c95bec8040..574b1969b6c1e3c24d2be323e9bb21b94094f3a6 100644
--- a/src/include/executor/executor.h
+++ b/src/include/executor/executor.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: executor.h,v 1.66 2002/06/20 20:29:49 momjian Exp $
+ * $Id: executor.h,v 1.67 2002/06/25 17:27:20 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -52,7 +52,7 @@ extern TupleDesc ExecutorStart(QueryDesc *queryDesc, EState *estate);
 extern TupleTableSlot *ExecutorRun(QueryDesc *queryDesc, EState *estate,
 								   ScanDirection direction, long count);
 extern void ExecutorEnd(QueryDesc *queryDesc, EState *estate);
-extern void ExecConstraints(char *caller, ResultRelInfo *resultRelInfo,
+extern void ExecConstraints(const char *caller, ResultRelInfo *resultRelInfo,
 				TupleTableSlot *slot, EState *estate);
 extern TupleTableSlot *EvalPlanQual(EState *estate, Index rti,
 			 ItemPointer tid);
diff --git a/src/test/regress/expected/alter_table.out b/src/test/regress/expected/alter_table.out
index 31278f89f0646243b7fccaa515d9714b9b4e1d45..f2e31919cc5e1556ed555e767bf52e98d4bee729 100644
--- a/src/test/regress/expected/alter_table.out
+++ b/src/test/regress/expected/alter_table.out
@@ -411,7 +411,7 @@ create table atacc1 ( test int );
 alter table atacc1 add constraint atacc_test1 check (test>3);
 -- should fail
 insert into atacc1 (test) values (2);
-ERROR:  ExecAppend: rejected due to CHECK constraint atacc_test1
+ERROR:  ExecInsert: rejected due to CHECK constraint atacc_test1
 -- should succeed
 insert into atacc1 (test) values (4);
 drop table atacc1;
@@ -436,7 +436,7 @@ create table atacc1 ( test int, test2 int, test3 int);
 alter table atacc1 add constraint atacc_test1 check (test+test2<test3*4);
 -- should fail
 insert into atacc1 (test,test2,test3) values (4,4,2);
-ERROR:  ExecAppend: rejected due to CHECK constraint atacc_test1
+ERROR:  ExecInsert: rejected due to CHECK constraint atacc_test1
 -- should succeed
 insert into atacc1 (test,test2,test3) values (4,4,5);
 drop table atacc1;
@@ -445,7 +445,7 @@ create table atacc1 (test int check (test>3), test2 int);
 alter table atacc1 add check (test2>test);
 -- should fail for $2
 insert into atacc1 (test2, test) values (3, 4);
-ERROR:  ExecAppend: rejected due to CHECK constraint $2
+ERROR:  ExecInsert: rejected due to CHECK constraint $2
 drop table atacc1;
 -- inheritance related tests
 create table atacc1 (test int);
@@ -454,11 +454,11 @@ create table atacc3 (test3 int) inherits (atacc1, atacc2);
 alter table atacc2 add constraint foo check (test2>0);
 -- fail and then succeed on atacc2
 insert into atacc2 (test2) values (-3);
-ERROR:  ExecAppend: rejected due to CHECK constraint foo
+ERROR:  ExecInsert: rejected due to CHECK constraint foo
 insert into atacc2 (test2) values (3);
 -- fail and then succeed on atacc3
 insert into atacc3 (test2) values (-3);
-ERROR:  ExecAppend: rejected due to CHECK constraint foo
+ERROR:  ExecInsert: rejected due to CHECK constraint foo
 insert into atacc3 (test2) values (3);
 drop table atacc3;
 drop table atacc2;
@@ -470,7 +470,7 @@ create table atacc3 (test3 int) inherits (atacc1, atacc2);
 alter table only atacc2 add constraint foo check (test2>0);
 -- fail and then succeed on atacc2
 insert into atacc2 (test2) values (-3);
-ERROR:  ExecAppend: rejected due to CHECK constraint foo
+ERROR:  ExecInsert: rejected due to CHECK constraint foo
 insert into atacc2 (test2) values (3);
 -- both succeed on atacc3
 insert into atacc3 (test2) values (-3);
@@ -608,7 +608,7 @@ insert into atacc1 (test2, test) values (3, 3);
 insert into atacc1 (test2, test) values (2, 3);
 ERROR:  Cannot insert a duplicate key into unique index atacc1_pkey
 insert into atacc1 (test2, test) values (1, NULL);
-ERROR:  ExecAppend: Fail to add null value in not null attribute test
+ERROR:  ExecInsert: Fail to add null value in not null attribute test
 drop table atacc1;
 -- alter table / alter column [set/drop] not null tests
 -- try altering system catalogs, should fail
@@ -658,9 +658,9 @@ create table parent (a int);
 create table child (b varchar(255)) inherits (parent);
 alter table parent alter a set not null;
 insert into parent values (NULL);
-ERROR:  ExecAppend: Fail to add null value in not null attribute a
+ERROR:  ExecInsert: Fail to add null value in not null attribute a
 insert into child (a, b) values (NULL, 'foo');
-ERROR:  ExecAppend: Fail to add null value in not null attribute a
+ERROR:  ExecInsert: Fail to add null value in not null attribute a
 alter table parent alter a drop not null;
 insert into parent values (NULL);
 insert into child (a, b) values (NULL, 'foo');
@@ -671,14 +671,14 @@ ERROR:  ALTER TABLE: Attribute "a" contains NULL values
 delete from parent;
 alter table only parent alter a set not null;
 insert into parent values (NULL);
-ERROR:  ExecAppend: Fail to add null value in not null attribute a
+ERROR:  ExecInsert: Fail to add null value in not null attribute a
 alter table child alter a set not null;
 insert into child (a, b) values (NULL, 'foo');
-ERROR:  ExecAppend: Fail to add null value in not null attribute a
+ERROR:  ExecInsert: Fail to add null value in not null attribute a
 delete from child;
 alter table child alter a set not null;
 insert into child (a, b) values (NULL, 'foo');
-ERROR:  ExecAppend: Fail to add null value in not null attribute a
+ERROR:  ExecInsert: Fail to add null value in not null attribute a
 drop table child;
 drop table parent;
 -- test setting and removing default values
diff --git a/src/test/regress/expected/create_misc.out b/src/test/regress/expected/create_misc.out
index 1842314ce9a8e878cf924600be676ce7975b9311..9e1faa0a37feefdaa4c8f6efd53fc568949b9ac9 100644
--- a/src/test/regress/expected/create_misc.out
+++ b/src/test/regress/expected/create_misc.out
@@ -142,7 +142,7 @@ INSERT INTO serialTest VALUES ('foo');
 INSERT INTO serialTest VALUES ('bar');
 INSERT INTO serialTest VALUES ('force', 100);
 INSERT INTO serialTest VALUES ('wrong', NULL);
-ERROR:  ExecAppend: Fail to add null value in not null attribute f2
+ERROR:  ExecInsert: Fail to add null value in not null attribute f2
 SELECT * FROM serialTest;
   f1   | f2  
 -------+-----
@@ -151,3 +151,13 @@ SELECT * FROM serialTest;
  force | 100
 (3 rows)
 
+CREATE SEQUENCE sequence_test;
+BEGIN;
+SELECT nextval('sequence_test');
+ nextval 
+---------
+       1
+(1 row)
+
+DROP SEQUENCE sequence_test;
+END;
diff --git a/src/test/regress/expected/domain.out b/src/test/regress/expected/domain.out
index 7127215869a3c90bb2bb081ec15827035876c5a9..c5615b57572761bc35b365ce8eaabe6e88ea21f1 100644
--- a/src/test/regress/expected/domain.out
+++ b/src/test/regress/expected/domain.out
@@ -88,14 +88,14 @@ create table nulltest
            , col4 dnull
            );
 INSERT INTO nulltest DEFAULT VALUES;
-ERROR:  ExecAppend: Fail to add null value in not null attribute col1
+ERROR:  ExecInsert: Fail to add null value in not null attribute col1
 INSERT INTO nulltest values ('a', 'b', 'c', 'd');  -- Good
 INSERT INTO nulltest values (NULL, 'b', 'c', 'd');
-ERROR:  ExecAppend: Fail to add null value in not null attribute col1
+ERROR:  ExecInsert: Fail to add null value in not null attribute col1
 INSERT INTO nulltest values ('a', NULL, 'c', 'd');
-ERROR:  ExecAppend: Fail to add null value in not null attribute col2
+ERROR:  ExecInsert: Fail to add null value in not null attribute col2
 INSERT INTO nulltest values ('a', 'b', NULL, 'd');
-ERROR:  ExecAppend: Fail to add null value in not null attribute col3
+ERROR:  ExecInsert: Fail to add null value in not null attribute col3
 INSERT INTO nulltest values ('a', 'b', 'c', NULL); -- Good
 select * from nulltest;
  col1 | col2 | col3 | col4 
diff --git a/src/test/regress/expected/insert.out b/src/test/regress/expected/insert.out
index e4ecf9341712b956c4921ad8028e719a7153707c..1a5225b0a36b2975bc6931595cf90646f4c74bf7 100644
--- a/src/test/regress/expected/insert.out
+++ b/src/test/regress/expected/insert.out
@@ -3,7 +3,7 @@
 --
 create table inserttest (col1 int4, col2 int4 NOT NULL, col3 text default 'testing');
 insert into inserttest (col1, col2, col3) values (DEFAULT, DEFAULT, DEFAULT);
-ERROR:  ExecAppend: Fail to add null value in not null attribute col2
+ERROR:  ExecInsert: Fail to add null value in not null attribute col2
 insert into inserttest (col2, col3) values (3, DEFAULT);
 insert into inserttest (col1, col2, col3) values (DEFAULT, 5, DEFAULT);
 insert into inserttest values (DEFAULT, 5, 'test');
diff --git a/src/test/regress/expected/select_having.out b/src/test/regress/expected/select_having.out
index 3f069996fc9fa7471c9b00042bbab070a61168fd..29321e441464b8aff9bc3a3eef43cc28dd910f3d 100644
--- a/src/test/regress/expected/select_having.out
+++ b/src/test/regress/expected/select_having.out
@@ -21,6 +21,15 @@ SELECT b, c FROM test_having
  3 | bbbb    
 (2 rows)
 
+-- HAVING is equivalent to WHERE in this case
+SELECT b, c FROM test_having
+	GROUP BY b, c HAVING b = 3; 
+ b |    c     
+---+----------
+ 3 | BBBB    
+ 3 | bbbb    
+(2 rows)
+
 SELECT lower(c), count(c) FROM test_having
 	GROUP BY lower(c) HAVING count(*) > 2 OR min(a) = max(a);
   lower   | count 
diff --git a/src/test/regress/output/constraints.source b/src/test/regress/output/constraints.source
index 8986118fd48684b1bfc9fbe61e996d8bbf4edad8..3dafd9a87719bcc26895f6ffd05d4869c5d24830 100644
--- a/src/test/regress/output/constraints.source
+++ b/src/test/regress/output/constraints.source
@@ -62,12 +62,12 @@ CREATE TABLE CHECK_TBL (x int,
 INSERT INTO CHECK_TBL VALUES (5);
 INSERT INTO CHECK_TBL VALUES (4);
 INSERT INTO CHECK_TBL VALUES (3);
-ERROR:  ExecAppend: rejected due to CHECK constraint check_con
+ERROR:  ExecInsert: rejected due to CHECK constraint check_con
 INSERT INTO CHECK_TBL VALUES (2);
-ERROR:  ExecAppend: rejected due to CHECK constraint check_con
+ERROR:  ExecInsert: rejected due to CHECK constraint check_con
 INSERT INTO CHECK_TBL VALUES (6);
 INSERT INTO CHECK_TBL VALUES (1);
-ERROR:  ExecAppend: rejected due to CHECK constraint check_con
+ERROR:  ExecInsert: rejected due to CHECK constraint check_con
 SELECT '' AS three, * FROM CHECK_TBL;
  three | x 
 -------+---
@@ -82,13 +82,13 @@ CREATE TABLE CHECK2_TBL (x int, y text, z int,
 	CHECK (x > 3 and y <> 'check failed' and z < 8));
 INSERT INTO CHECK2_TBL VALUES (4, 'check ok', -2);
 INSERT INTO CHECK2_TBL VALUES (1, 'x check failed', -2);
-ERROR:  ExecAppend: rejected due to CHECK constraint sequence_con
+ERROR:  ExecInsert: rejected due to CHECK constraint sequence_con
 INSERT INTO CHECK2_TBL VALUES (5, 'z check failed', 10);
-ERROR:  ExecAppend: rejected due to CHECK constraint sequence_con
+ERROR:  ExecInsert: rejected due to CHECK constraint sequence_con
 INSERT INTO CHECK2_TBL VALUES (0, 'check failed', -2);
-ERROR:  ExecAppend: rejected due to CHECK constraint sequence_con
+ERROR:  ExecInsert: rejected due to CHECK constraint sequence_con
 INSERT INTO CHECK2_TBL VALUES (6, 'check failed', 11);
-ERROR:  ExecAppend: rejected due to CHECK constraint sequence_con
+ERROR:  ExecInsert: rejected due to CHECK constraint sequence_con
 INSERT INTO CHECK2_TBL VALUES (7, 'check ok', 7);
 SELECT '' AS two, * from CHECK2_TBL;
  two | x |    y     | z  
@@ -107,7 +107,7 @@ CREATE TABLE INSERT_TBL (x INT DEFAULT nextval('insert_seq'),
 	CONSTRAINT INSERT_CON CHECK (x >= 3 AND y <> 'check failed' AND x < 8),
 	CHECK (x + z = 0));
 INSERT INTO INSERT_TBL(x,z) VALUES (2, -2);
-ERROR:  ExecAppend: rejected due to CHECK constraint insert_con
+ERROR:  ExecInsert: rejected due to CHECK constraint insert_con
 SELECT '' AS zero, * FROM INSERT_TBL;
  zero | x | y | z 
 ------+---+---+---
@@ -120,13 +120,13 @@ SELECT 'one' AS one, nextval('insert_seq');
 (1 row)
 
 INSERT INTO INSERT_TBL(y) VALUES ('Y');
-ERROR:  ExecAppend: rejected due to CHECK constraint insert_con
+ERROR:  ExecInsert: rejected due to CHECK constraint insert_con
 INSERT INTO INSERT_TBL(y) VALUES ('Y');
 INSERT INTO INSERT_TBL(x,z) VALUES (1, -2);
-ERROR:  ExecAppend: rejected due to CHECK constraint $2
+ERROR:  ExecInsert: rejected due to CHECK constraint $2
 INSERT INTO INSERT_TBL(z,x) VALUES (-7,  7);
 INSERT INTO INSERT_TBL VALUES (5, 'check failed', -5);
-ERROR:  ExecAppend: rejected due to CHECK constraint insert_con
+ERROR:  ExecInsert: rejected due to CHECK constraint insert_con
 INSERT INTO INSERT_TBL VALUES (7, '!check failed', -7);
 INSERT INTO INSERT_TBL(y) VALUES ('-!NULL-');
 SELECT '' AS four, * FROM INSERT_TBL;
@@ -139,9 +139,9 @@ SELECT '' AS four, * FROM INSERT_TBL;
 (4 rows)
 
 INSERT INTO INSERT_TBL(y,z) VALUES ('check failed', 4);
-ERROR:  ExecAppend: rejected due to CHECK constraint $2
+ERROR:  ExecInsert: rejected due to CHECK constraint $2
 INSERT INTO INSERT_TBL(x,y) VALUES (5, 'check failed');
-ERROR:  ExecAppend: rejected due to CHECK constraint insert_con
+ERROR:  ExecInsert: rejected due to CHECK constraint insert_con
 INSERT INTO INSERT_TBL(x,y) VALUES (5, '!check failed');
 INSERT INTO INSERT_TBL(y) VALUES ('-!NULL-');
 SELECT '' AS six, * FROM INSERT_TBL;
@@ -162,7 +162,7 @@ SELECT 'seven' AS one, nextval('insert_seq');
 (1 row)
 
 INSERT INTO INSERT_TBL(y) VALUES ('Y');
-ERROR:  ExecAppend: rejected due to CHECK constraint insert_con
+ERROR:  ExecInsert: rejected due to CHECK constraint insert_con
 SELECT 'eight' AS one, currval('insert_seq');
   one  | currval 
 -------+---------
@@ -193,11 +193,11 @@ CREATE TABLE INSERT_CHILD (cx INT default 42,
 	INHERITS (INSERT_TBL);
 INSERT INTO INSERT_CHILD(x,z,cy) VALUES (7,-7,11);
 INSERT INTO INSERT_CHILD(x,z,cy) VALUES (7,-7,6);
-ERROR:  ExecAppend: rejected due to CHECK constraint insert_child_cy
+ERROR:  ExecInsert: rejected due to CHECK constraint insert_child_cy
 INSERT INTO INSERT_CHILD(x,z,cy) VALUES (6,-7,7);
-ERROR:  ExecAppend: rejected due to CHECK constraint $1
+ERROR:  ExecInsert: rejected due to CHECK constraint $1
 INSERT INTO INSERT_CHILD(x,y,z,cy) VALUES (6,'check failed',-6,7);
-ERROR:  ExecAppend: rejected due to CHECK constraint insert_con
+ERROR:  ExecInsert: rejected due to CHECK constraint insert_con
 SELECT * FROM INSERT_CHILD;
  x |   y    | z  | cx | cy 
 ---+--------+----+----+----
@@ -227,7 +227,7 @@ SELECT '' AS three, * FROM INSERT_TBL;
 INSERT INTO INSERT_TBL SELECT * FROM tmp WHERE yd = 'try again';
 INSERT INTO INSERT_TBL(y,z) SELECT yd, -7 FROM tmp WHERE yd = 'try again';
 INSERT INTO INSERT_TBL(y,z) SELECT yd, -8 FROM tmp WHERE yd = 'try again';
-ERROR:  ExecAppend: rejected due to CHECK constraint insert_con
+ERROR:  ExecInsert: rejected due to CHECK constraint insert_con
 SELECT '' AS four, * FROM INSERT_TBL;
  four | x |       y       | z  
 ------+---+---------------+----
@@ -246,7 +246,7 @@ UPDATE INSERT_TBL SET x = NULL WHERE x = 5;
 UPDATE INSERT_TBL SET x = 6 WHERE x = 6;
 UPDATE INSERT_TBL SET x = -z, z = -x;
 UPDATE INSERT_TBL SET x = z, z = x;
-ERROR:  ExecReplace: rejected due to CHECK constraint insert_con
+ERROR:  ExecUpdate: rejected due to CHECK constraint insert_con
 SELECT * FROM INSERT_TBL;
  x |       y       | z  
 ---+---------------+----
@@ -293,7 +293,7 @@ ERROR:  Cannot insert a duplicate key into unique index primary_tbl_pkey
 INSERT INTO PRIMARY_TBL VALUES (4, 'three');
 INSERT INTO PRIMARY_TBL VALUES (5, 'one');
 INSERT INTO PRIMARY_TBL (t) VALUES ('six');
-ERROR:  ExecAppend: Fail to add null value in not null attribute i
+ERROR:  ExecInsert: Fail to add null value in not null attribute i
 SELECT '' AS four, * FROM PRIMARY_TBL;
  four | i |   t   
 ------+---+-------
@@ -313,7 +313,7 @@ INSERT INTO PRIMARY_TBL VALUES (1, 'three');
 INSERT INTO PRIMARY_TBL VALUES (4, 'three');
 INSERT INTO PRIMARY_TBL VALUES (5, 'one');
 INSERT INTO PRIMARY_TBL (t) VALUES ('six');
-ERROR:  ExecAppend: Fail to add null value in not null attribute i
+ERROR:  ExecInsert: Fail to add null value in not null attribute i
 SELECT '' AS three, * FROM PRIMARY_TBL;
  three | i |   t   
 -------+---+-------
diff --git a/src/test/regress/sql/create_misc.sql b/src/test/regress/sql/create_misc.sql
index 078450a754416d6fa421bebc42080f260b66f05f..2277d5c8b2b813eb98de605452dcf5669627bfe3 100644
--- a/src/test/regress/sql/create_misc.sql
+++ b/src/test/regress/sql/create_misc.sql
@@ -217,3 +217,10 @@ INSERT INTO serialTest VALUES ('force', 100);
 INSERT INTO serialTest VALUES ('wrong', NULL);
 
 SELECT * FROM serialTest;
+
+CREATE SEQUENCE sequence_test;
+
+BEGIN;
+SELECT nextval('sequence_test');
+DROP SEQUENCE sequence_test;
+END;
diff --git a/src/test/regress/sql/select_having.sql b/src/test/regress/sql/select_having.sql
index 44b0329ee5f8df4467c62f463a4a73b2796fb950..28b22d9859f7ad601c24ef2eb2bd5dd56d54816b 100644
--- a/src/test/regress/sql/select_having.sql
+++ b/src/test/regress/sql/select_having.sql
@@ -18,6 +18,10 @@ INSERT INTO test_having VALUES (9, 4, 'CCCC', 'j');
 SELECT b, c FROM test_having
 	GROUP BY b, c HAVING count(*) = 1;
 
+-- HAVING is equivalent to WHERE in this case
+SELECT b, c FROM test_having
+	GROUP BY b, c HAVING b = 3; 
+
 SELECT lower(c), count(c) FROM test_having
 	GROUP BY lower(c) HAVING count(*) > 2 OR min(a) = max(a);