hawq-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From j...@apache.org
Subject [2/3] incubator-hawq git commit: HAWQ-258. Remove fast sequence
Date Fri, 15 Jan 2016 09:10:25 GMT
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/catalog/gp_fastsequence.c
----------------------------------------------------------------------
diff --git a/src/backend/catalog/gp_fastsequence.c b/src/backend/catalog/gp_fastsequence.c
deleted file mode 100644
index 2284aa7..0000000
--- a/src/backend/catalog/gp_fastsequence.c
+++ /dev/null
@@ -1,416 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/*-------------------------------------------------------------------------
- *
- * gp_fastsequence.c
- *    routines to maintain a light-weight sequence table.
- *
- *-------------------------------------------------------------------------
- */
-#include "postgres.h"
-
-#include "catalog/catquery.h"
-#include "catalog/gp_fastsequence.h"
-#include "catalog/indexing.h"
-#include "utils/relcache.h"
-#include "utils/fmgroids.h"
-#include "access/genam.h"
-#include "access/htup.h"
-#include "access/heapam.h"
-#include "cdb/cdbvars.h"
-
-static void update_fastsequence(
-	Relation gp_fastsequence_rel,
-	HeapTuple oldTuple,
-	TupleDesc tupleDesc,
-	Oid objid,
-	int64 objmod,
-	int64 newLastSequence,
-	ItemPointer tid);
-
-/*
- * InsertFastSequenceEntry
- *
- * Insert a new fast sequence entry for a given object. If the given
- * object already exists in the table, this function replaces the old
- * entry with a fresh initial value.
- *
- * The tid for the new entry is returned.
- */
-void
-InsertFastSequenceEntry(Oid objid, int64 objmod, int64 lastSequence,
-		ItemPointer tid)
-{
-	Relation gp_fastsequence_rel;
-	TupleDesc tupleDesc;
-	int natts = 0;
-	Datum *values;
-	bool *nulls;
-	HeapTuple tuple = NULL;
-	cqContext	 cqc;
-	
-	/*
-	 * Open and lock the gp_fastsequence catalog table.
-	 */
-	gp_fastsequence_rel = heap_open(FastSequenceRelationId, RowExclusiveLock);
-	tupleDesc = RelationGetDescr(gp_fastsequence_rel);
-	
-	tuple = caql_getfirst(
-			caql_addrel(cqclr(&cqc), gp_fastsequence_rel),
-			cql("SELECT * FROM gp_fastsequence "
-				" WHERE objid = :1 "
-				" AND objmod = :2 "
-				" AND contentid = :3 "
-				" FOR UPDATE ",
-				ObjectIdGetDatum(objid),
-				Int64GetDatum(objmod),
-				Int32GetDatum(-1)));
-
-	if (tuple == NULL)
-	{
-		natts = tupleDesc->natts;
-		values = palloc0(sizeof(Datum) * natts);
-		nulls = palloc0(sizeof(bool) * natts);
-	
-		values[Anum_gp_fastsequence_objid - 1] = ObjectIdGetDatum(objid);
-		values[Anum_gp_fastsequence_objmod - 1] = Int64GetDatum(objmod);
-		values[Anum_gp_fastsequence_last_sequence - 1] = Int64GetDatum(lastSequence);
-		values[Anum_gp_fastsequence_contentid - 1] = Int32GetDatum(-1);
-
-		tuple = heaptuple_form_to(tupleDesc, values, nulls, NULL, NULL);
-		frozen_heap_insert(gp_fastsequence_rel, tuple);
-		/*
-		 * in hawq, index only exists on master
-		 */
-		if (Gp_role != GP_ROLE_EXECUTE)
-			CatalogUpdateIndexes(gp_fastsequence_rel, tuple);
-	
-		ItemPointerCopy(&tuple->t_self, tid);
-
-		heap_freetuple(tuple);
-		pfree(values);
-		pfree(nulls);
-	}
-	else
-	{
-		update_fastsequence(gp_fastsequence_rel,
-							tuple,
-							tupleDesc,
-							objid,
-							objmod,
-							lastSequence,
-							tid);
-	}
-
-	/*
-	 * Since the tid for this row may be used later in this transaction, 
-	 * we keep the lock until the end of the transaction.
-	 */
-	heap_close(gp_fastsequence_rel, NoLock);
-}
-
-/*
- * update_fastsequnece -- update the fast sequence number for (objid, objmod).
- *
- * If such an entry exists in the table, it is provided in oldTuple. This tuple
- * is updated with the new value. Otherwise, a new tuple is inserted into the
- * table.
- *
- * The tuple id value for the entry is copied out to 'tid'.
- *
- * NOTE: in hawq, we do not add new tuple in QE, it should be dispatched
- * from master, and only update is allowed on QE.
- */
-static void
-update_fastsequence(Relation gp_fastsequence_rel,
-					HeapTuple oldTuple,
-					TupleDesc tupleDesc,
-					Oid objid,
-					int64 objmod,
-					int64 newLastSequence,
-					ItemPointer tid)
-{
-	Datum *values;
-	bool *nulls;
-	HeapTuple newTuple;
-
-	values = palloc0(sizeof(Datum) * tupleDesc->natts);
-	nulls = palloc0(sizeof(bool) * tupleDesc->natts);
-
-	/*
-	 * If such a tuple does not exist, insert a new one.
-	 */
-	if (oldTuple == NULL)
-	{
-		Assert(Gp_role != GP_ROLE_EXECUTE);
-
-		values[Anum_gp_fastsequence_objid - 1] = ObjectIdGetDatum(objid);
-		values[Anum_gp_fastsequence_objmod - 1] = Int64GetDatum(objmod);
-		values[Anum_gp_fastsequence_last_sequence - 1] = Int64GetDatum(newLastSequence);
-		values[Anum_gp_fastsequence_contentid - 1] = Int32GetDatum(-1);
-
-		newTuple = heaptuple_form_to(tupleDesc, values, nulls, NULL, NULL);
-		frozen_heap_insert(gp_fastsequence_rel, newTuple);
-
-		CatalogUpdateIndexes(gp_fastsequence_rel, newTuple);
-
-		ItemPointerCopy(&newTuple->t_self, tid);
-
-		heap_freetuple(newTuple);
-	}
-
-	else
-	{
-#ifdef USE_ASSERT_CHECKING
-		Oid oldObjid;
-		int64 oldObjmod;
-		bool isNull;
-		
-		oldObjid = heap_getattr(oldTuple, Anum_gp_fastsequence_objid, tupleDesc, &isNull);
-		Assert(!isNull);
-		oldObjmod = heap_getattr(oldTuple, Anum_gp_fastsequence_objmod, tupleDesc, &isNull);
-		Assert(!isNull);
-		Assert(oldObjid == objid && oldObjmod == objmod);
-#endif
-
-		values[Anum_gp_fastsequence_objid - 1] = ObjectIdGetDatum(objid);
-		values[Anum_gp_fastsequence_objmod - 1] = Int64GetDatum(objmod);
-		values[Anum_gp_fastsequence_last_sequence - 1] = Int64GetDatum(newLastSequence);
-		values[Anum_gp_fastsequence_contentid - 1] = Int32GetDatum(-1);
-
-		newTuple = heap_form_tuple(tupleDesc, values, nulls);
-		newTuple->t_data->t_ctid = oldTuple->t_data->t_ctid;
-		newTuple->t_self = oldTuple->t_self;
-		if (tupleDesc->tdhasoid)
-			HeapTupleSetOid(newTuple, HeapTupleGetOid(oldTuple));
-		
-		if (Gp_role != GP_ROLE_EXECUTE)
-		{
-			heap_inplace_update(gp_fastsequence_rel, newTuple);
-		}
-		else
-		{
-			InMemHeapRelation inmemrel = OidGetInMemHeapRelation(
-					gp_fastsequence_rel->rd_id, INMEM_HEAP_MAPPING);
-			if (NULL == inmemrel)
-			{
-				elog(ERROR, "cannot find in-memory table: %s",
-						RelationGetRelationName(gp_fastsequence_rel));
-			}
-
-			InMemHeap_Update(inmemrel, &oldTuple->t_self, newTuple);
-		}
-
-		ItemPointerCopy(&newTuple->t_self, tid);
-
-		heap_freetuple(newTuple);
-	}
-	
-	pfree(values);
-	pfree(nulls);
-}
-
-/*
- * GetFastSequences
- *
- * Get a list of consecutive sequence numbers. The starting sequence
- * number is the maximal value between 'lastsequence' + 1 and minSequence.
- * The length of the list is given.
- *
- * If there is not such an entry for objid in the table, create
- * one here.
- *
- * The existing entry for objid in the table is updated with a new
- * lastsequence value.
- *
- * The tuple id value for this entry is copied out to 'tid'.
- */
-int64 GetFastSequences(Oid objid, int64 objmod,
-					   int64 minSequence, int64 numSequences,
-					   ItemPointer tid)
-{
-	Relation gp_fastsequence_rel;
-	TupleDesc tupleDesc;
-	HeapTuple tuple;
-	int64 firstSequence = minSequence;
-	Datum lastSequenceDatum;
-	int64 newLastSequence;
-
-	Assert(tid != NULL);
-	Assert(Gp_role != GP_ROLE_DISPATCH);
-	
-	gp_fastsequence_rel = heap_open(FastSequenceRelationId, RowExclusiveLock);
-	tupleDesc = RelationGetDescr(gp_fastsequence_rel);
-	
-	cqContext *pcqCtx = caql_beginscan(
-					NULL,
-					cql("SELECT * FROM gp_fastsequence "
-						" WHERE objid = :1 "
-						" AND objmod = :2 "
-						" FOR UPDATE ",
-						ObjectIdGetDatum(objid),
-						Int64GetDatum(objmod)));
-
-	tuple = caql_getnext(pcqCtx);
-
-	if (tuple == NULL)
-	{
-		elog(ERROR, "gp_fastsequence should be dispatched to QE, "
-				"objid = %u, objmod = "INT64_FORMAT", minseq = "INT64_FORMAT", numseq = "INT64_FORMAT".",
-				objid, objmod, minSequence, numSequences);
-
-		newLastSequence = firstSequence + numSequences - 1;
-	}
-	else
-	{
-		bool isNull;
-
-		lastSequenceDatum = heap_getattr(tuple, Anum_gp_fastsequence_last_sequence,
-										tupleDesc, &isNull);
-		
-		if (isNull)
-			ereport(ERROR,
-					(errcode(ERRCODE_UNDEFINED_OBJECT),
-					 errmsg("got an invalid lastsequence number: NULL")));
-		
-		if (DatumGetInt64(lastSequenceDatum) + 1 > firstSequence)
-			firstSequence = DatumGetInt64(lastSequenceDatum) + 1;
-		newLastSequence = firstSequence + numSequences - 1;
-	}
-	
-	update_fastsequence(gp_fastsequence_rel, tuple, tupleDesc,
-						objid, objmod, newLastSequence, tid);
-		
-
-	caql_endscan(pcqCtx);
-
-	/*
-	 * Since the tid for this row may be used later in this transaction, 
-	 * we keep the lock until the end of the transaction.
-	 */
-	heap_close(gp_fastsequence_rel, NoLock);
-
-	return firstSequence;
-}
-
-/*
- * GetFastSequencesByTid
- *
- * Same as GetFastSequences, except that the tuple tid is given, and the tuple id
- * is not valid.
- */
-int64
-GetFastSequencesByTid(ItemPointer tid,
-					  int64 minSequence,
-					  int64 numSequences)
-{
-	Relation gp_fastsequence_rel;
-	TupleDesc tupleDesc;
-	HeapTupleData tuple;
-	Buffer userbuf;
-	bool found = false;
-	Datum lastSequenceDatum;
-	int64 newLastSequence;
-	int64 firstSequence = minSequence;
-	bool isNull;
-	Oid objidDatum;
-	int64 objmodDatum;
-
-	gp_fastsequence_rel = heap_open(FastSequenceRelationId, RowExclusiveLock);
-	tupleDesc = RelationGetDescr(gp_fastsequence_rel);
-
-	Assert(ItemPointerIsValid(tid));
-
-	ItemPointerCopy(tid, &tuple.t_self);
-
-	found = heap_fetch(gp_fastsequence_rel, SnapshotNow, &tuple,
-					   &userbuf, false, NULL);
-	Assert(found);
-	
-	lastSequenceDatum = heap_getattr(&tuple, Anum_gp_fastsequence_last_sequence,
-									 gp_fastsequence_rel->rd_att, &isNull);
-	if (isNull)
-		ereport(ERROR,
-				(errcode(ERRCODE_UNDEFINED_OBJECT),
-				 errmsg("got an invalid lastsequence number: NULL")));
-	
-	objidDatum = heap_getattr(&tuple, Anum_gp_fastsequence_objid,
-							  gp_fastsequence_rel->rd_att, &isNull);
-	if (isNull)
-		ereport(ERROR,
-				(errcode(ERRCODE_UNDEFINED_OBJECT),
-				 errmsg("got an invalid objid: NULL")));
-	
-	objmodDatum = heap_getattr(&tuple, Anum_gp_fastsequence_objmod,
-							   gp_fastsequence_rel->rd_att, &isNull);
-	if (isNull)
-		ereport(ERROR,
-				(errcode(ERRCODE_UNDEFINED_OBJECT),
-				 errmsg("got an invalid objmod: NULL")));
-	
-	if (DatumGetInt64(lastSequenceDatum) + 1 > minSequence)
-		firstSequence = DatumGetInt64(lastSequenceDatum) + 1;
-	newLastSequence = firstSequence + numSequences - 1;
-	
-	update_fastsequence(gp_fastsequence_rel,
-						&tuple,
-						tupleDesc,
-						DatumGetObjectId(objidDatum),
-						DatumGetInt64(objmodDatum),
-						newLastSequence,
-						tid);
-	
-	ReleaseBuffer(userbuf);
-	
-	/*
-	 * Since the tid for this row may be used later in this transaction, 
-	 * we keep the lock until the end of the transaction.
-	 */
-	heap_close(gp_fastsequence_rel, NoLock);
-
-	return firstSequence;
-}
-
-/*
- * RemoveFastSequenceEntry
- *
- * Remove all entries associated with the given object id.
- *
- * If the given objid is an invalid OID, this function simply
- * returns.
- *
- * It is okay for the given valid objid to have no entries in
- * gp_fastsequence.
- */
-void
-RemoveFastSequenceEntry(Oid objid)
-{
-	int numDel;
-	
-	if (!OidIsValid(objid))
-		return;
-
-	numDel = caql_getcount(
-			NULL,
-			cql("DELETE FROM gp_fastsequence "
-				" WHERE objid = :1 ",
-				ObjectIdGetDatum(objid)));
-
-}
-

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/catalog/heap.c
----------------------------------------------------------------------
diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c
index 477eb67..c61a2e1 100644
--- a/src/backend/catalog/heap.c
+++ b/src/backend/catalog/heap.c
@@ -78,7 +78,6 @@
 #include "catalog/pg_statistic.h"
 #include "catalog/pg_tablespace.h"
 #include "catalog/pg_type.h"
