diff --git a/src/backend/executor/spi.c b/src/backend/executor/spi.c
index faceb1ec7388290a3de6d98de54beb820a481e3f..11ed2914de5f9502d39d278c7f99868394147c68 100644
--- a/src/backend/executor/spi.c
+++ b/src/backend/executor/spi.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/executor/spi.c,v 1.90 2003/04/24 21:16:43 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/executor/spi.c,v 1.91 2003/04/27 20:09:43 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -967,7 +967,6 @@ spi_printtup(HeapTuple tuple, TupleDesc tupdesc, DestReceiver *self)
 static int
 _SPI_execute(const char *src, int tcount, _SPI_plan *plan)
 {
-	StringInfoData stri;
 	List	   *raw_parsetree_list;
 	List	   *query_list_list;
 	List	   *plan_list;
@@ -994,10 +993,7 @@ _SPI_execute(const char *src, int tcount, _SPI_plan *plan)
 	/*
 	 * Parse the request string into a list of raw parse trees.
 	 */
-	initStringInfo(&stri);
-	appendStringInfoString(&stri, src);
-
-	raw_parsetree_list = pg_parse_query(&stri, argtypes, nargs);
+	raw_parsetree_list = pg_parse_query(src, argtypes, nargs);
 
 	/*
 	 * Do parse analysis and rule rewrite for each raw parsetree.
diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c
index 72a55be667beb23c40d1da63dc7ffc93cdb9550c..778fc3a2bb9054c679bdb3eefdd96f83ba01ec20 100644
--- a/src/backend/optimizer/util/clauses.c
+++ b/src/backend/optimizer/util/clauses.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/optimizer/util/clauses.c,v 1.134 2003/04/08 23:20:01 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/util/clauses.c,v 1.135 2003/04/27 20:09:44 tgl Exp $
  *
  * HISTORY
  *	  AUTHOR			DATE			MAJOR EVENT
@@ -1692,7 +1692,6 @@ inline_function(Oid funcid, Oid result_type, List *args,
 	bool		isNull;
 	MemoryContext oldcxt;
 	MemoryContext mycxt;
-	StringInfoData stri;
 	List	   *raw_parsetree_list;
 	List	   *querytree_list;
 	Query	   *querytree;
@@ -1752,10 +1751,7 @@ inline_function(Oid funcid, Oid result_type, List *args,
 	 * we care about.  Also, we can punt as soon as we detect more than
 	 * one command in the function body.
 	 */
-	initStringInfo(&stri);
-	appendStringInfo(&stri, "%s", src);
-
-	raw_parsetree_list = pg_parse_query(&stri,
+	raw_parsetree_list = pg_parse_query(src,
 										funcform->proargtypes,
 										funcform->pronargs);
 	if (length(raw_parsetree_list) != 1)
diff --git a/src/backend/parser/parse_type.c b/src/backend/parser/parse_type.c
index 6d038080ea0d4a1c69406569f6d35045dda43972..85aeafacc59befaf6dacdce87d341b27a19f733e 100644
--- a/src/backend/parser/parse_type.c
+++ b/src/backend/parser/parse_type.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_type.c,v 1.55 2003/04/24 21:16:43 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_type.c,v 1.56 2003/04/27 20:09:44 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -437,7 +437,7 @@ parseTypeString(const char *str, Oid *type_id, int32 *typmod)
 	initStringInfo(&buf);
 	appendStringInfo(&buf, "SELECT (NULL::%s)", str);
 
-	raw_parsetree_list = parser(&buf, NULL, 0);
+	raw_parsetree_list = parser(buf.data, NULL, 0);
 
 	/*
 	 * Make sure we got back exactly what we expected and no more;
diff --git a/src/backend/parser/parser.c b/src/backend/parser/parser.c
index c8614b573117ef15a8a69a90e6d47d0d67bcb524..16745f7b3708249ab8a405cee8362a472e178c16 100644
--- a/src/backend/parser/parser.c
+++ b/src/backend/parser/parser.c
@@ -14,7 +14,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/parser/parser.c,v 1.55 2002/09/04 20:31:24 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/parser/parser.c,v 1.56 2003/04/27 20:09:44 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -45,7 +45,7 @@ static bool have_lookahead;		/* lookahead_token set? */
  * Returns a list of raw (un-analyzed) parse trees.
  */
 List *
-parser(StringInfo str, Oid *typev, int nargs)
+parser(const char *str, Oid *typev, int nargs)
 {
 	int			yyresult;
 
diff --git a/src/backend/parser/scan.l b/src/backend/parser/scan.l
index 05b488643e389fd587f10cfd65a80c65d92c486d..c1f53ac8ebb2779af988e72cd7648350d5229b2d 100644
--- a/src/backend/parser/scan.l
+++ b/src/backend/parser/scan.l
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/parser/scan.l,v 1.104 2003/04/24 21:16:43 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/parser/scan.l,v 1.105 2003/04/27 20:09:44 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -595,18 +595,23 @@ yyerror(const char *message)
  * Called before any actual parsing is done
  */
 void
-scanner_init(StringInfo str)
+scanner_init(const char *str)
 {
+	Size	slen = strlen(str);
+
 	/*
 	 * Might be left over after ereport()
 	 */
 	if (YY_CURRENT_BUFFER)
 		yy_delete_buffer(YY_CURRENT_BUFFER);
 
-	scanbuf = palloc(str->len + 2);
-	memcpy(scanbuf, str->data, str->len);
-	scanbuf[str->len] = scanbuf[str->len + 1] = YY_END_OF_BUFFER_CHAR;
-	scanbufhandle = yy_scan_buffer(scanbuf, str->len + 2);
+	/*
+	 * Make a scan buffer with special termination needed by flex.
+	 */
+	scanbuf = palloc(slen + 2);
+	memcpy(scanbuf, str, slen);
+	scanbuf[slen] = scanbuf[slen + 1] = YY_END_OF_BUFFER_CHAR;
+	scanbufhandle = yy_scan_buffer(scanbuf, slen + 2);
 
 	/* initialize literal buffer to a reasonable but expansible size */
 	literalalloc = 128;
diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c
index 05349743520022bb335561cfad7840dc2353b128..e5bd93eb0662c09cbcdcccd83808984107e69763 100644
--- a/src/backend/postmaster/pgstat.c
+++ b/src/backend/postmaster/pgstat.c
@@ -13,7 +13,7 @@
  *
  *	Copyright (c) 2001-2003, PostgreSQL Global Development Group
  *
- *	$Header: /cvsroot/pgsql/src/backend/postmaster/pgstat.c,v 1.34 2003/04/26 02:57:14 tgl Exp $
+ *	$Header: /cvsroot/pgsql/src/backend/postmaster/pgstat.c,v 1.35 2003/04/27 20:09:44 tgl Exp $
  * ----------
  */
 #include "postgres.h"
@@ -446,7 +446,7 @@ pgstat_bestart(void)
  * ----------
  */
 void
-pgstat_report_activity(char *what)
+pgstat_report_activity(const char *what)
 {
 	PgStat_MsgActivity msg;
 	int			len;
@@ -455,7 +455,8 @@ pgstat_report_activity(char *what)
 		return;
 
 	len = strlen(what);
-	len = pg_mbcliplen((const unsigned char *) what, len, PGSTAT_ACTIVITY_SIZE - 1);
+	len = pg_mbcliplen((const unsigned char *) what, len,
+					   PGSTAT_ACTIVITY_SIZE - 1);
 
 	memcpy(msg.m_what, what, len);
 	msg.m_what[len] = '\0';
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index bc884906ca04cd8a9cc63e638b8c3b1f015bf254..dca6455b0d0642d0634c39e70d18658b5b77913f 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.324 2003/04/24 21:16:43 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.325 2003/04/27 20:09:44 tgl Exp $
  *
  * NOTES
  *	  this is the "main" module of the postgres backend and
@@ -60,16 +60,15 @@
 
 #include "pgstat.h"
 
+extern int	optind;
+extern char *optarg;
+
 
 /* ----------------
  *		global variables
  * ----------------
  */
-
-extern int	optind;
-extern char *optarg;
-
-char	   *debug_query_string; /* for pgmonitor and
+const char *debug_query_string; /* for pgmonitor and
 								 * log_min_error_statement */
 
 /* Note: whereToSendOutput is initialized for the bootstrap/standalone case */
@@ -339,22 +338,18 @@ ReadCommand(StringInfo inBuf)
  * but it is still needed for parsing of SQL function bodies.
  */
 List *
-pg_parse_and_rewrite(char *query_string,		/* string to execute */
+pg_parse_and_rewrite(const char *query_string, /* string to execute */
 					 Oid *typev,	/* parameter types */
 					 int nargs) /* number of parameters */
 {
 	List	   *raw_parsetree_list;
 	List	   *querytree_list;
 	List	   *list_item;
-	StringInfoData stri;
-
-	initStringInfo(&stri);
-	appendStringInfoString(&stri, query_string);
 
 	/*
 	 * (1) parse the request string into a list of raw parse trees.
 	 */
-	raw_parsetree_list = pg_parse_query(&stri, typev, nargs);
+	raw_parsetree_list = pg_parse_query(query_string, typev, nargs);
 
 	/*
 	 * (2) Do parse analysis and rule rewrite.
@@ -385,12 +380,12 @@ pg_parse_and_rewrite(char *query_string,		/* string to execute */
  * commands are not processed any further than the raw parse stage.
  */
 List *
-pg_parse_query(StringInfo query_string, Oid *typev, int nargs)
+pg_parse_query(const char *query_string, Oid *typev, int nargs)
 {
 	List	   *raw_parsetree_list;
 
 	if (log_statement)
-		elog(LOG, "query: %s", query_string->data);
+		elog(LOG, "query: %s", query_string);
 
 	if (log_parser_stats)
 		ResetUsage();
@@ -569,7 +564,7 @@ pg_plan_query(Query *querytree)
  */
 
 void
-pg_exec_query_string(StringInfo query_string,	/* string to execute */
+pg_exec_query_string(const char *query_string,	/* string to execute */
 					 CommandDest dest,	/* where results should go */
 					 MemoryContext parse_context)		/* context for
 														 * parsetrees */
@@ -582,7 +577,7 @@ pg_exec_query_string(StringInfo query_string,	/* string to execute */
 				stop_t;
 	bool		save_log_duration = log_duration;
 
-	debug_query_string = query_string->data;
+	debug_query_string = query_string;
 
 	/*
 	 * We use save_log_duration so "SET log_duration = true" doesn't
@@ -1248,7 +1243,7 @@ PostgresMain(int argc, char *argv[], const char *username)
 	GucSource	gucsource;
 	char	   *tmp;
 	int			firstchar;
-	StringInfo	parser_input;
+	StringInfo	input_message;
 	bool		send_rfq;
 
 	/*
@@ -1831,7 +1826,7 @@ PostgresMain(int argc, char *argv[], const char *username)
 	if (!IsUnderPostmaster)
 	{
 		puts("\nPOSTGRES backend interactive interface ");
-		puts("$Revision: 1.324 $ $Date: 2003/04/24 21:16:43 $\n");
+		puts("$Revision: 1.325 $ $Date: 2003/04/27 20:09:44 $\n");
 	}
 
 	/*
@@ -1933,7 +1928,7 @@ PostgresMain(int argc, char *argv[], const char *username)
 		MemoryContextSwitchTo(QueryContext);
 		MemoryContextResetAndDeleteChildren(QueryContext);
 
-		parser_input = makeStringInfo();
+		input_message = makeStringInfo();
 
 		/*
 		 * (1) tell the frontend we're ready for a new query.
@@ -1983,7 +1978,7 @@ PostgresMain(int argc, char *argv[], const char *username)
 		/*
 		 * (3) read a command (loop blocks here)
 		 */
-		firstchar = ReadCommand(parser_input);
+		firstchar = ReadCommand(input_message);
 
 		/*
 		 * (4) disable async signal conditions again.
@@ -2009,25 +2004,29 @@ PostgresMain(int argc, char *argv[], const char *username)
 		switch (firstchar)
 		{
 			case 'Q':			/* simple query */
-				/*
-				 * Process the query string.
-				 *
-				 * Note: transaction command start/end is now done within
-				 * pg_exec_query_string(), not here.
-				 */
-				if (log_statement_stats)
-					ResetUsage();
+				{
+					/*
+					 * Process the query string.
+					 *
+					 * Note: transaction command start/end is now done within
+					 * pg_exec_query_string(), not here.
+					 */
+					const char *query_string = pq_getmsgstring(input_message);
 
-				pgstat_report_activity(parser_input->data);
+					if (log_statement_stats)
+						ResetUsage();
 
-				pg_exec_query_string(parser_input,
-									 whereToSendOutput,
-									 QueryContext);
+					pgstat_report_activity(query_string);
 
-				if (log_statement_stats)
-					ShowUsage("QUERY STATISTICS");
+					pg_exec_query_string(query_string,
+										 whereToSendOutput,
+										 QueryContext);
 
-				send_rfq = true;
+					if (log_statement_stats)
+						ShowUsage("QUERY STATISTICS");
+
+					send_rfq = true;
+				}
 				break;
 
 			case 'F':			/* fastpath function call */
@@ -2037,7 +2036,7 @@ PostgresMain(int argc, char *argv[], const char *username)
 				/* start an xact for this function invocation */
 				start_xact_command();
 
-				if (HandleFunctionRequest(parser_input) == EOF)
+				if (HandleFunctionRequest(input_message) == EOF)
 				{
 					/* lost frontend connection during F message input */
 
diff --git a/src/include/parser/gramparse.h b/src/include/parser/gramparse.h
index 97a91093e23cbc56db50332b717de9a96c374d0f..97108f2b1c959a22c4f10d8c375c2388a79ddb02 100644
--- a/src/include/parser/gramparse.h
+++ b/src/include/parser/gramparse.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: gramparse.h,v 1.25 2002/09/04 20:31:45 momjian Exp $
+ * $Id: gramparse.h,v 1.26 2003/04/27 20:09:44 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -15,7 +15,6 @@
 #ifndef GRAMPARSE_H
 #define GRAMPARSE_H
 
-#include "lib/stringinfo.h"
 #include "nodes/parsenodes.h"
 
 /* from parser.c */
@@ -24,7 +23,7 @@ extern Oid	param_type(int t);
 extern int	yylex(void);
 
 /* from scan.l */
-extern void scanner_init(StringInfo str);
+extern void scanner_init(const char *str);
 extern void scanner_finish(void);
 extern int	base_yylex(void);
 extern void yyerror(const char *message);
diff --git a/src/include/parser/parser.h b/src/include/parser/parser.h
index dfaf50c5cc850fb32aa5d6d759cf121d6d2eebdc..42d82869f081c78a52fcfc7033bad26e0f0056b4 100644
--- a/src/include/parser/parser.h
+++ b/src/include/parser/parser.h
@@ -7,16 +7,15 @@
  * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: parser.h,v 1.13 2002/06/20 20:29:52 momjian Exp $
+ * $Id: parser.h,v 1.14 2003/04/27 20:09:44 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
 #ifndef PARSER_H
 #define PARSER_H
 
-#include "lib/stringinfo.h"
 #include "parser/parse_node.h"
 
-extern List *parser(StringInfo str, Oid *typev, int nargs);
+extern List *parser(const char *str, Oid *typev, int nargs);
 
 #endif   /* PARSER_H */
diff --git a/src/include/pgstat.h b/src/include/pgstat.h
index e85f6ec3e914437a2a0569539d658656beff25b8..568cf878e4761de94a58a920c06088fc68ea0b74 100644
--- a/src/include/pgstat.h
+++ b/src/include/pgstat.h
@@ -5,7 +5,7 @@
  *
  *	Copyright (c) 2001-2003, PostgreSQL Global Development Group
  *
- *	$Id: pgstat.h,v 1.14 2003/04/26 02:57:14 tgl Exp $
+ *	$Id: pgstat.h,v 1.15 2003/04/27 20:09:44 tgl Exp $
  * ----------
  */
 #ifndef PGSTAT_H
@@ -359,7 +359,7 @@ extern void pgstat_beterm(int pid);
 extern void pgstat_bestart(void);
 
 extern void pgstat_ping(void);
-extern void pgstat_report_activity(char *what);
+extern void pgstat_report_activity(const char *what);
 extern void pgstat_report_tabstat(void);
 extern int	pgstat_vacuum_tabstat(void);
 
diff --git a/src/include/tcop/tcopprot.h b/src/include/tcop/tcopprot.h
index 3ac7dac96a9a1880788dca4bd9245ee909d8658e..4235d6d257f4273adead6cec18215b97fa7c8c0f 100644
--- a/src/include/tcop/tcopprot.h
+++ b/src/include/tcop/tcopprot.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: tcopprot.h,v 1.53 2002/11/15 01:57:28 momjian Exp $
+ * $Id: tcopprot.h,v 1.54 2003/04/27 20:09:44 tgl Exp $
  *
  * OLD COMMENTS
  *	  This file was created so that other c files could get the two
@@ -22,7 +22,6 @@
 #include <setjmp.h>
 
 #include "executor/execdesc.h"
-#include "lib/stringinfo.h"
 #include "tcop/dest.h"
 
 
@@ -32,16 +31,16 @@ extern bool InError;
 extern CommandDest whereToSendOutput;
 extern bool log_hostname;
 extern bool LogSourcePort;
-extern DLLIMPORT char* debug_query_string;
+extern DLLIMPORT const char *debug_query_string;
 
 #ifndef BOOTSTRAP_INCLUDE
 
-extern List *pg_parse_query(StringInfo query_string, Oid *typev, int nargs);
+extern List *pg_parse_query(const char *query_string, Oid *typev, int nargs);
 extern List *pg_analyze_and_rewrite(Node *parsetree);
-extern List *pg_parse_and_rewrite(char *query_string,
+extern List *pg_parse_and_rewrite(const char *query_string,
 					 Oid *typev, int nargs);
 extern Plan *pg_plan_query(Query *querytree);
-extern void pg_exec_query_string(StringInfo query_string,
+extern void pg_exec_query_string(const char *query_string,
 					 CommandDest dest,
 					 MemoryContext parse_context);