*** pgsql/src/backend/nodes/readfuncs.c	2009/01/01 17:23:43	1.220
--- pgsql/src/backend/nodes/readfuncs.c	2009/01/22 20:16:04	1.221
***************
*** 8,14 ****
   *
   *
   * IDENTIFICATION
!  *	  $PostgreSQL: pgsql/src/backend/nodes/readfuncs.c,v 1.219 2008/12/31 00:08:36 tgl Exp $
   *
   * NOTES
   *	  Path and Plan nodes do not have any readfuncs support, because we
--- 8,14 ----
   *
   *
   * IDENTIFICATION
!  *	  $PostgreSQL: pgsql/src/backend/nodes/readfuncs.c,v 1.220 2009/01/01 17:23:43 momjian Exp $
   *
   * NOTES
   *	  Path and Plan nodes do not have any readfuncs support, because we
***************
*** 114,119 ****
--- 114,124 ----
  	token = pg_strtok(&length);		/* skip :fldname */ \
  	local_node->fldname = nodeRead(NULL, 0)
  
+ /* Read a bitmapset field */
+ #define READ_BITMAPSET_FIELD(fldname) \
+ 	token = pg_strtok(&length);		/* skip :fldname */ \
+ 	local_node->fldname = _readBitmapset()
+ 
  /* Routine exit */
  #define READ_DONE() \
  	return local_node
***************
*** 137,142 ****
--- 142,187 ----
  
  static Datum readDatum(bool typbyval);
  
+ /*
+  * _readBitmapset
+  */
+ static Bitmapset *
+ _readBitmapset(void)
+ {
+ 	Bitmapset *result = NULL;
+ 	READ_TEMP_LOCALS();
+ 
+ 	token = pg_strtok(&length);
+ 	if (token == NULL)
+ 		elog(ERROR, "incomplete Bitmapset structure");
+ 	if (length != 1 || token[0] != '(')
+ 		elog(ERROR, "unrecognized token: \"%.*s\"", length, token);
+ 
+ 	token = pg_strtok(&length);
+ 	if (token == NULL)
+ 		elog(ERROR, "incomplete Bitmapset structure");
+ 	if (length != 1 || token[0] != 'b')
+ 		elog(ERROR, "unrecognized token: \"%.*s\"", length, token);
+ 
+ 	for (;;)
+ 	{
+ 		int		val;
+ 		char   *endptr;
+ 
+ 		token = pg_strtok(&length);
+ 		if (token == NULL)
+ 			elog(ERROR, "unterminated Bitmapset structure");
+ 		if (length == 1 && token[0] == ')')
+ 			break;
+ 		val = (int) strtol(token, &endptr, 10);
+ 		if (endptr != token + length)
+ 			elog(ERROR, "unrecognized integer: \"%.*s\"", length, token);
+ 		result = bms_add_member(result, val);
+ 	}
+ 
+ 	return result;
+ }
+ 
  
  /*
   * _readQuery
*************** _readRangeTblEntry(void)
*** 1102,1107 ****
--- 1147,1154 ----
  	READ_BOOL_FIELD(inFromCl);
  	READ_UINT_FIELD(requiredPerms);
  	READ_OID_FIELD(checkAsUser);
+ 	READ_BITMAPSET_FIELD(selectedCols);
+ 	READ_BITMAPSET_FIELD(modifiedCols);
  
  	READ_DONE();
  }