aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2006-08-08 01:23:15 +0000
committerBruce Momjian <bruce@momjian.us>2006-08-08 01:23:15 +0000
commit3716f90c39150ccc97d4ebd8615fcb6141663b8e (patch)
tree6b3d873d851a4f941b6d3db761ac7a9718f6604b /src
parent2dd7ab062793c89419bb6a49e3f5c3f6120e830f (diff)
downloadpostgresql-3716f90c39150ccc97d4ebd8615fcb6141663b8e.tar.gz
postgresql-3716f90c39150ccc97d4ebd8615fcb6141663b8e.zip
For protocol-level prepare/bind/execute:
o print user name for all o print portal name if defined for all o print query for all o reduce log_statement header to single keyword o print bind parameters as DETAIL if text mode
Diffstat (limited to 'src')
-rw-r--r--src/backend/commands/portalcmds.c3
-rw-r--r--src/backend/commands/prepare.c3
-rw-r--r--src/backend/executor/spi.c3
-rw-r--r--src/backend/tcop/postgres.c62
-rw-r--r--src/backend/utils/mmgr/portalmem.c4
-rw-r--r--src/include/utils/portal.h4
6 files changed, 57 insertions, 22 deletions
diff --git a/src/backend/commands/portalcmds.c b/src/backend/commands/portalcmds.c
index 7b7d9a1ccf5..8b9dd99d4e4 100644
--- a/src/backend/commands/portalcmds.c
+++ b/src/backend/commands/portalcmds.c
@@ -14,7 +14,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/commands/portalcmds.c,v 1.48 2006/07/13 16:49:14 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/commands/portalcmds.c,v 1.49 2006/08/08 01:23:15 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -112,6 +112,7 @@ PerformCursorOpen(DeclareCursorStmt *stmt, ParamListInfo params)
* submitted more than one semicolon delimited queries.
*/
PortalDefineQuery(portal,
+ NULL,
pstrdup(debug_query_string),
"SELECT", /* cursor's query is always a SELECT */
list_make1(query),
diff --git a/src/backend/commands/prepare.c b/src/backend/commands/prepare.c
index bb367c17187..b49069dc2a2 100644
--- a/src/backend/commands/prepare.c
+++ b/src/backend/commands/prepare.c
@@ -10,7 +10,7 @@
* Copyright (c) 2002-2006, PostgreSQL Global Development Group
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/commands/prepare.c,v 1.58 2006/07/14 14:52:18 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/commands/prepare.c,v 1.59 2006/08/08 01:23:15 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -201,6 +201,7 @@ ExecuteQuery(ExecuteStmt *stmt, ParamListInfo params,
}
PortalDefineQuery(portal,
+ NULL,
query_string,
entry->commandTag,
query_list,
diff --git a/src/backend/executor/spi.c b/src/backend/executor/spi.c
index 18393482d1b..93394e2fa10 100644
--- a/src/backend/executor/spi.c
+++ b/src/backend/executor/spi.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/executor/spi.c,v 1.152 2006/07/14 14:52:19 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/executor/spi.c,v 1.153 2006/08/08 01:23:15 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -919,6 +919,7 @@ SPI_cursor_open(const char *name, void *plan,
* Set up the portal.
*/
PortalDefineQuery(portal,
+ NULL,
spiplan->query,
"SELECT", /* don't have the raw parse tree... */
list_make1(queryTree),
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index bc45c58612f..5a2beeaef5f 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.495 2006/08/06 02:00:52 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.496 2006/08/08 01:23:15 momjian Exp $
*
* NOTES
* this is the "main" module of the postgres backend and
@@ -955,6 +955,7 @@ exec_simple_query(const char *query_string)
portal->visible = false;
PortalDefineQuery(portal,
+ NULL,
query_string,
commandTag,
querytree_list,
@@ -1146,7 +1147,7 @@ exec_parse_message(const char *query_string, /* string to execute */
if (log_statement == LOGSTMT_ALL)
ereport(LOG,
- (errmsg("statement: <protocol> PREPARE %s AS %s",
+ (errmsg("prepare %s: %s",
*stmt_name ? stmt_name : "<unnamed>",
query_string)));
@@ -1367,6 +1368,7 @@ exec_bind_message(StringInfo input_message)
PreparedStatement *pstmt;
Portal portal;
ParamListInfo params;
+ StringInfoData str;
pgstat_report_activity("<BIND>");
@@ -1382,6 +1384,9 @@ exec_bind_message(StringInfo input_message)
/* Switch back to message context */
MemoryContextSwitchTo(MessageContext);
+ if (log_statement == LOGSTMT_ALL)
+ initStringInfo(&str);
+
/* Get the fixed part of the message */
portal_name = pq_getmsgstring(input_message);
stmt_name = pq_getmsgstring(input_message);
@@ -1450,13 +1455,6 @@ exec_bind_message(StringInfo input_message)
else
portal = CreatePortal(portal_name, false, false);
- /* We need to output the parameter values someday */
- if (log_statement == LOGSTMT_ALL)
- ereport(LOG,
- (errmsg("statement: <protocol> <BIND> %s [PREPARE: %s]",
- *portal_name ? portal_name : "<unnamed>",
- portal->sourceText ? portal->sourceText : "")));
-
/*
* Fetch parameters, if any, and store in the portal's memory context.
*/
@@ -1519,7 +1517,7 @@ exec_bind_message(StringInfo input_message)
else
pformat = 0; /* default = text */
- if (pformat == 0)
+ if (pformat == 0) /* text mode */
{
Oid typinput;
Oid typioparam;
@@ -1540,11 +1538,16 @@ exec_bind_message(StringInfo input_message)
pstring,
typioparam,
-1);
+
+ if (log_statement == LOGSTMT_ALL)
+ appendStringInfo(&str, "%s$%d = \"%s\"",
+ *str.data ? ", " : "", paramno + 1, pstring);
+
/* Free result of encoding conversion, if any */
if (pstring && pstring != pbuf.data)
pfree(pstring);
}
- else if (pformat == 1)
+ else if (pformat == 1) /* binary mode */
{
Oid typreceive;
Oid typioparam;
@@ -1595,6 +1598,26 @@ exec_bind_message(StringInfo input_message)
else
params = NULL;
+ if (log_statement == LOGSTMT_ALL)
+ {
+ if (*str.data)
+ ereport(LOG,
+ (errmsg("bind %s%s%s: %s",
+ *stmt_name ? stmt_name : "<unnamed>",
+ *portal->name ? "/" : "",
+ *portal->name ? portal->name : "",
+ pstmt->query_string ? pstmt->query_string : ""),
+ errdetail(str.data)));
+ else
+ ereport(LOG,
+ (errmsg("bind %s%s%s: %s",
+ *stmt_name ? stmt_name : "<unnamed>",
+ *portal->name ? "/" : "",
+ *portal->name ? portal->name : "",
+ pstmt->query_string ? pstmt->query_string : "")));
+ pfree(str.data);
+ }
+
/* Get the result format codes */
numRFormats = pq_getmsgint(input_message, 2);
if (numRFormats > 0)
@@ -1628,6 +1651,7 @@ exec_bind_message(StringInfo input_message)
* Define portal and start execution.
*/
PortalDefineQuery(portal,
+ *stmt_name ? pstrdup(stmt_name) : NULL,
pstmt->query_string,
pstmt->commandTag,
pstmt->query_list,
@@ -1724,9 +1748,11 @@ exec_execute_message(const char *portal_name, long max_rows)
if (log_statement == LOGSTMT_ALL)
/* We have the portal, so output the source query. */
ereport(LOG,
- (errmsg("statement: <protocol> %sEXECUTE %s [PREPARE: %s]",
- execute_is_fetch ? "FETCH from " : "",
- *portal_name ? portal_name : "<unnamed>",
+ (errmsg("execute %s%s%s%s: %s",
+ execute_is_fetch ? "fetch from " : "",
+ portal->prepStmtName ? portal->prepStmtName : "<unnamed>",
+ *portal->name ? "/" : "",
+ *portal->name ? portal->name : "",
portal->sourceText ? portal->sourceText : "")));
BeginCommand(portal->commandTag, dest);
@@ -1832,10 +1858,12 @@ exec_execute_message(const char *portal_name, long max_rows)
secs, msecs)));
else
ereport(LOG,
- (errmsg("duration: %ld.%03d ms statement: <protocol> %sEXECUTE %s [PREPARE: %s]",
+ (errmsg("duration: %ld.%03d ms execute %s%s%s%s: %s",
secs, msecs,
- execute_is_fetch ? "FETCH from " : "",
- *portal_name ? portal_name : "<unnamed>",
+ execute_is_fetch ? "fetch from " : "",
+ portal->prepStmtName ? portal->prepStmtName : "<unnamed>",
+ *portal->name ? "/" : "",
+ *portal->name ? portal->name : "",
portal->sourceText ? portal->sourceText : "")));
}
}
diff --git a/src/backend/utils/mmgr/portalmem.c b/src/backend/utils/mmgr/portalmem.c
index 1be86efe2f3..da4aee4d162 100644
--- a/src/backend/utils/mmgr/portalmem.c
+++ b/src/backend/utils/mmgr/portalmem.c
@@ -12,7 +12,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/mmgr/portalmem.c,v 1.90 2006/07/14 14:52:25 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/mmgr/portalmem.c,v 1.91 2006/08/08 01:23:15 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -244,6 +244,7 @@ CreateNewPortal(void)
*/
void
PortalDefineQuery(Portal portal,
+ const char *prepStmtName,
const char *sourceText,
const char *commandTag,
List *parseTrees,
@@ -257,6 +258,7 @@ PortalDefineQuery(Portal portal,
Assert(commandTag != NULL || parseTrees == NIL);
+ portal->prepStmtName = prepStmtName;
portal->sourceText = sourceText;
portal->commandTag = commandTag;
portal->parseTrees = parseTrees;
diff --git a/src/include/utils/portal.h b/src/include/utils/portal.h
index 059948f2aec..3704240ff50 100644
--- a/src/include/utils/portal.h
+++ b/src/include/utils/portal.h
@@ -39,7 +39,7 @@
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/include/utils/portal.h,v 1.63 2006/07/13 18:01:02 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/utils/portal.h,v 1.64 2006/08/08 01:23:15 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -100,6 +100,7 @@ typedef struct PortalData
{
/* Bookkeeping data */
const char *name; /* portal's name */
+ const char *prepStmtName; /* protocol prepare name */
MemoryContext heap; /* subsidiary memory for portal */
ResourceOwner resowner; /* resources owned by portal */
void (*cleanup) (Portal portal); /* cleanup hook */
@@ -202,6 +203,7 @@ extern void PortalDrop(Portal portal, bool isTopCommit);
extern void DropDependentPortals(MemoryContext queryContext);
extern Portal GetPortalByName(const char *name);
extern void PortalDefineQuery(Portal portal,
+ const char *prepStmtName,
const char *sourceText,
const char *commandTag,
List *parseTrees,