-#include "catalog/gp_fastsequence.h"
 #include "cdb/cdbappendonlyam.h"
 #include "cdb/cdbpartition.h"
 #include "cdb/cdbanalyze.h"

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/catalog/index.c
----------------------------------------------------------------------
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index 29dc07a..9d55a87 100644
--- a/src/backend/catalog/index.c
+++ b/src/backend/catalog/index.c
@@ -62,7 +62,6 @@
 #include "catalog/pg_opclass.h"
 #include "catalog/pg_tablespace.h"
 #include "catalog/pg_type.h"
-#include "catalog/aoblkdir.h"
 #include "commands/tablecmds.h"
 #include "executor/executor.h"
 #include "miscadmin.h"
@@ -1822,7 +1821,6 @@ IndexBuildAppendOnlyRowScan(Relation parentRelation,
 	double reltuples = 0;
 	Datum		values[INDEX_MAX_KEYS];
 	bool		isnull[INDEX_MAX_KEYS];
-	AppendOnlyBlockDirectory *blockDirectory = NULL;
 	
 	Assert(estate->es_per_tuple_exprcontext != NULL);
 	econtext = estate->es_per_tuple_exprcontext;
@@ -1836,39 +1834,6 @@ IndexBuildAppendOnlyRowScan(Relation parentRelation,
 								  snapshot,
 								  0,
 								  NULL);
-
-	if (!OidIsValid(aoscan->aoEntry->blkdirrelid) ||
-		!OidIsValid(aoscan->aoEntry->blkdiridxid))
-	{
-		IndexInfoOpaque *opaque;
-
-		if (indexInfo->ii_Concurrent)
-			ereport(ERROR,
-					(errcode(ERRCODE_GP_COMMAND_ERROR),
-					 errmsg("Cannot create index concurrently. Create an index non-concurrently "
-					        "before creating an index concurrently in an appendonly table.")));
-		
-		/* Obtain the oids from IndexInfo. */
-		Assert(indexInfo->opaque != NULL);
-
-		opaque = (IndexInfoOpaque *)indexInfo->opaque;
-		
-		Assert(OidIsValid(opaque->blkdirRelOid) && OidIsValid(opaque->blkdirIdxOid));
-		AlterTableCreateAoBlkdirTableWithOid(RelationGetRelid(parentRelation),
-											 opaque->blkdirRelOid,
-											 opaque->blkdirIdxOid,
-											 &opaque->blkdirComptypeOid,
-											 false);
-
-		/* Update blkdirrelid, blkdiridxid in aoEntry with new values */
-		aoscan->aoEntry->blkdirrelid = opaque->blkdirRelOid;
-		aoscan->aoEntry->blkdiridxid = opaque->blkdirIdxOid;
-		
-		aoscan->buildBlockDirectory = true;
-		aoscan->blockDirectory =
-			(AppendOnlyBlockDirectory *)palloc0(sizeof(AppendOnlyBlockDirectory));
-		blockDirectory = aoscan->blockDirectory;
-	}
 	
 	while (appendonly_getnext(aoscan, ForwardScanDirection, slot) != NULL)
 	{
@@ -1908,10 +1873,7 @@ IndexBuildAppendOnlyRowScan(Relation parentRelation,
 	}
 	
 	appendonly_endscan(aoscan);
-	
-	if (blockDirectory != NULL)
-		pfree(blockDirectory);
-	
+
 	return reltuples;
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/catalog/pg_appendonly.c
----------------------------------------------------------------------
diff --git a/src/backend/catalog/pg_appendonly.c b/src/backend/catalog/pg_appendonly.c
index 02280e8..d7638b4 100644
--- a/src/backend/catalog/pg_appendonly.c
+++ b/src/backend/catalog/pg_appendonly.c
@@ -33,7 +33,6 @@
 #include "catalog/pg_appendonly.h"
 #include "catalog/pg_type.h"
 #include "catalog/pg_proc.h"
-#include "catalog/gp_fastsequence.h"
 #include "access/genam.h"
 #include "access/heapam.h"
 #include "catalog/catquery.h"
@@ -705,9 +704,6 @@ RemoveAppendonlyEntry(Oid relid)
 		Assert(OidIsValid(aosegrelid));
 	}
 
-	/* Piggyback here to remove gp_fastsequence entries */
-	RemoveFastSequenceEntry(aosegrelid);
-
 	/*
 	 * Delete the appendonly table entry from the catalog (pg_appendonly).
 	 */

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/cdb/cdbappendonlystoragewrite.c
----------------------------------------------------------------------
diff --git a/src/backend/cdb/cdbappendonlystoragewrite.c b/src/backend/cdb/cdbappendonlystoragewrite.c
index c740115..18288b5 100644
--- a/src/backend/cdb/cdbappendonlystoragewrite.c
+++ b/src/backend/cdb/cdbappendonlystoragewrite.c
@@ -696,9 +696,6 @@ int32 AppendOnlyStorageWrite_CompleteHeaderLen(
 		completeHeaderLen += (AoHeader_LongSize - AoHeader_RegularSize);
 	}
 
-	if (storageWrite->isFirstRowNumSet)
-		completeHeaderLen += sizeof(int64);
-
 	return completeHeaderLen;
 }
 
