Index: doc/src/sgml/protocol.sgml
===================================================================
RCS file: /cvsroot/pgsql/doc/src/sgml/protocol.sgml,v
retrieving revision 1.78
diff -c -c -r1.78 protocol.sgml
*** doc/src/sgml/protocol.sgml	3 Feb 2010 09:47:19 -0000	1.78
--- doc/src/sgml/protocol.sgml	16 Feb 2010 20:11:41 -0000
***************
*** 737,745 ****
     <para>
      The unnamed prepared statement is likewise planned during Parse processing
      if the Parse message defines no parameters.  But if there are parameters,
!     query planning occurs during Bind processing instead.  This allows the
!     planner to make use of the actual values of the parameters provided in
!     the Bind message when planning the query.
     </para>
  
     <note>
--- 737,745 ----
     <para>
      The unnamed prepared statement is likewise planned during Parse processing
      if the Parse message defines no parameters.  But if there are parameters,
!     query planning occurs every time Bind parameters are supplied.  This allows the
!     planner to make use of the actual values of the parameters provided by
!     each Bind message, rather than use generic estimates.
     </para>
  
     <note>
Index: src/backend/tcop/postgres.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/tcop/postgres.c,v
retrieving revision 1.588
diff -c -c -r1.588 postgres.c
*** src/backend/tcop/postgres.c	13 Feb 2010 01:32:19 -0000	1.588
--- src/backend/tcop/postgres.c	16 Feb 2010 20:11:45 -0000
***************
*** 1469,1475 ****
  	}
  	else
  	{
! 		/* special-case the unnamed statement */
  		psrc = unnamed_stmt_psrc;
  		if (!psrc)
  			ereport(ERROR,
--- 1469,1475 ----
  	}
  	else
  	{
! 		/* Unnamed statements are re-prepared for every bind */
  		psrc = unnamed_stmt_psrc;
  		if (!psrc)
  			ereport(ERROR,
