aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2010-11-04 15:28:35 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2010-11-04 15:28:35 -0400
commit09211659d9d8fd62f9de09703c90ed4f072c4a47 (patch)
tree34e3afdb95e2fdd71417f0d12ac3dcd87dd7a74c /src
parent034967bdcbb0c7be61d0500955226e1234ec5f04 (diff)
downloadpostgresql-09211659d9d8fd62f9de09703c90ed4f072c4a47.tar.gz
postgresql-09211659d9d8fd62f9de09703c90ed4f072c4a47.zip
Use appendStringInfoString() where appropriate in elog.c.
The nominally equivalent call appendStringInfo(buf, "%s", str) can be significantly slower when str is large. In particular, the former usage in EVALUATE_MESSAGE led to O(N^2) behavior when collecting a large number of context lines, as I found out while testing recursive functions. The other changes are just neatnik-ism and seem unlikely to save anything meaningful, but a cycle shaved is a cycle earned.
Diffstat (limited to 'src')
-rw-r--r--src/backend/utils/error/elog.c51
1 files changed, 29 insertions, 22 deletions
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index e321b992493..6e2cef95046 100644
--- a/src/backend/utils/error/elog.c
+++ b/src/backend/utils/error/elog.c
@@ -667,8 +667,10 @@ errcode_for_socket_access(void)
/* Expand %m in format string */ \
fmtbuf = expand_fmt_string(fmt, edata); \
initStringInfo(&buf); \
- if ((appendval) && edata->targetfield) \
- appendStringInfo(&buf, "%s\n", edata->targetfield); \
+ if ((appendval) && edata->targetfield) { \
+ appendStringInfoString(&buf, edata->targetfield); \
+ appendStringInfoChar(&buf, '\n'); \
+ } \
/* Generate actual output --- have to use appendStringInfoVA */ \
for (;;) \
{ \
@@ -708,8 +710,10 @@ errcode_for_socket_access(void)
/* Expand %m in format string */ \
fmtbuf = expand_fmt_string(fmt, edata); \
initStringInfo(&buf); \
- if ((appendval) && edata->targetfield) \
- appendStringInfo(&buf, "%s\n", edata->targetfield); \
+ if ((appendval) && edata->targetfield) { \
+ appendStringInfoString(&buf, edata->targetfield); \
+ appendStringInfoChar(&buf, '\n'); \
+ } \
/* Generate actual output --- have to use appendStringInfoVA */ \
for (;;) \
{ \
@@ -1809,7 +1813,7 @@ log_line_prefix(StringInfo buf, ErrorData *edata)
if (appname == NULL || *appname == '\0')
appname = _("[unknown]");
- appendStringInfo(buf, "%s", appname);
+ appendStringInfoString(buf, appname);
}
break;
case 'u':
@@ -1819,7 +1823,7 @@ log_line_prefix(StringInfo buf, ErrorData *edata)
if (username == NULL || *username == '\0')
username = _("[unknown]");
- appendStringInfo(buf, "%s", username);
+ appendStringInfoString(buf, username);
}
break;
case 'd':
@@ -1829,7 +1833,7 @@ log_line_prefix(StringInfo buf, ErrorData *edata)
if (dbname == NULL || *dbname == '\0')
dbname = _("[unknown]");
- appendStringInfo(buf, "%s", dbname);
+ appendStringInfoString(buf, dbname);
}
break;
case 'c':
@@ -1877,7 +1881,7 @@ log_line_prefix(StringInfo buf, ErrorData *edata)
case 'r':
if (MyProcPort && MyProcPort->remote_host)
{
- appendStringInfo(buf, "%s", MyProcPort->remote_host);
+ appendStringInfoString(buf, MyProcPort->remote_host);
if (MyProcPort->remote_port &&
MyProcPort->remote_port[0] != '\0')
appendStringInfo(buf, "(%s)",
@@ -1886,7 +1890,7 @@ log_line_prefix(StringInfo buf, ErrorData *edata)
break;
case 'h':
if (MyProcPort && MyProcPort->remote_host)
- appendStringInfo(buf, "%s", MyProcPort->remote_host);
+ appendStringInfoString(buf, MyProcPort->remote_host);
break;
case 'q':
/* in postmaster and friends, stop if %q is seen */
@@ -2004,9 +2008,12 @@ write_csvlog(ErrorData *edata)
if (MyProcPort && MyProcPort->remote_host)
{
appendStringInfoChar(&buf, '"');
- appendStringInfo(&buf, "%s", MyProcPort->remote_host);
+ appendStringInfoString(&buf, MyProcPort->remote_host);
if (MyProcPort->remote_port && MyProcPort->remote_port[0] != '\0')
- appendStringInfo(&buf, ":%s", MyProcPort->remote_port);
+ {
+ appendStringInfoChar(&buf, ':');
+ appendStringInfoString(&buf, MyProcPort->remote_port);
+ }
appendStringInfoChar(&buf, '"');
}
appendStringInfoChar(&buf, ',');
@@ -2053,40 +2060,40 @@ write_csvlog(ErrorData *edata)
appendStringInfoChar(&buf, ',');
/* Error severity */
- appendStringInfo(&buf, "%s", error_severity(edata->elevel));
+ appendStringInfoString(&buf, error_severity(edata->elevel));
appendStringInfoChar(&buf, ',');
/* SQL state code */
- appendStringInfo(&buf, "%s", unpack_sql_state(edata->sqlerrcode));
+ appendStringInfoString(&buf, unpack_sql_state(edata->sqlerrcode));
appendStringInfoChar(&buf, ',');
/* errmessage */
appendCSVLiteral(&buf, edata->message);
- appendStringInfoCharMacro(&buf, ',');
+ appendStringInfoChar(&buf, ',');
/* errdetail or errdetail_log */
if (edata->detail_log)
appendCSVLiteral(&buf, edata->detail_log);
else
appendCSVLiteral(&buf, edata->detail);
- appendStringInfoCharMacro(&buf, ',');
+ appendStringInfoChar(&buf, ',');
/* errhint */
appendCSVLiteral(&buf, edata->hint);
- appendStringInfoCharMacro(&buf, ',');
+ appendStringInfoChar(&buf, ',');
/* internal query */
appendCSVLiteral(&buf, edata->internalquery);
- appendStringInfoCharMacro(&buf, ',');
+ appendStringInfoChar(&buf, ',');
/* if printed internal query, print internal pos too */
if (edata->internalpos > 0 && edata->internalquery != NULL)
appendStringInfo(&buf, "%d", edata->internalpos);
- appendStringInfoCharMacro(&buf, ',');
+ appendStringInfoChar(&buf, ',');
/* errcontext */
appendCSVLiteral(&buf, edata->context);
- appendStringInfoCharMacro(&buf, ',');
+ appendStringInfoChar(&buf, ',');
/* user query --- only reported if not disabled by the caller */
if (is_log_level_output(edata->elevel, log_min_error_statement) &&
@@ -2095,10 +2102,10 @@ write_csvlog(ErrorData *edata)
print_stmt = true;
if (print_stmt)
appendCSVLiteral(&buf, debug_query_string);
- appendStringInfoCharMacro(&buf, ',');
+ appendStringInfoChar(&buf, ',');
if (print_stmt && edata->cursorpos > 0)
appendStringInfo(&buf, "%d", edata->cursorpos);
- appendStringInfoCharMacro(&buf, ',');
+ appendStringInfoChar(&buf, ',');
/* file error location */
if (Log_error_verbosity >= PGERROR_VERBOSE)
@@ -2117,7 +2124,7 @@ write_csvlog(ErrorData *edata)
appendCSVLiteral(&buf, msgbuf.data);
pfree(msgbuf.data);
}
- appendStringInfoCharMacro(&buf, ',');
+ appendStringInfoChar(&buf, ',');
/* application name */
if (application_name)