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);