@@ -718,9 +715,6 @@ static int32 AppendOnlyStorageWrite_LargeContentHeaderLen(
 
 	completeHeaderLen = storageWrite->regularHeaderLen;
 
-	if (storageWrite->isFirstRowNumSet)
-		completeHeaderLen += sizeof(int64);
-
 	// UNDONE: Right alignment?
 
 	return completeHeaderLen;
@@ -1300,9 +1294,9 @@ AppendOnlyStorageWrite_CompressAppend(
 			AppendOnlyStorageFormat_MakeSmallContentHeader(
 										header,
 										storageWrite->storageAttributes.checksum,
-										storageWrite->isFirstRowNumSet,
+										false,
 										storageWrite->storageAttributes.version,
-										storageWrite->firstRowNum,
+										1,
 										executorBlockKind,
 										itemCount,
 										sourceLen,
@@ -1316,9 +1310,9 @@ AppendOnlyStorageWrite_CompressAppend(
 			AppendOnlyStorageFormat_MakeBulkDenseContentHeader(
 										header,
 										storageWrite->storageAttributes.checksum,
-										storageWrite->isFirstRowNumSet,
+										false,
 										storageWrite->storageAttributes.version,
-										storageWrite->firstRowNum,
+										1,
 										executorBlockKind,
 										itemCount,
 										sourceLen,
@@ -1382,9 +1376,9 @@ AppendOnlyStorageWrite_CompressAppend(
 		AppendOnlyStorageFormat_MakeSmallContentHeader(
 								header,
 								storageWrite->storageAttributes.checksum,
-								storageWrite->isFirstRowNumSet,
+								false,
 								storageWrite->storageAttributes.version,
-								storageWrite->firstRowNum,
+								1,
 								executorBlockKind,
 								itemCount,
 								sourceLen,
@@ -1457,7 +1451,7 @@ void AppendOnlyStorageWrite_FinishBuffer(
 			 contentLen,
 			 storageWrite->maxBufferLen,
 			 storageWrite->currentCompleteHeaderLen,
-			 (storageWrite->isFirstRowNumSet ? "true" : "false"));
+			 (false ? "true" : "false"));
 
 
 	headerOffsetInFile = BufferedAppendCurrentBufferPosition(&storageWrite->bufferedAppend);
@@ -1489,9 +1483,9 @@ void AppendOnlyStorageWrite_FinishBuffer(
 			AppendOnlyStorageFormat_MakeSmallContentHeader(
 									nonCompressedHeader,
 									storageWrite->storageAttributes.checksum,
-									storageWrite->isFirstRowNumSet,
+									false,
 									storageWrite->storageAttributes.version,
-									storageWrite->firstRowNum,
+									1,
 									executorBlockKind,
 									rowCount,
 									contentLen,
@@ -1505,9 +1499,9 @@ void AppendOnlyStorageWrite_FinishBuffer(
 			AppendOnlyStorageFormat_MakeNonBulkDenseContentHeader(
 										nonCompressedHeader,
 										storageWrite->storageAttributes.checksum,
-										storageWrite->isFirstRowNumSet,
+										false,
 										storageWrite->storageAttributes.version,
-										storageWrite->firstRowNum,
+										1,
 										executorBlockKind,
 										rowCount,
 										contentLen);
@@ -1621,7 +1615,6 @@ void AppendOnlyStorageWrite_FinishBuffer(
 
 	Assert(storageWrite->currentCompleteHeaderLen == 0);
 	storageWrite->currentBuffer = NULL;
-	storageWrite->isFirstRowNumSet = false;
 }
 
 /*
@@ -1644,12 +1637,6 @@ void AppendOnlyStorageWrite_CancelLastBuffer(
 	}
 
 	storageWrite->currentCompleteHeaderLen = 0;
-
-	/*
-	 * Since we don't know if AppendOnlyStorageWrite_Content will be called next or
-	 * the writer is doing something else, let's turn off the firstRowNum flag.
-	 */
-	storageWrite->isFirstRowNumSet = false;
 }
 
 // -----------------------------------------------------------------------------
@@ -1818,9 +1805,9 @@ void AppendOnlyStorageWrite_Content(
 		AppendOnlyStorageFormat_MakeLargeContentHeader(
 								largeContentHeader,
 								storageWrite->storageAttributes.checksum,
-								storageWrite->isFirstRowNumSet,
+								false,
 								storageWrite->storageAttributes.version,
-								storageWrite->firstRowNum,
+								1,
 								executorBlockKind,
 								rowCount,
 								contentLen);
@@ -1833,11 +1820,6 @@ void AppendOnlyStorageWrite_Content(
 		// Declare it finished.
 		storageWrite->currentCompleteHeaderLen = 0;
 
-		/*
-		 * Now write the fragments as type Block.
-		 */
-		storageWrite->isFirstRowNumSet = false;	// Not written with fragments.
-
 		smallContentHeaderLen = 
 				AppendOnlyStorageWrite_CompleteHeaderLen(
 													storageWrite,
@@ -1927,30 +1909,6 @@ void AppendOnlyStorageWrite_Content(
 		}
 	}
 
-	storageWrite->isFirstRowNumSet = false;
-
 	// Verify we have no buffer allocated.
 	Assert(storageWrite->currentCompleteHeaderLen == 0);
 }
-
-// -----------------------------------------------------------------------------
-// Optional: Set First Row Number
-// -----------------------------------------------------------------------------
-
-/*
- * Set the first row value for the next Append-Only Storage
- * Block to be written.  Only applies to the next block.
- */
-void AppendOnlyStorageWrite_SetFirstRowNum(
-	AppendOnlyStorageWrite		*storageWrite,
-	int64						firstRowNum)
-{
-
-	Assert(storageWrite != NULL);
-	Assert(storageWrite->isActive);
-
-	// UNDONE: Range check firstRowNum
-
-	storageWrite->isFirstRowNumSet = true;
-	storageWrite->firstRowNum = firstRowNum;
-}

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/cdb/cdbllize.c
----------------------------------------------------------------------
diff --git a/src/backend/cdb/cdbllize.c b/src/backend/cdb/cdbllize.c
index 393e6bb..4aa8795 100644
--- a/src/backend/cdb/cdbllize.c
+++ b/src/backend/cdb/cdbllize.c
@@ -1328,7 +1328,6 @@ motion_sanity_walker(Node *node, sanity_result_t *result)
 		case T_IndexScan:
 		case T_BitmapIndexScan:
 		case T_BitmapHeapScan:
-		case T_BitmapAppendOnlyScan:
 		case T_BitmapTableScan:
 		case T_TidScan:
 		case T_SubqueryScan:

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/cdb/cdbpath.c
----------------------------------------------------------------------
diff --git a/src/backend/cdb/cdbpath.c b/src/backend/cdb/cdbpath.c
index fc25f4c..8c38ee7 100644
--- a/src/backend/cdb/cdbpath.c
+++ b/src/backend/cdb/cdbpath.c
@@ -1392,7 +1392,6 @@ cdbpath_dedup_fixup_walker(Path *path, void *context)
 		case T_ParquetScan:
 		case T_IndexScan:
 		case T_BitmapHeapScan:
-		case T_BitmapAppendOnlyScan:
 		case T_BitmapTableScan:
 		case T_TidScan:
 		case T_SubqueryScan:

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/cdb/cdbpersistentrelfile.c
----------------------------------------------------------------------
diff --git a/src/backend/cdb/cdbpersistentrelfile.c b/src/backend/cdb/cdbpersistentrelfile.c
index e7c2d63..2b8e3e8 100644
--- a/src/backend/cdb/cdbpersistentrelfile.c
+++ b/src/backend/cdb/cdbpersistentrelfile.c
@@ -36,7 +36,6 @@
 #include "catalog/pg_tablespace.h"
 #include "catalog/pg_database.h"
 #include "catalog/gp_persistent.h"
-#include "catalog/gp_fastsequence.h"
 #include "cdb/cdbsharedoidsearch.h"
 #include "access/persistentfilesysobjname.h"
 #include "cdb/cdbdirectopen.h"
@@ -713,52 +712,6 @@ PersistentFileSysObjStateChangeResult PersistentRelfile_MarkAbortingCreate(
 		return false;	// The initdb process will load the persistent table once we out of bootstrap mode.
 	}
 
-	/* MPP-16543: When inserting tuples into AO table, row numbers will be
-	 * generated from gp_fastsequence catalog table, as part of the design,
-	 * these sequence numbers are not reusable, even if the AO insert 
-	 * transaction is aborted. The entry in gp_fastsequence was inserted
-	 * using frozen_heap_insert, which means it's always visible. 
-
-	 * Aborted AO insert transaction will cause inconsistency between 
-	 * gp_fastsequence and pg_class, the solution is to introduce "frozen 
-	 * delete" - inplace update tuple's MVCC header to make it invisible.
-	 */
-
-	Relation gp_fastsequence_rel = heap_open(FastSequenceRelationId, RowExclusiveLock);
-	HeapTuple   tup;
-	SysScanDesc scan;
-	ScanKeyData skey; 
-	ScanKeyInit(&skey,
-				Anum_gp_fastsequence_objid,
-				BTEqualStrategyNumber,
-				F_OIDEQ,
-				relFileNode->relNode);
-
-	scan = systable_beginscan(gp_fastsequence_rel,
-							  InvalidOid,
-							  false,
-							  SnapshotNow,
-							  1,
-							  &skey);
-	while (HeapTupleIsValid(tup = systable_getnext(scan)))
-	{
-		Form_gp_fastsequence found = (Form_gp_fastsequence) GETSTRUCT(tup);
-		if (found->objid == relFileNode->relNode) 
-		{	
-			if (Debug_persistent_print)
-			{
-			elog(LOG, "frozen deleting gp_fastsequence entry for aborted AO insert transaction on relation %s", relpath(*relFileNode));
-			}
-
-			frozen_heap_inplace_delete(gp_fastsequence_rel, tup);
-		}
-	}						
-	systable_endscan(scan);
-	heap_close(gp_fastsequence_rel, RowExclusiveLock);
-	
-
-	
-
 	PersistentRelfile_VerifyInitScan();
 
 	// Do this check after skipping out if in bootstrap mode.

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/cdb/cdbplan.c
----------------------------------------------------------------------
diff --git a/src/backend/cdb/cdbplan.c b/src/backend/cdb/cdbplan.c
index 68d65f0..31152c8 100644
--- a/src/backend/cdb/cdbplan.c
+++ b/src/backend/cdb/cdbplan.c
@@ -415,22 +415,7 @@ plan_tree_mutator(Node *node,
 				return (Node *) newbmheapscan;
 			}
 			break;
-		
-
-		case T_BitmapAppendOnlyScan:
-			{
-				BitmapAppendOnlyScan  *bmappendonlyscan = (BitmapAppendOnlyScan *) node;
-				BitmapAppendOnlyScan  *newbmappendonlyscan;
-
-				FLATCOPY(newbmappendonlyscan, bmappendonlyscan, BitmapAppendOnlyScan);
-				SCANMUTATE(newbmappendonlyscan, bmappendonlyscan);
 				
-				MUTATE(newbmappendonlyscan->bitmapqualorig, bmappendonlyscan->bitmapqualorig, List *);
-	
-				return (Node *) newbmappendonlyscan;
-			}
-			break;
-		
 		case T_BitmapTableScan:
 			{
 				BitmapTableScan  *bmtablescan = (BitmapTableScan *) node;

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/cdb/cdbquerycontextdispatching.c
----------------------------------------------------------------------
diff --git a/src/backend/cdb/cdbquerycontextdispatching.c b/src/backend/cdb/cdbquerycontextdispatching.c
index b8607bd..ca4d6b2 100644
--- a/src/backend/cdb/cdbquerycontextdispatching.c
+++ b/src/backend/cdb/cdbquerycontextdispatching.c
@@ -36,8 +36,6 @@
 #include "catalog/aoseg.h"
 #include "catalog/catalog.h"
 #include "catalog/catquery.h"
-#include "catalog/gp_fastsequence.h"
-#include "catalog/gp_fastsequence.h"
 #include "catalog/pg_amop.h"
 #include "catalog/pg_amproc.h"
 #include "catalog/pg_aggregate.h"
@@ -55,7 +53,6 @@
 #include "catalog/pg_operator.h"
 #include "catalog/pg_proc.h"
 #include "catalog/pg_tablespace.h"
-#include "catalog/gp_fastsequence.h"
 #include "catalog/toasting.h"
 #include "cdb/cdbdispatchedtablespaceinfo.h"
 #include "cdb/cdbfilesystemcredential.h"
@@ -1385,49 +1382,6 @@ static void
 prepareDispatchedCatalogFastSequence(QueryContextInfo *cxt, Oid relid,
 									 List *segnos)
 {
-    QueryContextDispatchingHashKey hkey;
-    QueryContextDispatchingHashEntry *hentry = NULL;
-    bool found;
-
-    SysScanDesc scanDesc;
-    HeapTuple tuple;
-    Datum contentid;
-    ScanKeyData scanKeys[1];
-    Relation fast_seq_rel;
-
-    hkey.objid = relid;
-    hkey.type = RelationType;
-    hentry = hash_search(cxt->htab, &hkey, HASH_FIND, &found);
-    Assert(found);
-    Assert(hentry);
-
-    fast_seq_rel = heap_open(FastSequenceRelationId, AccessShareLock);
-
-    ScanKeyInit(&scanKeys[0], Anum_gp_fastsequence_objid, BTEqualStrategyNumber,
-            F_OIDEQ, ObjectIdGetDatum(hentry->aoseg_relid));
-
-    scanDesc = systable_beginscan(fast_seq_rel, InvalidOid, FALSE,
-            SnapshotNow, 1, scanKeys);
-
-    while (HeapTupleIsValid(tuple = systable_getnext(scanDesc)))
-    {
-    		int i;
-    		Datum segno;
-        contentid = heap_getattr(tuple, Anum_gp_fastsequence_contentid,
-                RelationGetDescr(fast_seq_rel), NULL);
-        segno = heap_getattr(tuple, Anum_gp_fastsequence_objmod,
-        			RelationGetDescr(fast_seq_rel), NULL);
-        i = list_find_int(segnos, DatumGetInt32(segno));
-        if (i != -1)
-        {
-        		AddTupleToContextInfo(cxt, FastSequenceRelationId, "gp_fastsequence",
-        				tuple, DatumGetInt32(contentid));
-        }
-    }
-
-    systable_endscan(scanDesc);
-
-    heap_close(fast_seq_rel, AccessShareLock);
 }
 
 /*
@@ -2815,9 +2769,6 @@ UpdateCatalogModifiedOnSegments(QueryContextDispatchingSendBack sendback)
 				sendback->eof[0], sendback->uncompressed_eof[0], sendback->insertCount);
 	}
 
-	ItemPointerData tid;
-	InsertFastSequenceEntry(aoEntry->segrelid, sendback->segno,
-			sendback->nextFastSequence, &tid);
 	heap_close(rel, AccessShareLock);
 
 	/*
@@ -2882,10 +2833,6 @@ AddSendbackChangedCatalogContent(StringInfo buf,
 		pq_sendint64(buf, sendback->uncompressed_eof[i]);
 	}
 
-	/*
-	 * 10, send next fast sequence.
-	 */
-	pq_sendint64(buf, sendback->nextFastSequence);
 }
 
 

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/cdb/cdbtargeteddispatch.c
----------------------------------------------------------------------
diff --git a/src/backend/cdb/cdbtargeteddispatch.c b/src/backend/cdb/cdbtargeteddispatch.c
index 720008d..4dfa6a7 100644
--- a/src/backend/cdb/cdbtargeteddispatch.c
+++ b/src/backend/cdb/cdbtargeteddispatch.c
@@ -166,7 +166,6 @@ GetContentIdsFromPlanForSingleRelation(List *rtable, Plan *plan, int rangeTableI
 	InitDirectDispatchCalculationInfo(&result);
 
 	if ( nodeTag((Node*)plan) == T_BitmapHeapScan ||
-		 nodeTag((Node*)plan) == T_BitmapAppendOnlyScan ||
 		 nodeTag((Node*)plan) == T_BitmapTableScan)
 	{
 		/* do not assert for bitmap heap scan --> it can have a child which is an index scan */
@@ -471,7 +470,6 @@ AssignContentIdsToPlanData_Walker(Node *node, void *context)
 				/* no change to dispatchInfo --> just iterate children */
 				break;
 			case T_BitmapHeapScan:
-			case T_BitmapAppendOnlyScan:
 			case T_BitmapTableScan:
 				/* no change to dispatchInfo --> just iterate children */
 				break;

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/commands/analyze.c
----------------------------------------------------------------------
diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c
index 1d25cb0..d0e2523 100644
--- a/src/backend/commands/analyze.c
+++ b/src/backend/commands/analyze.c
@@ -918,7 +918,6 @@ static void analyzeRelation(Relation relation, List *lAttributeNames, bool rooto
 	List	*indexOidList = NIL;
 	ListCell	*lc = NULL;
 	StringInfoData location;
-	StringInfoData err_msg;
 	
 	initStringInfo(&location);
 	relationOid		= RelationGetRelid(relation);

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/commands/cluster.c
----------------------------------------------------------------------
diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c
index ab6b87e..9372efe 100644
--- a/src/backend/commands/cluster.c
+++ b/src/backend/commands/cluster.c
@@ -50,7 +50,6 @@
 #include "catalog/pg_type.h"
 #include "catalog/toasting.h"
 #include "catalog/aoseg.h"
-#include "catalog/aoblkdir.h"
 #include "catalog/pg_tablespace.h"
 #include "commands/cluster.h"
 #include "commands/tablecmds.h"
@@ -857,12 +856,6 @@ make_new_heap(Oid OIDOldHeap, const char *NewName, Oid NewTableSpace,
 	AlterTableCreateAoSegTableWithOid(OIDNewHeap, aOid, aiOid,
 									  aosegComptypeOid, is_part);
 
-    if ( createAoBlockDirectory )
-    {
-	    AlterTableCreateAoBlkdirTableWithOid(OIDNewHeap, blkdirOid, blkdirIdxOid,
-										 aoblkdirComptypeOid, is_part);
-    }
-
 	cloneAttributeEncoding(OIDOldHeap,
 						   OIDNewHeap,
 						   RelationGetNumberOfAttributes(OldHeap));

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/commands/explain.c
----------------------------------------------------------------------
diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c
index 876b7ad..51afde2 100644
--- a/src/backend/commands/explain.c
+++ b/src/backend/commands/explain.c
@@ -1167,12 +1167,6 @@ explain_outNode(StringInfo str,
 		case T_BitmapHeapScan:
 			pname = "Bitmap Heap Scan";
 			break;
-		case T_BitmapAppendOnlyScan:
-			if (((BitmapAppendOnlyScan *)plan)->isAORow)
-				pname = "Bitmap Append-Only Row-Oriented Scan";
-			else
-				pname = "Bitmap Append-Only Column-Oriented Scan";
-			break;
 		case T_BitmapTableScan:
 			pname = "Bitmap Table Scan";
 			break;
@@ -1355,7 +1349,6 @@ explain_outNode(StringInfo str,
 		case T_DynamicTableScan:
 		case T_DynamicIndexScan:
 		case T_BitmapHeapScan:
-		case T_BitmapAppendOnlyScan:
 		case T_BitmapTableScan:
 		case T_TidScan:
 			if (((Scan *) plan)->scanrelid > 0)
@@ -1538,7 +1531,6 @@ explain_outNode(StringInfo str,
 						   str, indent, es);
 			break;
 		case T_BitmapHeapScan:
-		case T_BitmapAppendOnlyScan:
 		case T_BitmapTableScan:
 			/* XXX do we want to show this in production? */
 			if (nodeTag(plan) == T_BitmapHeapScan)
@@ -1549,14 +1541,6 @@ explain_outNode(StringInfo str,
 							   plan, outer_plan,
 							   str, indent, es);
 			}
-			else if (nodeTag(plan) == T_BitmapAppendOnlyScan)
-			{
-				show_scan_qual(((BitmapAppendOnlyScan *) plan)->bitmapqualorig,
-							   "Recheck Cond",
-							   ((Scan *) plan)->scanrelid,
-							   plan, outer_plan,
-							   str, indent, es);
-			}
 			else if (nodeTag(plan) == T_BitmapTableScan)
 			{
 				show_scan_qual(((BitmapTableScan *) plan)->bitmapqualorig,
@@ -1901,7 +1885,6 @@ explain_outNode(StringInfo str,
 		explain_outNode(str, outerPlan(plan),
 						outerPlanState(planstate),
 						(IsA(plan, BitmapHeapScan) |
-						 IsA(plan, BitmapAppendOnlyScan) |
 						 IsA(plan, BitmapTableScan)) ? outer_plan : NULL,
 						indent + 3, es,isSequential);
 	}

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/executor/Makefile
----------------------------------------------------------------------
diff --git a/src/backend/executor/Makefile b/src/backend/executor/Makefile
index d2bf879..2589e6a 100644
--- a/src/backend/executor/Makefile
+++ b/src/backend/executor/Makefile
@@ -17,13 +17,13 @@ override CPPFLAGS := -I$(top_srcdir)/src/backend/gp_libpq_fe $(CPPFLAGS)
 OBJS = execAmi.o execGrouping.o execHHashagg.o execJunk.o execMain.o \
        execProcnode.o execQual.o execScan.o execTuples.o execGpmon.o \
        execUtils.o execWorkfile.o execHeapScan.o execAOScan.o execParquetScan.o\
-       execBitmapTableScan.o execBitmapHeapScan.o execBitmapAOScan.o execBitmapParquetScan.o execDynamicScan.o \
+       execBitmapTableScan.o execBitmapHeapScan.o execDynamicScan.o \
        execIndexscan.o \
        functions.o \
        instrument.o \
        nodeAppend.o nodeAgg.o \
        nodeBitmapAnd.o nodeBitmapOr.o \
-       nodeBitmapAppendOnlyscan.o nodeBitmapHeapscan.o nodeBitmapIndexscan.o nodeBitmapTableScan.o \
+       nodeBitmapHeapscan.o nodeBitmapIndexscan.o nodeBitmapTableScan.o \
        nodeExternalscan.o \
        nodeFunctionscan.o \
        nodeHash.o nodeHashjoin.o \

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/executor/execAmi.c
----------------------------------------------------------------------
diff --git a/src/backend/executor/execAmi.c b/src/backend/executor/execAmi.c
index 541ca8c..e51991a 100644
--- a/src/backend/executor/execAmi.c
+++ b/src/backend/executor/execAmi.c
@@ -46,7 +46,6 @@
 #include "executor/nodeTidscan.h"
 #include "executor/nodeUnique.h"
 #include "executor/nodeValuesscan.h"
-#include "executor/nodeBitmapAppendOnlyscan.h"
 #include "executor/nodeWindow.h"
 #include "executor/nodeShareInputScan.h"
 
@@ -188,10 +187,6 @@ ExecReScan(PlanState *node, ExprContext *exprCtxt)
 			ExecValuesReScan((ValuesScanState *) node, exprCtxt);
 			break;
 
-		case T_BitmapAppendOnlyScanState:
-			ExecBitmapAppendOnlyReScan((BitmapAppendOnlyScanState *) node, exprCtxt);
-			break;
-
 		case T_NestLoopState:
 			ExecReScanNestLoop((NestLoopState *) node, exprCtxt);
 			break;
@@ -640,11 +635,7 @@ ExecEagerFree(PlanState *node)
 		case T_BitmapHeapScanState:
 			ExecEagerFreeBitmapHeapScan((BitmapHeapScanState *)node);
 			break;
-			
-		case T_BitmapAppendOnlyScanState:
-			ExecEagerFreeBitmapAppendOnlyScan((BitmapAppendOnlyScanState *)node);
-			break;
-			
+
 		case T_BitmapTableScanState:
 			ExecEagerFreeBitmapTableScan((BitmapTableScanState *)node);
 			break;
@@ -788,7 +779,6 @@ ExecEagerFreeChildNodes(PlanState *node, bool subplanDone)
 		case T_ExternalScanState:
 		case T_IndexScanState:
 		case T_BitmapHeapScanState:
-		case T_BitmapAppendOnlyScanState:
 		case T_FunctionScanState:
 		case T_MaterialState:
 		case T_SortState:

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/executor/execBitmapAOScan.c
----------------------------------------------------------------------
diff --git a/src/backend/executor/execBitmapAOScan.c b/src/backend/executor/execBitmapAOScan.c
deleted file mode 100644
index 94ef8f4..0000000
--- a/src/backend/executor/execBitmapAOScan.c
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * execBitmapAOScan.c
- *   Support routines for scanning AO and AOCO tables using bitmaps.
- *
- * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- */
-#include "postgres.h"
-
-#include "access/heapam.h"
-#include "executor/execdebug.h"
-#include "executor/nodeBitmapAppendOnlyscan.h"
-#include "cdb/cdbappendonlyam.h"
-#include "pgstat.h"
-#include "utils/memutils.h"
-#include "miscadmin.h"
-#include "parser/parsetree.h"
-#include "cdb/cdbvars.h" /* gp_select_invisible */
-#include "nodes/tidbitmap.h"
-
-typedef struct
-{
-	int			tupleIndex;
-	int			nTuples;
-} AOIteratorState;
-
-/*
- * Prepares for a new AO scan.
- */
-void
-BitmapAOScanBegin(ScanState *scanState)
-{
-	BitmapTableScanState *node = (BitmapTableScanState *)(scanState);
-	Relation currentRelation = node->ss.ss_currentRelation;
-	EState *estate = node->ss.ps.state;
-
-	if (scanState->tableType == TableTypeAppendOnly)
-	{
-		node->scanDesc =
-			appendonly_fetch_init(currentRelation,
-								  estate->es_snapshot);
-	}
-	else if (scanState->tableType == TableTypeParquet)
-	{
-	  Assert(!"BitmapScan for Parquet is not supported yet");
-      /*
-       * Obtain the projection.
-       */
-      Assert(currentRelation->rd_att != NULL);
-
-      bool *proj = (bool *)palloc0(sizeof(bool) * currentRelation->rd_att->natts);
-
-      GetNeededColumnsForScan((Node *) node->ss.ps.plan->targetlist, proj, currentRelation->rd_att->natts);
-      GetNeededColumnsForScan((Node *) node->ss.ps.plan->qual, proj, currentRelation->rd_att->natts);
-
-      int colno = 0;
-
-      /* Check if any column is projected */
-      for(colno = 0; colno < currentRelation->rd_att->natts; colno++)
-      {
-        if(proj[colno])
-        {
-          break;
-        }
-      }
-
-      /*
-       * At least project one column. Since the tids stored in the index may not have
-       * a corresponding tuple any more (because of previous crashes, for example), we
-       * need to read the tuple to make sure.
-       */
-      if(colno == currentRelation->rd_att->natts)
-      {
-        proj[0] = true;
-      }
-
-      /*
-        node->scanDesc =
-            parquet_fetch_init(currentRelation, estate->es_snapshot, proj);
-       */
-	}
-	else
-	{
-		Assert(!"Invalid table type");
-	}
-
-
-	/*
-	 * AO doesn't need rechecking every tuple once it resolves
-	 * from the bitmap page, except when it deals with lossy
-	 * bitmap, which is handled via scanState->isLossyBitmapPage.
-	 */
-	node->recheckTuples = false;
-}
-
-/*
- * Cleans up after the scanning is done.
- */
-void
-BitmapAOScanEnd(ScanState *scanState)
-{
-	BitmapTableScanState *node = (BitmapTableScanState *)scanState;
-	Assert(node->ss.scan_state == SCAN_SCAN);
-
-	if (scanState->tableType == TableTypeAppendOnly)
-	{
-		appendonly_fetch_finish((AppendOnlyFetchDesc)node->scanDesc);
-	}
-	else if (scanState->tableType == TableTypeParquet)
-	{
-	  Assert(!"BitmapScan for Parquet is not supported yet");
-	  /*
-		pfree(((AOCSFetchDesc)node->scanDesc)->proj);
-		aocs_fetch_finish(node->scanDesc);
-		*/
-	}
-	else
-	{
-		Assert(!"Invalid table type");
-	}
-	pfree(node->scanDesc);
-	node->scanDesc = NULL;
-
-	if (node->iterator)
-	{
-		pfree(node->iterator);
-		node->iterator = NULL;
-	}
-}
-
-/*
- * Returns the next matching tuple.
- */
-TupleTableSlot *
-BitmapAOScanNext(ScanState *scanState)
-{
-	BitmapTableScanState *node = (BitmapTableScanState *)scanState;
-
-	TupleTableSlot *slot = node->ss.ss_ScanTupleSlot;
-
-	TBMIterateResult *tbmres = (TBMIterateResult *)node->tbmres;
-
-	/* Make sure we never cross 15-bit offset number [MPP-24326] */
-	Assert(tbmres->ntuples <= INT16_MAX + 1);
-
-	OffsetNumber psuedoHeapOffset;
-	ItemPointerData psudeoHeapTid;
-	AOTupleId aoTid;
-
-	Assert(tbmres != NULL && tbmres->ntuples != 0);
-	Assert(node->needNewBitmapPage == false);
-
-	AOIteratorState *iterator = (AOIteratorState *)node->iterator;
-	for (;;)
-	{
-		CHECK_FOR_INTERRUPTS();
-
-		if (iterator == NULL)
-		{
-			iterator = palloc0(sizeof(AOIteratorState));
-
-			if (node->isLossyBitmapPage)
-			{
-				/* Iterate over the first 2^15 tuples [MPP-24326] */
-				iterator->nTuples = INT16_MAX + 1;
-			}
-			else
-			{
-				iterator->nTuples = tbmres->ntuples;
-			}
-			/* Start from the beginning of the page */
-			iterator->tupleIndex = 0;
-
-			node->iterator = iterator;
-		}
-		else
-		{
-			/*
-			 * Continuing in previously obtained page; advance tupleIndex
-			 */
-			iterator->tupleIndex++;
-		}
-
-		/*
-		 * Out of range?  If so, nothing more to look at on this page
-		 */
-		if (iterator->tupleIndex < 0 || iterator->tupleIndex >= iterator->nTuples)
-		{
-			pfree(iterator);
-
-			node->iterator = NULL;
-
-			node->needNewBitmapPage = true;
-
-			return ExecClearTuple(slot);
-		}
-
-		/*
-		 * Must account for lossy page info...
-		 */
-		if (node->isLossyBitmapPage)
-		{
-			/* We are iterating through all items. */
-			psuedoHeapOffset = iterator->tupleIndex;
-		}
-		else
-		{
-			Assert(iterator->tupleIndex <= tbmres->ntuples);
-			psuedoHeapOffset = tbmres->offsets[iterator->tupleIndex];
-
-			/*
-			 * Ensure that the reserved 16-th bit is always ON for offsets from
-			 * lossless bitmap pages [MPP-24326].
-			 */
-			Assert(((uint16)(psuedoHeapOffset & 0x8000)) > 0);
-		}
-
-		/*
-		 * Okay to fetch the tuple
-		 */
-		ItemPointerSet(
-				&psudeoHeapTid,
-				tbmres->blockno,
-				psuedoHeapOffset);
-
-		tbm_convert_appendonly_tid_out(&psudeoHeapTid, &aoTid);
-
-		if (scanState->tableType == TableTypeAppendOnly)
-		{
-			appendonly_fetch((AppendOnlyFetchDesc)node->scanDesc, &aoTid, slot);
-		}
-		else if (scanState->tableType == TableTypeParquet)
-		{
-		  Assert(!"BitmapScan for Parquet is not supported yet");
-		  /*
-			Assert(scanState->tableType == TableTypeAOCS);
-			aocs_fetch((AOCSFetchDesc)node->scanDesc, &aoTid, slot);
-			*/
-		}
-
-      	if (TupIsNull(slot))
-      	{
-			continue;
-      	}
-
-		Assert(ItemPointerIsValid(slot_get_ctid(slot)));
-
-		pgstat_count_heap_fetch(node->ss.ss_currentRelation);
-
-		if (!BitmapTableScanRecheckTuple(node, slot))
-		{
-			ExecClearTuple(slot);
-			continue;
-		}
-
-		return slot;
-	}
-
-	/*
-	 * We should never reach here as the termination is handled
-	 * from nodeBitmapTableScan.
-	 */
-	Assert(false);
-	return NULL;
-}
-
-/*
- * Prepares for a re-scan.
- */
-void
-BitmapAOScanReScan(ScanState *scanState)
-{
-	/*
-	 * As per the existing implementation from nodeBitmapAppendOnlyScan.c
-	 * for rescanning of AO, we don't have anything specific
-	 * to do here (the refactored BitmapTableScan takes care of everything).
-	 */
-}
-

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/executor/execBitmapParquetScan.c
----------------------------------------------------------------------
diff --git a/src/backend/executor/execBitmapParquetScan.c b/src/backend/executor/execBitmapParquetScan.c
deleted file mode 100644
index ec960b6..0000000
--- a/src/backend/executor/execBitmapParquetScan.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/*
- * execBitmapParquetScan.c
- *   Support routines for scanning parquet tables using bitmaps.
- *
- */
-
-#include "postgres.h"
-#include "nodes/execnodes.h"
-#include "executor/tuptable.h"
-
-void BitmapParquetScanBegin(ScanState *scanState);
-void BitmapParquetScanEnd(ScanState *scanState);
-TupleTableSlot* BitmapParquetScanNext(ScanState *scanState);
-void BitmapParquetScanReScan(ScanState *scanState);
-
-/*
- * Prepares for a new parquet scan.
- */
-void
-BitmapParquetScanBegin(ScanState *scanState)
-{
-	Insist(!"Bitmap index scan on parquet table is not supported");
-}
-
-/*
- * Cleans up after the scanning is done.
- */
-void
-BitmapParquetScanEnd(ScanState *scanState)
-{
-	Insist(!"Bitmap index scan on parquet table is not supported");
-}
-
-/*
- * Returns the next matching tuple.
- */
-TupleTableSlot *
-BitmapParquetScanNext(ScanState *scanState)
-{
-	Insist(!"Bitmap index scan on parquet table is not supported");
-}
-
-/*
- * Prepares for a re-scan.
- */
-void
-BitmapParquetScanReScan(ScanState *scanState)
-{
-	Insist(!"Bitmap index scan on parquet table is not supported");
-}
-

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/executor/execBitmapTableScan.c
----------------------------------------------------------------------
diff --git a/src/backend/executor/execBitmapTableScan.c b/src/backend/executor/execBitmapTableScan.c
index aa4a491..066624e 100644
--- a/src/backend/executor/execBitmapTableScan.c
+++ b/src/backend/executor/execBitmapTableScan.c
@@ -62,20 +62,6 @@ getBitmapTableScanMethod(TableType tableType)
 		{
 			&BitmapHeapScanNext, &BitmapHeapScanBegin, &BitmapHeapScanEnd,
 			&BitmapHeapScanReScan, &MarkRestrNotAllowed, &MarkRestrNotAllowed
-		},
-		{
-			&BitmapAOScanNext, &BitmapAOScanBegin, &BitmapAOScanEnd,
-			&BitmapAOScanReScan, &MarkRestrNotAllowed, &MarkRestrNotAllowed
-		},
-		{
-			/* The same set of methods serve both AO and AOCO scans */
-			&BitmapAOScanNext, &BitmapAOScanBegin, &BitmapAOScanEnd,
-			&BitmapAOScanReScan, &MarkRestrNotAllowed, &MarkRestrNotAllowed
-		},
-		{
-			/* The same set of methods serve both AO and AOCO scans */
-			&BitmapParquetScanNext, &BitmapParquetScanBegin, &BitmapParquetScanEnd,
-			&BitmapParquetScanReScan, &MarkRestrNotAllowed, &MarkRestrNotAllowed
 		}
 	};
 

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/executor/execMain.c
----------------------------------------------------------------------
diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c
index 444d9a4..1c215b0 100644
--- a/src/backend/executor/execMain.c
+++ b/src/backend/executor/execMain.c
@@ -65,7 +65,6 @@
 #include "catalog/namespace.h"
 #include "catalog/toasting.h"
 #include "catalog/aoseg.h"
-#include "catalog/aoblkdir.h"
 #include "catalog/catalog.h"
 #include "catalog/pg_attribute_encoding.h"
 #include "catalog/pg_type.h"

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/executor/execProcnode.c
----------------------------------------------------------------------
diff --git a/src/backend/executor/execProcnode.c b/src/backend/executor/execProcnode.c
index d3ad168..0cc8716 100644
--- a/src/backend/executor/execProcnode.c
+++ b/src/backend/executor/execProcnode.c
@@ -109,7 +109,6 @@
 #include "executor/nodeBitmapIndexscan.h"
 #include "executor/nodeBitmapTableScan.h"
 #include "executor/nodeBitmapOr.h"
-#include "executor/nodeBitmapAppendOnlyscan.h"
 #include "executor/nodeExternalscan.h"
 #include "executor/nodeTableScan.h"
 #include "executor/nodeDML.h"
@@ -265,8 +264,7 @@ ExecInitNode(Plan *node, EState *estate, int eflags)
 	 */
 	if (force_bitmap_table_scan)
 	{
-		if (IsA(node, BitmapHeapScan) ||
-				IsA(node, BitmapAppendOnlyScan))
+		if (IsA(node, BitmapHeapScan))
 		{
 			node->type = T_BitmapTableScan;
 		}
@@ -417,17 +415,6 @@ ExecInitNode(Plan *node, EState *estate, int eflags)
 			END_MEMORY_ACCOUNT();
 			break;
 
-		case T_BitmapAppendOnlyScan:
-			curMemoryAccount = CREATE_EXECUTOR_MEMORY_ACCOUNT(isAlienPlanNode, node, BitmapAppendOnlyScan);
-
-			START_MEMORY_ACCOUNT(curMemoryAccount);
-			{
-			result = (PlanState *) ExecInitBitmapAppendOnlyScan((BitmapAppendOnlyScan*) node,
-														        estate, eflags);
-			}
-			END_MEMORY_ACCOUNT();
-			break;
-
 		case T_BitmapTableScan:
 			curMemoryAccount = CREATE_EXECUTOR_MEMORY_ACCOUNT(isAlienPlanNode, node, BitmapTableScan);
 
@@ -842,7 +829,6 @@ ExecProcNode(PlanState *node)
 		&&Exec_Jmp_DynamicIndexScan,
 		&&Exec_Jmp_BitmapIndexScan,
 		&&Exec_Jmp_BitmapHeapScan,
-		&&Exec_Jmp_BitmapAppendOnlyScan,
 		&&Exec_Jmp_BitmapTableScan,
 		&&Exec_Jmp_TidScan,
 		&&Exec_Jmp_SubqueryScan,
@@ -945,10 +931,6 @@ Exec_Jmp_BitmapHeapScan:
 	result = ExecBitmapHeapScan((BitmapHeapScanState *) node);
 	goto Exec_Jmp_Done;
 
-Exec_Jmp_BitmapAppendOnlyScan:
-	result = ExecBitmapAppendOnlyScan((BitmapAppendOnlyScanState *) node);
-	goto Exec_Jmp_Done;
-
 Exec_Jmp_BitmapTableScan:
 	result = ExecBitmapTableScan((BitmapTableScanState *) node);
 	goto Exec_Jmp_Done;
@@ -1369,9 +1351,6 @@ ExecCountSlotsNode(Plan *node)
 
 		case T_BitmapHeapScan:
 			return ExecCountSlotsBitmapHeapScan((BitmapHeapScan *) node);
-
-		case T_BitmapAppendOnlyScan:
-			return ExecCountSlotsBitmapAppendOnlyScan((BitmapAppendOnlyScan*) node);
 			
 		case T_BitmapTableScan:
 			return ExecCountSlotsBitmapTableScan((BitmapTableScan *) node);
@@ -1649,10 +1628,6 @@ ExecEndNode(PlanState *node)
 			ExecEndBitmapHeapScan((BitmapHeapScanState *) node);
 			break;
 
-		case T_BitmapAppendOnlyScanState:
-			ExecEndBitmapAppendOnlyScan((BitmapAppendOnlyScanState *) node);
-			break;
-
 		case T_BitmapTableScanState:
 			ExecEndBitmapTableScan((BitmapTableScanState *) node);
 			break;

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/executor/execUtils.c
----------------------------------------------------------------------
diff --git a/src/backend/executor/execUtils.c b/src/backend/executor/execUtils.c
index 399584f..ffd756d 100644
--- a/src/backend/executor/execUtils.c
+++ b/src/backend/executor/execUtils.c
@@ -2341,7 +2341,6 @@ void (*initGpmonPktFuncs[])(Plan *planNode, gpmon_packet_t *gpmon_pkt, EState *e
 	&initGpmonPktForDynamicIndexScan, /* T_DynamicIndexScan */
 	&initGpmonPktForBitmapIndexScan, /* T_BitmapIndexScan */
 	&initGpmonPktForBitmapHeapScan, /* T_BitmapHeapScan */
-	&initGpmonPktForBitmapAppendOnlyScan, /* T_BitmapAppendOnlyScan */
 	&initGpmonPktForBitmapTableScan, /* T_BitmapTableScan */
 	&initGpmonPktForTidScan, /* T_TidScan */
 	&initGpmonPktForSubqueryScan, /* T_SubqueryScan */
@@ -2480,7 +2479,6 @@ sendInitGpmonPkts(Plan *node, EState *estate)
 
 		case T_Result:
 		case T_BitmapHeapScan:
-		case T_BitmapAppendOnlyScan:
 		case T_BitmapTableScan:
 		case T_ShareInputScan:
 		case T_Material:

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/executor/nodeBitmapAppendOnlyscan.c
----------------------------------------------------------------------
diff --git a/src/backend/executor/nodeBitmapAppendOnlyscan.c b/src/backend/executor/nodeBitmapAppendOnlyscan.c
deleted file mode 100755
index 77316cf..0000000
--- a/src/backend/executor/nodeBitmapAppendOnlyscan.c
+++ /dev/null
@@ -1,612 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*-------------------------------------------------------------------------
- *
- * nodeBitmapAppendOnlyscan.c
- *	  Routines to support bitmapped scan from Append-Only relations
- *
- * This is a modified copy of nodeBitmapHeapscan.c converted to Append-Only.
- *
- *
- * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- * Portions Copyright (c) 2008-2009, Greenplum Inc.
- *
- *-------------------------------------------------------------------------
- */
-/*
- * INTERFACE ROUTINES
- *		ExecBitmapAppendOnlyScan		scan from an AO relation using bitmap info
- *		ExecBitmapAppendOnlyNext		workhorse for above
- *		ExecInitBitmapAppendOnlyScan	creates and initializes state info.
- *		ExecBitmapAppendOnlyReScan	prepares to rescan the plan.
- *		ExecEndBitmapAppendOnlyScan	releases all storage.
- */
-#include "postgres.h"
-
-#include "access/heapam.h"
-#include "executor/execdebug.h"
-#include "executor/nodeBitmapAppendOnlyscan.h"
-#include "cdb/cdbappendonlyam.h"
-#include "pgstat.h"
-#include "utils/memutils.h"
-#include "miscadmin.h"
-#include "parser/parsetree.h"
-#include "cdb/cdbvars.h" /* gp_select_invisible */
-#include "nodes/tidbitmap.h"
-
-static TupleTableSlot *BitmapAppendOnlyScanNext(BitmapAppendOnlyScanState *node);
-
-/*
- * Initialize the fetch descriptor for the BitmapAppendOnlyScanState if
- * it is not initialized.
- */
-static void
-initFetchDesc(BitmapAppendOnlyScanState *scanstate)
-{
-	BitmapAppendOnlyScan *node = (BitmapAppendOnlyScan *)(scanstate->ss.ps.plan);
-	Relation currentRelation = scanstate->ss.ss_currentRelation;
-	EState *estate = scanstate->ss.ps.state;
-
-	if (node->isAORow)
-	{
-		if (scanstate->baos_currentAOFetchDesc == NULL)
-		{
-			scanstate->baos_currentAOFetchDesc = 
-				appendonly_fetch_init(currentRelation,
-									  estate->es_snapshot);
-		}
-	}
-	
-}
-
-/*
- * Free fetch descriptor.
- */
-static inline void
-freeFetchDesc(BitmapAppendOnlyScanState *scanstate)
-{
-	if (scanstate->baos_currentAOFetchDesc != NULL)
-	{
-		Assert(((BitmapAppendOnlyScan *)(scanstate->ss.ps.plan))->isAORow);
-		appendonly_fetch_finish(scanstate->baos_currentAOFetchDesc);
-		pfree(scanstate->baos_currentAOFetchDesc);
-		scanstate->baos_currentAOFetchDesc = NULL;
-	}
-
-}
-
-/*
- * Initialize the state relevant to bitmaps.
- */
-static inline void
-initBitmapState(BitmapAppendOnlyScanState *scanstate)
-{
-	if (scanstate->baos_tbmres == NULL)
-	{
-		scanstate->baos_tbmres =
-			palloc(sizeof(TBMIterateResult) +
-					MAX_TUPLES_PER_PAGE * sizeof(OffsetNumber));
-
-		/* initialize result header */
-		MemSetAligned(scanstate->baos_tbmres, 0, sizeof(TBMIterateResult));
-	}
-}
-
-/*
- * Free the state relevant to bitmaps
- */
-static inline void
-freeBitmapState(BitmapAppendOnlyScanState *scanstate)
-{
-	if (scanstate->baos_tbm != NULL)
-	{
-		if(IsA(scanstate->baos_tbm, HashBitmap))
-			tbm_free((HashBitmap *)scanstate->baos_tbm);
-		else
-            tbm_bitmap_free(scanstate->baos_tbm);
-
-		scanstate->baos_tbm = NULL;
-	}
-	if (scanstate->baos_tbmres != NULL)
-	{
-		pfree(scanstate->baos_tbmres);
-		scanstate->baos_tbmres = NULL;
-	}
-}
-
-/* ----------------------------------------------------------------
- *		BitmapAppendOnlyNext
- *
- *		Retrieve next tuple from the BitmapAppendOnlyScan node's currentRelation
- * ----------------------------------------------------------------
- */
-static TupleTableSlot *
-BitmapAppendOnlyScanNext(BitmapAppendOnlyScanState *node)
-{
-	EState	   *estate;
-	ExprContext *econtext;
-	AppendOnlyFetchDesc aoFetchDesc;
-	Index		scanrelid;
-	Node  		*tbm;
-	TBMIterateResult *tbmres;
-	OffsetNumber psuedoHeapOffset;
-	ItemPointerData psudeoHeapTid;
-	AOTupleId aoTid;
-	TupleTableSlot *slot;
-
-	/*
-	 * extract necessary information from index scan node
-	 */
-	estate = node->ss.ps.state;
-	econtext = node->ss.ps.ps_ExprContext;
-	slot = node->ss.ss_ScanTupleSlot;
-
-	initBitmapState(node);
-	initFetchDesc(node);
-
-	aoFetchDesc = node->baos_currentAOFetchDesc;
-	scanrelid = ((BitmapAppendOnlyScan *) node->ss.ps.plan)->scan.scanrelid;
-	tbm = node->baos_tbm;
-	tbmres = (TBMIterateResult *) node->baos_tbmres;
-	Assert(tbmres != NULL);
-
-	/*
-	 * Check if we are evaluating PlanQual for tuple of this relation.
-	 * Additional checking is not good, but no other way for now. We could
-	 * introduce new nodes for this case and handle IndexScan --> NewNode
-	 * switching in Init/ReScan plan...
-	 */
-	if (estate->es_evTuple != NULL &&
-		estate->es_evTuple[scanrelid - 1] != NULL)
-	{
-		if (estate->es_evTupleNull[scanrelid - 1])
-		{
-			freeFetchDesc(node);
-			freeBitmapState(node);
-			
-			return ExecClearTuple(slot);
-		}
-
-		ExecStoreGenericTuple(estate->es_evTuple[scanrelid - 1],
-					   slot, false);
-
-		/* Does the tuple meet the original qual conditions? */
-		econtext->ecxt_scantuple = slot;
-
-		ResetExprContext(econtext);
-
-		if (!ExecQual(node->baos_bitmapqualorig, econtext, false))
-		{
-			ExecEagerFreeBitmapAppendOnlyScan(node);
-
-			ExecClearTuple(slot);		/* would not be returned by scan */
-		}
-
-		/* Flag for the next call that no more tuples */
-		estate->es_evTupleNull[scanrelid - 1] = true;
-
-		if (!TupIsNull(slot))
-		{
-			Gpmon_M_Incr_Rows_Out(GpmonPktFromBitmapAppendOnlyScanState(node));
-			CheckSendPlanStateGpmonPkt(&node->ss.ps);
-		}
-		return slot;
-	}
-
-	/*
-	 * If we haven't yet performed the underlying index scan, or
-	 * we have used up the bitmaps from the previous scan, do the next scan,
-	 * and prepare the bitmap to be iterated over.
- 	 */
-	if (tbm == NULL)
-	{
-		tbm = (Node *) MultiExecProcNode(outerPlanState(node));
-
-		if (tbm != NULL && (!(IsA(tbm, HashBitmap) ||
-							  IsA(tbm, StreamBitmap))))
-			elog(ERROR, "unrecognized result from subplan");
-
-		/* When a HashBitmap is returned, set the returning bitmaps
-		 * in the subplan to NULL, so that the subplan nodes do not
-		 * mistakenly try to release the space during the rescan.
-		 */
-		if (tbm != NULL && IsA(tbm, HashBitmap))
-			tbm_reset_bitmaps(outerPlanState(node));
-
-		node->baos_tbm = tbm;
-	}
-
-	if (tbm == NULL)
-	{
-		ExecEagerFreeBitmapAppendOnlyScan(node);
-
-		return ExecClearTuple(slot);
-	}
-
-	Assert(tbm != NULL);
-	Assert(tbmres != NULL);
-
-	for (;;)
-	{
-		CHECK_FOR_INTERRUPTS();
-
-		if (!node->baos_gotpage)
-		{
-			/*
-			 * Obtain the next psuedo-heap-page-info with item bit-map.  Later, we'll
-			 * convert the (psuedo) heap block number and item number to an
-			 * Append-Only TID.
-			 */
-			if (!tbm_iterate(tbm, tbmres))
-			{
-				/* no more entries in the bitmap */
-				break;
-			}
-
-			/* If tbmres contains no tuples, continue. */
-			if (tbmres->ntuples == 0)
-				continue;
-
-			Gpmon_M_Incr(GpmonPktFromBitmapAppendOnlyScanState(node), GPMON_BITMAPAPPENDONLYSCAN_PAGE);
-			CheckSendPlanStateGpmonPkt(&node->ss.ps);
-
-		 	node->baos_gotpage = true;
-
-			/*
-		 	* Set cindex to first slot to examine
-		 	*/
-			node->baos_cindex = 0;
-
-			node->baos_lossy = (tbmres->ntuples < 0);
-			if (!node->baos_lossy)
-				node->baos_ntuples = tbmres->ntuples;
-			else
-				node->baos_ntuples = MAX_TUPLES_PER_PAGE;
-				
-		}
-		else
-		{
-			/*
-			 * Continuing in previously obtained page; advance cindex
-			 */
-			node->baos_cindex++;
-		}
-
-		/*
-		 * Out of range?  If so, nothing more to look at on this page
-		 */
-		if (node->baos_cindex < 0 || node->baos_cindex >= node->baos_ntuples)
-		{
-		 	node->baos_gotpage = false;
-			continue;
-		}
-
-		/*
-		 * Must account for lossy page info...
-		 */
-		if (node->baos_lossy)
-			psuedoHeapOffset = node->baos_cindex;	// We are iterating through all items.
-		else
-		{
-			Assert(node->baos_cindex <= tbmres->ntuples);
-			psuedoHeapOffset = tbmres->offsets[node->baos_cindex];
-		}
-
-		/*
-		 * Okay to fetch the tuple
-		 */
-		ItemPointerSet(
-				&psudeoHeapTid, 
-				tbmres->blockno, 
-				psuedoHeapOffset);
-
-		tbm_convert_appendonly_tid_out(&psudeoHeapTid, &aoTid);
-
-		if (aoFetchDesc != NULL)
-		{
-			appendonly_fetch(aoFetchDesc, &aoTid, slot);
-		}
-		
-      	if (TupIsNull(slot))
-			continue;
-
-		pgstat_count_heap_fetch(node->ss.ss_currentRelation);
-
-		/*
-		 * If we are using lossy info, we have to recheck the qual
-		 * conditions at every tuple.
-		 */
-		if (node->baos_lossy)
-		{
-			econtext->ecxt_scantuple = slot;
-			ResetExprContext(econtext);
-
-			if (!ExecQual(node->baos_bitmapqualorig, econtext, false))
-			{
-				/* Fails recheck, so drop it and loop back for another */
-				ExecClearTuple(slot);
-				continue;
-			}
-		}
-
-		/* OK to return this tuple */
-      	if (!TupIsNull(slot))
-		{
-			Gpmon_M_Incr_Rows_Out(GpmonPktFromBitmapAppendOnlyScanState(node));
-			CheckSendPlanStateGpmonPkt(&node->ss.ps);
-		}
-
-		return slot;
-	}
-
-	/*
-	 * if we get here it means we are at the end of the scan..
-	 */
-	ExecEagerFreeBitmapAppendOnlyScan(node);
-
-	return ExecClearTuple(slot);
-}
-
-/* ----------------------------------------------------------------
- *		ExecBitmapAppendOnlyScan(node)
- * ----------------------------------------------------------------
- */
-TupleTableSlot *
-ExecBitmapAppendOnlyScan(BitmapAppendOnlyScanState *node)
-{
-	/*
-	 * use BitmapAppendOnlyNext as access method
-	 */
-	return ExecScan(&node->ss, (ExecScanAccessMtd) BitmapAppendOnlyScanNext);
-}
-
-/* ----------------------------------------------------------------
- *		ExecBitmapAppendOnlyReScan(node)
- * ----------------------------------------------------------------
- */
-void
-ExecBitmapAppendOnlyReScan(BitmapAppendOnlyScanState *node, ExprContext *exprCtxt)
-{
-	EState	   *estate;
-	Index		scanrelid;
-
-	estate = node->ss.ps.state;
-	scanrelid = ((BitmapAppendOnlyScan *) node->ss.ps.plan)->scan.scanrelid;
-
-	/* node->aofs.ps.ps_TupFromTlist = false; */
-
-	/*
-	 * If we are being passed an outer tuple, link it into the "regular"
-	 * per-tuple econtext for possible qual eval.
-	 */
-	if (exprCtxt != NULL)
-	{
-		ExprContext *stdecontext;
-
-		stdecontext = node->ss.ps.ps_ExprContext;
-		stdecontext->ecxt_outertuple = exprCtxt->ecxt_outertuple;
-	}
-
-	/* If this is re-scanning of PlanQual ... */
-	if (estate->es_evTuple != NULL &&
-		estate->es_evTuple[scanrelid - 1] != NULL)
-	{
-		estate->es_evTupleNull[scanrelid - 1] = false;
-	}
-
-	/*
-	 * NOTE: The appendonly_fetch routine can fetch randomly, so no need to reset it.
-	 */
-
-	freeBitmapState(node);
-	tbm_reset_bitmaps(outerPlanState(node));
-
-	/*
-	 * Always rescan the input immediately, to ensure we can pass down any
-	 * outer tuple that might be used in index quals.
-	 */
-	Gpmon_M_Incr(GpmonPktFromBitmapAppendOnlyScanState(node), GPMON_BITMAPAPPENDONLYSCAN_RESCAN);
-	CheckSendPlanStateGpmonPkt(&node->ss.ps);
-
-	ExecReScan(outerPlanState(node), exprCtxt);
-}
-
-/* ----------------------------------------------------------------
- *		ExecEndBitmapAppendOnlyScan
- * ----------------------------------------------------------------
- */
-void
-ExecEndBitmapAppendOnlyScan(BitmapAppendOnlyScanState *node)
-{
-	Relation	relation;
-
-	/*
-	 * extract information from the node
-	 */
-	relation = node->ss.ss_currentRelation;
-
-	/*
-	 * Free the exprcontext
-	 */
-	ExecFreeExprContext(&node->ss.ps);
-
-	/*
-	 * clear out tuple table slots
-	 */
-	ExecClearTuple(node->ss.ps.ps_ResultTupleSlot);
-	ExecClearTuple(node->ss.ss_ScanTupleSlot);
-
-	/*
-	 * close down subplans
-	 */
-	ExecEndNode(outerPlanState(node));
-
-	ExecEagerFreeBitmapAppendOnlyScan(node);
-	
-	/*
-	 * close the heap relation.
-	 */
-	ExecCloseScanRelation(relation);
-
-	node->baos_gotpage = false;
-	node->baos_lossy = false;
-	node->baos_cindex = 0;
-	node->baos_ntuples = 0;
-
-	EndPlanStateGpmonPkt(&node->ss.ps);
-}
-
-/* ----------------------------------------------------------------
- *		ExecInitBitmapAppendOnlyScan
- *
- *		Initializes the scan's state information.
- * ----------------------------------------------------------------
- */
-BitmapAppendOnlyScanState *
-ExecInitBitmapAppendOnlyScan(BitmapAppendOnlyScan *node, EState *estate, int eflags)
-{
-	BitmapAppendOnlyScanState *scanstate;
-	Relation	currentRelation;
-
-	/* check for unsupported flags */
-	Assert(!(eflags & (EXEC_FLAG_BACKWARD | EXEC_FLAG_MARK)));
-
-	Assert(IsA(node, BitmapAppendOnlyScan));
-
-	/*
-	 * Assert caller didn't ask for an unsafe snapshot --- see comments at
-	 * head of file.
-	 *
-	 * MPP-4703: the MVCC-snapshot restriction is required for correct results.
-	 * our test-mode may deliberately return incorrect results, but that's OK.
-	 */
-	Assert(IsMVCCSnapshot(estate->es_snapshot) || gp_select_invisible);
-
-	/*
-	 * create state structure
-	 */
-	scanstate = makeNode(BitmapAppendOnlyScanState);
-	scanstate->ss.ps.plan = (Plan *) node;
-	scanstate->ss.ps.state = estate;
-
-	scanstate->baos_tbm = NULL;
-	scanstate->baos_tbmres = NULL;
-	scanstate->baos_gotpage = false;
-	scanstate->baos_lossy = false;
-	scanstate->baos_cindex = 0;
-	scanstate->baos_ntuples = 0;
-
-	/*
-	 * Miscellaneous initialization
-	 *
-	 * create expression context for node
-	 */
-	ExecAssignExprContext(estate, &scanstate->ss.ps);
-
-	/* scanstate->aofs.ps.ps_TupFromTlist = false;*/
-
-	/*
-	 * initialize child expressions
-	 */
-	scanstate->ss.ps.targetlist = (List *)
-		ExecInitExpr((Expr *) node->scan.plan.targetlist,
-					 (PlanState *) scanstate);
-	scanstate->ss.ps.qual = (List *)
-		ExecInitExpr((Expr *) node->scan.plan.qual,
-					 (PlanState *) scanstate);
-	scanstate->baos_bitmapqualorig = (List *)
-		ExecInitExpr((Expr *) node->bitmapqualorig,
-					 (PlanState *) scanstate);
-
-#define BITMAPAPPENDONLYSCAN_NSLOTS 2
-
-	/*
-	 * tuple table initialization
-	 */
-	ExecInitResultTupleSlot(estate, &scanstate->ss.ps);
-	ExecInitScanTupleSlot(estate, &scanstate->ss);
-
-	/*
-	 * open the base relation and acquire appropriate lock on it.
-	 */
-	currentRelation = ExecOpenScanRelation(estate, node->scan.scanrelid);
-
-	scanstate->ss.ss_currentRelation = currentRelation;
-
-	/*
-	 * get the scan type from the relation descriptor.
-	 */
-	ExecAssignScanType(&scanstate->ss, RelationGetDescr(currentRelation));
-
-	/*
-	 * Initialize result tuple type and projection info.
-	 */
-	ExecAssignResultTypeFromTL(&scanstate->ss.ps);
-	ExecAssignScanProjectionInfo(&scanstate->ss);
-
-	scanstate->baos_currentAOFetchDesc = NULL;
-	
-	/*
-	 * initialize child nodes
-	 *
-	 * We do this last because the child nodes will open indexscans on our
-	 * relation's indexes, and we want to be sure we have acquired a lock on
-	 * the relation first.
-	 */
-	outerPlanState(scanstate) = ExecInitNode(outerPlan(node), estate, eflags);
-
-	initGpmonPktForBitmapAppendOnlyScan((Plan *)node, &scanstate->ss.ps.gpmon_pkt, estate);
-
-	/*
-	 * all done.
-	 */
-	return scanstate;
-}
-
-int
-ExecCountSlotsBitmapAppendOnlyScan(BitmapAppendOnlyScan *node)
-{
-	return ExecCountSlotsNode(outerPlan((Plan *) node)) +
-		ExecCountSlotsNode(innerPlan((Plan *) node)) + BITMAPAPPENDONLYSCAN_NSLOTS;
-}
-
-void
-initGpmonPktForBitmapAppendOnlyScan(Plan *planNode, gpmon_packet_t *gpmon_pkt, EState *estate)
-{
-	Assert(planNode != NULL && gpmon_pkt != NULL && IsA(planNode, BitmapAppendOnlyScan));
-
-	{
-		RangeTblEntry *rte = rt_fetch(((BitmapAppendOnlyScan *)planNode)->scan.scanrelid,
-									  estate->es_range_table);
-		char schema_rel_name[SCAN_REL_NAME_BUF_SIZE] = {0};
-		
-		Assert(GPMON_BITMAPAPPENDONLYSCAN_TOTAL <= (int)GPMON_QEXEC_M_COUNT);
-		InitPlanNodeGpmonPkt(planNode, gpmon_pkt, estate, PMNT_BitmapAppendOnlyScan,
-							 (int64)planNode->plan_rows,
-							 GetScanRelNameGpmon(rte->relid, schema_rel_name));
-	}
-}
-
-void
-ExecEagerFreeBitmapAppendOnlyScan(BitmapAppendOnlyScanState *node)
-{
-	freeFetchDesc(node);
-	freeBitmapState(node);
-}

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/gp_libpq_fe/fe-protocol3.c
----------------------------------------------------------------------
diff --git a/src/backend/gp_libpq_fe/fe-protocol3.c b/src/backend/gp_libpq_fe/fe-protocol3.c
index ac4eeb9..4143d49 100644
--- a/src/backend/gp_libpq_fe/fe-protocol3.c
+++ b/src/backend/gp_libpq_fe/fe-protocol3.c
@@ -610,12 +610,6 @@ pqParseInput3(PGconn *conn)
 							if (pqGetInt64(&(sendback[i].uncompressed_eof[j]), conn))
 										return;
 						}
-
-						/*
-						 * 10, get fast sequence.
-						 */
-						if (pqGetInt64(&(sendback[i].nextFastSequence), conn))
-								return;
 					}
 				}
 					break;

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/nodes/copyfuncs.c
----------------------------------------------------------------------
diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c
index 94527b4..8f48008 100644
--- a/src/backend/nodes/copyfuncs.c
+++ b/src/backend/nodes/copyfuncs.c
@@ -587,28 +587,6 @@ _copyBitmapHeapScan(BitmapHeapScan *from)
 }
 
 /*
- * _copyBitmapAppendOnlyScan
- */
-static BitmapAppendOnlyScan *
-_copyBitmapAppendOnlyScan(BitmapAppendOnlyScan *from)
-{
-	BitmapAppendOnlyScan *newnode = makeNode(BitmapAppendOnlyScan);
-
-	/*
-	 * copy node superclass fields
-	 */
-	CopyScanFields((Scan *) from, (Scan *) newnode);
-
-	/*
-	 * copy remainder of node
-	 */
-	COPY_NODE_FIELD(bitmapqualorig);
-	COPY_SCALAR_FIELD(isAORow);
-
-	return newnode;
-}
-
-/*
  * _copyBitmapTableScan
  */
 static BitmapTableScan *
@@ -4449,9 +4427,6 @@ copyObject(void *from)
 		case T_BitmapHeapScan:
 			retval = _copyBitmapHeapScan(from);
 			break;
-		case T_BitmapAppendOnlyScan:
-			retval = _copyBitmapAppendOnlyScan(from);
-			break;
 		case T_BitmapTableScan:
 			retval = _copyBitmapTableScan(from);
 			break;

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/nodes/outfast.c
----------------------------------------------------------------------
diff --git a/src/backend/nodes/outfast.c b/src/backend/nodes/outfast.c
index 4600c88..ac943c9 100644
--- a/src/backend/nodes/outfast.c
+++ b/src/backend/nodes/outfast.c
@@ -689,17 +689,6 @@ _outBitmapHeapScan(StringInfo str, BitmapHeapScan *node)
 }
 
 static void
-_outBitmapAppendOnlyScan(StringInfo str, BitmapAppendOnlyScan *node)
-{
-	WRITE_NODE_TYPE("BITMAPAPPENDONLYSCAN");
-
-	_outScanInfo(str, (Scan *) node);
-
-	WRITE_LIST_FIELD(bitmapqualorig);
-	WRITE_BOOL_FIELD(isAORow);
-}
-
-static void
 _outBitmapTableScan(StringInfo str, BitmapTableScan *node)
 {
 	WRITE_NODE_TYPE("BITMAPTABLESCAN");
@@ -3997,9 +3986,6 @@ _outNode(StringInfo str, void *obj)
 			case T_BitmapHeapScan:
 				_outBitmapHeapScan(str, obj);
 				break;
-			case T_BitmapAppendOnlyScan:
-				_outBitmapAppendOnlyScan(str, obj);
-				break;
 			case T_BitmapTableScan:
 				_outBitmapTableScan(str, obj);
 				break;

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/nodes/outfuncs.c
----------------------------------------------------------------------
diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c
index 2b6aad2..0f35610 100644
--- a/src/backend/nodes/outfuncs.c
+++ b/src/backend/nodes/outfuncs.c
@@ -4176,9 +4176,6 @@ _outNode(StringInfo str, void *obj)
 			case T_BitmapHeapScan:
 				_outBitmapHeapScan(str, obj);
 				break;
-			case T_BitmapAppendOnlyScan:
-				_outBitmapAppendOnlyScan(str, obj);
-				break;
 			case T_BitmapTableScan:
 				_outBitmapTableScan(str, obj);
 				break;

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/nodes/print.c
----------------------------------------------------------------------
diff --git a/src/backend/nodes/print.c b/src/backend/nodes/print.c
index 75e015f..03367b0 100644
--- a/src/backend/nodes/print.c
+++ b/src/backend/nodes/print.c
@@ -529,8 +529,6 @@ char * plannode_type(Plan *p)
 			return "FUNCTIONSCAN";
 		case T_ValuesScan:
 			return "VALUESSCAN";
-		case T_BitmapAppendOnlyScan:
-			return "BITMAPAPPENDONLYSCAN";
 		case T_BitmapTableScan:
 			return "BITMAPTABLESCAN";
 		case T_Join:
@@ -588,8 +586,7 @@ print_plan_recursive(struct Plan *p, struct Query *parsetree, int indentLevel, c
 		   p->plan_rows, p->plan_width);
 	if (IsA(p, Scan) ||
 		IsA(p, SeqScan) ||
-		IsA(p, BitmapHeapScan) ||
-		IsA(p, BitmapAppendOnlyScan))
+		IsA(p, BitmapHeapScan))
 	{
 		RangeTblEntry *rte;
 

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/nodes/readfast.c
----------------------------------------------------------------------
diff --git a/src/backend/nodes/readfast.c b/src/backend/nodes/readfast.c
index 38caa38..cfdcc06 100644
--- a/src/backend/nodes/readfast.c
+++ b/src/backend/nodes/readfast.c
@@ -3195,19 +3195,6 @@ _readBitmapHeapScan(const char ** str)
 	READ_DONE();
 }
 
-static BitmapAppendOnlyScan *
-_readBitmapAppendOnlyScan(const char ** str)
-{
-	READ_LOCALS(BitmapAppendOnlyScan);
-
-	readScanInfo(str, (Scan *)local_node);
-
-	READ_NODE_FIELD(bitmapqualorig);
-	READ_BOOL_FIELD(isAORow);
-
-	READ_DONE();
-}
-
 static BitmapTableScan *
 _readBitmapTableScan(const char ** str)
 {
@@ -4268,9 +4255,6 @@ readNodeBinary(const char ** str)
 			case T_BitmapHeapScan:
 				return_value = _readBitmapHeapScan(str);
 				break;
-			case T_BitmapAppendOnlyScan:
-				return_value = _readBitmapAppendOnlyScan(str);
-				break;
 			case T_BitmapTableScan:
 				return_value = _readBitmapTableScan(str);
 				break;

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/optimizer/path/indxpath.c
----------------------------------------------------------------------
diff --git a/src/backend/optimizer/path/indxpath.c b/src/backend/optimizer/path/indxpath.c
index 25d2114..e8baea8 100644
--- a/src/backend/optimizer/path/indxpath.c
+++ b/src/backend/optimizer/path/indxpath.c
@@ -157,9 +157,6 @@ create_bitmap_scan_path(char relstorage,
 		case RELSTORAGE_HEAP:
 			path = (Path *)create_bitmap_heap_path(root, rel, bitmapqual, outer_rel);
 			break;
-		case RELSTORAGE_AOROWS:
-			path = (Path *)create_bitmap_appendonly_path(root, rel, bitmapqual, outer_rel, true);
-			break;
 		default:
 			elog(ERROR, "unrecognized relstorage type %d for using bitmap scan path",
 				 relstorage);

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/optimizer/plan/createplan.c
----------------------------------------------------------------------
diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c
index 09da978..ba6069d 100644
--- a/src/backend/optimizer/plan/createplan.c
+++ b/src/backend/optimizer/plan/createplan.c
@@ -119,9 +119,6 @@ static TableFunctionScan *create_tablefunction_plan(CreatePlanContext *ctx,
 													List *scan_clauses);
 static ValuesScan *create_valuesscan_plan(CreatePlanContext *ctx, Path *best_path,
 					   List *tlist, List *scan_clauses);
-static BitmapAppendOnlyScan *create_bitmap_appendonly_scan_plan(CreatePlanContext *ctx,
-						BitmapAppendOnlyPath *best_path,
-						List *tlist, List *scan_clauses);
 static Plan *create_nestloop_plan(CreatePlanContext *ctx, NestPath *best_path,
 					 Plan *outer_plan, Plan *inner_plan);
 static MergeJoin *create_mergejoin_plan(CreatePlanContext *ctx, MergePath *best_path,
@@ -167,12 +164,6 @@ static BitmapHeapScan *make_bitmap_heapscan(List *qptlist,
 					 Plan *lefttree,
 					 List *bitmapqualorig,
 					 Index scanrelid);
-static BitmapAppendOnlyScan *make_bitmap_appendonlyscan(List *qptlist,
-														List *qpqual,
-														Plan *lefttree,
-														List *bitmapqualorig,
-														Index scanrelid,
-														bool isAORow);
 static TableFunctionScan* make_tablefunction(List *tlist,
 											 List *scan_quals,
 											 Plan *subplan,
@@ -250,7 +241,6 @@ create_subplan(CreatePlanContext *ctx, Path *best_path)
 		case T_AppendOnlyScan:
 		case T_ParquetScan:
 		case T_BitmapHeapScan:
-		case T_BitmapAppendOnlyScan:
 		case T_BitmapTableScan:
 		case T_TidScan:
 		case T_SubqueryScan:
@@ -383,13 +373,6 @@ create_scan_plan(CreatePlanContext *ctx, Path *best_path)
 													scan_clauses);
 			break;
 
-		case T_BitmapAppendOnlyScan:
-			plan = (Plan *) create_bitmap_appendonly_scan_plan(ctx,
-												    (BitmapAppendOnlyPath *) best_path,
-													tlist,
-													scan_clauses);
-			break;
-
 		case T_TidScan:
 			plan = (Plan *) create_tidscan_plan(ctx,
 												(TidPath *) best_path,
@@ -565,7 +548,6 @@ disuse_physical_tlist(Plan *plan, Path *path)
 		case T_ExternalScan:
 		case T_IndexScan:
 		case T_BitmapHeapScan:
-		case T_BitmapAppendOnlyScan:
 		case T_BitmapTableScan:
 		case T_TidScan:
 		case T_SubqueryScan:
@@ -2196,118 +2178,6 @@ create_bitmap_scan_plan(CreatePlanContext *ctx,
 }
 
 /*
- * create_bitmap_appendonly_scan_plan
- *
- * NOTE: Copy of create_bitmap_scan_plan routine.
- */
-static BitmapAppendOnlyScan *
-create_bitmap_appendonly_scan_plan(CreatePlanContext *ctx,
-						BitmapAppendOnlyPath *best_path,
-						List *tlist,
-						List *scan_clauses)
-{
-	Index		baserelid = best_path->path.parent->relid;
-	Plan	   *bitmapqualplan;
-	List	   *bitmapqualorig = NULL;
-	List	   *indexquals = NULL;
-	List	   *qpqual;
-	ListCell   *l;
-	BitmapAppendOnlyScan *scan_plan;
-
-	/* it should be a base rel... */
-	Assert(baserelid > 0);
-	Assert(best_path->path.parent->rtekind == RTE_RELATION);
-
-	/* Process the bitmapqual tree into a Plan tree and qual lists */
-	bitmapqualplan = create_bitmap_subplan(ctx, best_path->bitmapqual,
-										   &bitmapqualorig, &indexquals);
-
-	/* Reduce RestrictInfo list to bare expressions; ignore pseudoconstants */
-	scan_clauses = extract_actual_clauses(scan_clauses, false);
-
-	/*
-	 * If this is a innerjoin scan, the indexclauses will contain join clauses
-	 * that are not present in scan_clauses (since the passed-in value is just
-	 * the rel's baserestrictinfo list).  We must add these clauses to
-	 * scan_clauses to ensure they get checked.  In most cases we will remove
-	 * the join clauses again below, but if a join clause contains a special
-	 * operator, we need to make sure it gets into the scan_clauses.
-	 */
-	if (best_path->isjoininner)
-	{
-		scan_clauses = list_concat_unique(scan_clauses, bitmapqualorig);
-	}
-
-	/*
-	 * The qpqual list must contain all restrictions not automatically handled
-	 * by the index.  All the predicates in the indexquals will be checked
-	 * (either by the index itself, or by nodeBitmapHeapscan.c), but if there
-	 * are any "special" or lossy operators involved then they must be added
-	 * to qpqual.  The upshot is that qpqual must contain scan_clauses minus
-	 * whatever appears in indexquals.
-	 *
-	 * In normal cases simple equal() checks will be enough to spot duplicate
-	 * clauses, so we try that first.  In some situations (particularly with
-	 * OR'd index conditions) we may have scan_clauses that are not equal to,
-	 * but are logically implied by, the index quals; so we also try a
-	 * predicate_implied_by() check to see if we can discard quals that way.
-	 * (predicate_implied_by assumes its first input contains only immutable
-	 * functions, so we have to check that.)
-	 *
-	 * Unlike create_indexscan_plan(), we need take no special thought here
-	 * for partial index predicates; this is because the predicate conditions
-	 * are already listed in bitmapqualorig and indexquals.  Bitmap scans have
-	 * to do it that way because predicate conditions need to be rechecked if
-	 * the scan becomes lossy.
-	 */
-	qpqual = NIL;
-	foreach(l, scan_clauses)
-	{
-		Node	   *clause = (Node *) lfirst(l);
-
-		if (list_member(indexquals, clause))
-			continue;
-		if (!contain_mutable_functions(clause))
-		{
-			List	   *clausel = list_make1(clause);
-
-			if (predicate_implied_by(clausel, indexquals))
-				continue;
-		}
-		qpqual = lappend(qpqual, clause);
-	}
-
-	/* Sort clauses into best execution order */
-	qpqual = order_qual_clauses(ctx->root, qpqual);
-
-	/*
-	 * When dealing with special or lossy operators, we will at this point
-	 * have duplicate clauses in qpqual and bitmapqualorig.  We may as well
-	 * drop 'em from bitmapqualorig, since there's no point in making the
-	 * tests twice.
-	 */
-	bitmapqualorig = list_difference_ptr(bitmapqualorig, qpqual);
-
-	/*
-	 * Copy the finished bitmapqualorig to make sure we have an independent
-	 * copy --- needed in case there are subplans in the index quals
-	 */
-	bitmapqualorig = copyObject(bitmapqualorig);
-
-	/* Finally ready to build the plan node */
-	scan_plan = make_bitmap_appendonlyscan(tlist,
-										   qpqual,
-										   bitmapqualplan,
-										   bitmapqualorig,
-										   baserelid,
-										   best_path->isAORow);
-
-	copy_path_costsize(ctx->root, &scan_plan->scan.plan, &best_path->path);
-
-	return scan_plan;
-}
-
-/*
  * Given a bitmapqual tree, generate the Plan tree that implements it
  *
  * As byproducts, we also return in *qual and *indexqual the qual lists
@@ -3750,30 +3620,6 @@ make_bitmap_heapscan(List *qptlist,
 	return node;
 }
 
-static BitmapAppendOnlyScan *
-make_bitmap_appendonlyscan(List *qptlist,
-						   List *qpqual,
-						   Plan *lefttree,
-						   List *bitmapqualorig,
-						   Index scanrelid,
-						   bool isAORow)
-{
-	BitmapAppendOnlyScan *node = makeNode(BitmapAppendOnlyScan);
-	Plan	   *plan = &node->scan.plan;
-
-	/* cost should be inserted by caller */
-	plan->targetlist = qptlist;
-	plan->qual = qpqual;
-	plan->lefttree = lefttree;
-	plan->righttree = NULL;
-	node->scan.scanrelid = scanrelid;
-
-	node->bitmapqualorig = bitmapqualorig;
-	node->isAORow = isAORow;
-
-	return node;
-}
-
 static TidScan *
 make_tidscan(List *qptlist,
 			 List *qpqual,

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/optimizer/plan/planpartition.c
----------------------------------------------------------------------
diff --git a/src/backend/optimizer/plan/planpartition.c b/src/backend/optimizer/plan/planpartition.c
index 9940de6..bf92b28 100644
--- a/src/backend/optimizer/plan/planpartition.c
+++ b/src/backend/optimizer/plan/planpartition.c
@@ -781,7 +781,6 @@ AdjustVarnoWalker(Node *node, AdjustVarnoContext *ctx)
 		case T_IndexScan:
 		case T_BitmapIndexScan:
 		case T_BitmapHeapScan:
-		case T_BitmapAppendOnlyScan:
 		case T_BitmapTableScan:
 		case T_TidScan:
 		case T_FunctionScan:

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/optimizer/plan/setrefs.c
----------------------------------------------------------------------
diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c
index 461e39e..afce5a5 100644
--- a/src/backend/optimizer/plan/setrefs.c
+++ b/src/backend/optimizer/plan/setrefs.c
@@ -568,30 +568,6 @@ set_plan_refs(PlannerGlobal *glob, Plan *plan, const int rtoffset)
 			fix_scan_list(glob, splan->bitmapqualorig, rtoffset);
 		}
 			break;
-		case T_BitmapAppendOnlyScan:
-		{
-			BitmapAppendOnlyScan *splan = (BitmapAppendOnlyScan *) plan;
-			
-			if (cdb_expr_requires_full_eval((Node *)plan->targetlist))
-				return  cdb_insert_result_node(glob, plan, rtoffset);
-			
-			splan->scan.scanrelid += rtoffset;
-
-#ifdef USE_ASSERT_CHECKING
-			RangeTblEntry *rte = rt_fetch(splan->scan.scanrelid, glob->finalrtable);
-			char relstorage = get_rel_relstorage(rte->relid);
-			Assert(relstorage == RELSTORAGE_AOROWS ||
-				   relstorage == RELSTORAGE_PARQUET);
-#endif
-
-			splan->scan.plan.targetlist =
-			fix_scan_list(glob, splan->scan.plan.targetlist, rtoffset);
-			splan->scan.plan.qual =
-			fix_scan_list(glob, splan->scan.plan.qual, rtoffset);
-			splan->bitmapqualorig =
-			fix_scan_list(glob, splan->bitmapqualorig, rtoffset);
-		}
-			break;
 		case T_BitmapTableScan:
 		{
 			BitmapTableScan *splan = (BitmapTableScan *) plan;
@@ -1473,8 +1449,7 @@ set_inner_join_references(PlannerGlobal *glob, Plan *inner_plan,
 			Assert(inner_plan->qual == NIL);
 		}
 	}
-	else if (IsA(inner_plan, BitmapHeapScan) ||
-			 IsA(inner_plan, BitmapAppendOnlyScan))
+	else if (IsA(inner_plan, BitmapHeapScan))
 	{
 		/*
 		 * The inner side is a bitmap scan plan.  Fix the top node, and
@@ -1491,14 +1466,6 @@ set_inner_join_references(PlannerGlobal *glob, Plan *inner_plan,
 			innerrel = innerscan->scan.scanrelid;
 			bitmapqualorig_p = &(innerscan->bitmapqualorig);
 		}
-		else
-		{
-			Assert(IsA(inner_plan, BitmapAppendOnlyScan));
-			
-			BitmapAppendOnlyScan *innerscan = (BitmapAppendOnlyScan *) inner_plan;
-			innerrel = innerscan->scan.scanrelid;
-			bitmapqualorig_p = &(innerscan->bitmapqualorig);
-		}
 		
 		/* only refs to outer vars get changed in the inner qual */
 		if (NumRelids((Node *) (*bitmapqualorig_p)) > 1)

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ae38cfbd/src/backend/optimizer/plan/subselect.c
----------------------------------------------------------------------
diff --git a/src/backend/optimizer/plan/subselect.c b/src/backend/optimizer/plan/subselect.c
index 9e3da25..0289c59 100644
--- a/src/backend/optimizer/plan/subselect.c
+++ b/src/backend/optimizer/plan/subselect.c
@@ -1193,11 +1193,6 @@ finalize_plan(PlannerInfo *root, Plan *plan, List *rtable,
 							  &context);
 			break;
 
-		case T_BitmapAppendOnlyScan:
-			finalize_primnode((Node *) ((BitmapAppendOnlyScan *) plan)->bitmapqualorig,
-							  &context);
-			break;
-
 		case T_BitmapTableScan:
 			finalize_primnode((Node *) ((BitmapTableScan *) plan)->bitmapqualorig,
 							  &context);


Mime
View raw message