From 198b3716dba68544b55cb97bd120738a86d5df2d Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Tue, 30 Mar 2021 20:12:34 -0300 Subject: Improve PQtrace() output format MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Transform the PQtrace output format from its ancient (and mostly useless) byte-level output format to a logical-message-level output, making it much more usable. This implementation allows the printing code to be written (as it indeed was) by looking at the protocol documentation, which gives more confidence that the three (docs, trace code and actual code) actually match. Author: 岩田 彩 (Aya Iwata) Reviewed-by: 綱川 貴之 (Takayuki Tsunakawa) Reviewed-by: Kirk Jamison Reviewed-by: Kyotaro Horiguchi Reviewed-by: Tom Lane Reviewed-by: 黒田 隼人 (Hayato Kuroda) Reviewed-by: "Nagaura, Ryohei" Reviewed-by: Ryo Matsumura Reviewed-by: Greg Nancarrow Reviewed-by: Jim Doty Reviewed-by: Álvaro Herrera Discussion: https://postgr.es/m/71E660EB361DF14299875B198D4CE5423DE3FBA4@g01jpexmbkw25 --- src/interfaces/libpq/fe-protocol3.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src/interfaces/libpq/fe-protocol3.c') diff --git a/src/interfaces/libpq/fe-protocol3.c b/src/interfaces/libpq/fe-protocol3.c index 306e89acfd2..b45fb7e7059 100644 --- a/src/interfaces/libpq/fe-protocol3.c +++ b/src/interfaces/libpq/fe-protocol3.c @@ -457,6 +457,10 @@ pqParseInput3(PGconn *conn) /* Successfully consumed this message */ if (conn->inCursor == conn->inStart + 5 + msgLength) { + /* trace server-to-client message */ + if (conn->Pfdebug) + pqTraceOutputMessage(conn, conn->inBuffer + conn->inStart, false); + /* Normal case: parsing agrees with specified length */ conn->inStart = conn->inCursor; } @@ -1660,6 +1664,10 @@ getCopyDataMessage(PGconn *conn) return -1; } + /* trace server-to-client message */ + if (conn->Pfdebug) + pqTraceOutputMessage(conn, conn->inBuffer + conn->inStart, false); + /* Drop the processed message and loop around for another */ conn->inStart = conn->inCursor; } @@ -2119,6 +2127,11 @@ pqFunctionCall3(PGconn *conn, Oid fnid, conn->inStart += 5 + msgLength; return pqPrepareAsyncResult(conn); } + + /* trace server-to-client message */ + if (conn->Pfdebug) + pqTraceOutputMessage(conn, conn->inBuffer + conn->inStart, false); + /* Completed this message, keep going */ /* trust the specified message length as what to skip */ conn->inStart += 5 + msgLength; -- cgit v1.2.3