Log protocol-excute fetch operatation as fetch, rather than execute,
authorBruce Momjian <bruce@momjian.us>
Mon, 26 Sep 2005 15:51:12 +0000 (15:51 +0000)
committerBruce Momjian <bruce@momjian.us>
Mon, 26 Sep 2005 15:51:12 +0000 (15:51 +0000)
adjusted from a patch by Simon.

src/backend/tcop/postgres.c

index 9e9f11f2cb733af545f19879fb25c289399678a6..4e3b5387d89445b384137e44d2898949a2e1210b 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.462 2005/09/24 17:53:15 tgl Exp $
+ *   $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.463 2005/09/26 15:51:12 momjian Exp $
  *
  * NOTES
  *   this is the "main" module of the postgres backend and
@@ -1466,6 +1466,7 @@ 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: <BIND> %s", portal_name)));
@@ -1681,6 +1682,7 @@ exec_execute_message(const char *portal_name, long max_rows)
    bool        save_log_duration = log_duration;
    int         save_log_min_duration_statement = log_min_duration_statement;
    bool        save_log_statement_stats = log_statement_stats;
+   bool        execute_is_fetch = false;
 
    /* Adjust destination to tell printtup.c what to do */
    dest = whereToSendOutput;
@@ -1693,6 +1695,15 @@ exec_execute_message(const char *portal_name, long max_rows)
                (errcode(ERRCODE_UNDEFINED_CURSOR),
                 errmsg("portal \"%s\" does not exist", portal_name)));
 
+   /*
+    * If we re-issue an Execute protocol request against an existing
+    * portal, then we are only fetching more rows rather than 
+    * completely re-executing the query from the start. atStart is never
+    * reset for a v3 portal, so we are safe to use this check.
+    */
+   if (!portal->atStart)
+       execute_is_fetch = true;
+
    /*
     * If the original query was a null string, just return
     * EmptyQueryResponse.
@@ -1704,7 +1715,13 @@ exec_execute_message(const char *portal_name, long max_rows)
        return;
    }
 
-   if (portal->sourceText)
+   /* Should we display the portal names here? */
+   if (execute_is_fetch)
+   {
+       debug_query_string = "fetch message";
+       pgstat_report_activity("<FETCH>");
+   }
+   else if (portal->sourceText)
    {
        debug_query_string = portal->sourceText;
        pgstat_report_activity(portal->sourceText);
@@ -1732,7 +1749,8 @@ 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: EXECUTE %s  [PREPARE:  %s]",
+               (errmsg("statement: %sEXECUTE %s  [PREPARE:  %s]",
+                       (execute_is_fetch) ? "FETCH from " : "",
                        (*portal_name != '\0') ? portal_name : "<unnamed>",
                        portal->sourceText ? portal->sourceText : "")));
 
@@ -1864,10 +1882,11 @@ exec_execute_message(const char *portal_name, long max_rows)
            (save_log_min_duration_statement > 0 &&
             usecs >= save_log_min_duration_statement * 1000))
            ereport(LOG,
-                   (errmsg("duration: %ld.%03ld ms  statement: EXECUTE %s  [PREPARE:  %s]",
+                   (errmsg("duration: %ld.%03ld ms  statement: %sEXECUTE %s  [PREPARE:  %s]",
                        (long) ((stop_t.tv_sec - start_t.tv_sec) * 1000 +
                              (stop_t.tv_usec - start_t.tv_usec) / 1000),
                        (long) (stop_t.tv_usec - start_t.tv_usec) % 1000,
+                           (execute_is_fetch) ? "FETCH from " : "",
                            (*portal_name != '\0') ? portal_name : "<unnamed>",
                            portal->sourceText ? portal->sourceText : "")));
    }