Suppress length of Notice/Error msgs in PQtrace regress mode
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Fri, 9 Apr 2021 21:13:18 +0000 (17:13 -0400)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Fri, 9 Apr 2021 21:13:18 +0000 (17:13 -0400)
A (relatively minor) annoyance of ErrorResponse/NoticeResponse messages
as printed by PQtrace() is that their length might vary when we move
error messages from one source file to another, one function to another,
or even when their location line numbers change number of digits.

To avoid having to adjust expected files for some tests, make the
regress mode of PQtrace() suppress the length word of NoticeResponse and
ErrorResponse messages.

Discussion: https://postgr.es/m/20210402023010.GA13563@alvherre.pgsql
Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
src/interfaces/libpq/fe-trace.c
src/test/modules/libpq_pipeline/traces/pipeline_abort.trace
src/test/modules/libpq_pipeline/traces/transaction.trace

index 51b01fd40e5dea62a67dfd8a61cb6467024fcbb1..61a7e4896710ee7c635685127894db19df8f5629 100644 (file)
@@ -549,7 +549,16 @@ pqTraceOutputMessage(PGconn *conn, const char *message, bool toServer)
    length = (int) pg_ntoh32(length);
    logCursor += 4;
 
-   fprintf(conn->Pfdebug, "%s\t%d\t", prefix, length);
+   /*
+    * In regress mode, suppress the length of ErrorResponse and
+    * NoticeResponse.  The F (file name), L (line number) and R (routine
+    * name) fields can change as server code is modified, and if their
+    * lengths differ from the originals, that would break tests.
+    */
+   if (regress && !toServer && (id == 'E' || id == 'N'))
+       fprintf(conn->Pfdebug, "%s\tNN\t", prefix);
+   else
+       fprintf(conn->Pfdebug, "%s\t%d\t", prefix, length);
 
    switch (id)
    {
index b0614357856ca3f48c35ac44a7769c2b619dbf1e..254e48599755e80c1e0711992e302cd99b4f0d8b 100644 (file)
@@ -1,5 +1,5 @@
 F  42  Query    "DROP TABLE IF EXISTS pq_pipeline_demo"
-B  123 NoticeResponse   S "NOTICE" V "NOTICE" C "00000" M "table "pq_pipeline_demo" does not exist, skipping" F "SSSS" L "SSSS" R "SSSS" \x00
+B  NN  NoticeResponse   S "NOTICE" V "NOTICE" C "00000" M "table "pq_pipeline_demo" does not exist, skipping" F "SSSS" L "SSSS" R "SSSS" \x00
 B  15  CommandComplete  "DROP TABLE"
 B  5   ReadyForQuery    I
 F  99  Query    "CREATE UNLOGGED TABLE pq_pipeline_demo(id serial primary key, itemno integer,int8filler int8);"
@@ -27,7 +27,7 @@ B 4   ParseComplete
 B  4   BindComplete
 B  4   NoData
 B  15  CommandComplete  "INSERT 0 1"
-B  217 ErrorResponse    S "ERROR" V "ERROR" C "42883" M "function no_such_function(integer) does not exist" H "No function matches the given name and argument types. You might need to add explicit type casts." P "8" F "SSSS" L "SSSS" R "SSSS" \x00
+B  NN  ErrorResponse    S "ERROR" V "ERROR" C "42883" M "function no_such_function(integer) does not exist" H "No function matches the given name and argument types. You might need to add explicit type casts." P "8" F "SSSS" L "SSSS" R "SSSS" \x00
 B  5   ReadyForQuery    I
 B  4   ParseComplete
 B  4   BindComplete
@@ -39,7 +39,7 @@ F 12  Bind     "" "" 0 0 0
 F  6   Describe     P ""
 F  9   Execute  "" 0
 F  4   Sync
-B  123 ErrorResponse    S "ERROR" V "ERROR" C "42601" M "cannot insert multiple commands into a prepared statement" F "SSSS" L "SSSS" R "SSSS" \x00
+B  NN  ErrorResponse    S "ERROR" V "ERROR" C "42601" M "cannot insert multiple commands into a prepared statement" F "SSSS" L "SSSS" R "SSSS" \x00
 B  5   ReadyForQuery    I
 F  54  Parse    "" "SELECT 1.0/g FROM generate_series(3, -1, -1) g" 0
 F  12  Bind     "" "" 0 0 0
@@ -52,7 +52,7 @@ B 33  RowDescription   1 "?column?" NNNN 0 NNNN 65535 -1 0
 B  32  DataRow  1 22 '0.33333333333333333333'
 B  32  DataRow  1 22 '0.50000000000000000000'
 B  32  DataRow  1 22 '1.00000000000000000000'
-B  70  ErrorResponse    S "ERROR" V "ERROR" C "22012" M "division by zero" F "SSSS" L "SSSS" R "SSSS" \x00
+B  NN  ErrorResponse    S "ERROR" V "ERROR" C "22012" M "division by zero" F "SSSS" L "SSSS" R "SSSS" \x00
 B  5   ReadyForQuery    I
 F  40  Query    "SELECT itemno FROM pq_pipeline_demo"
 B  31  RowDescription   1 "itemno" NNNN 2 NNNN 4 -1 0
index 0267a534fa1f467dc74dad8e855289f5b566cedd..1dcc2373c0b5c315528fa5522fdc870f346266b2 100644 (file)
@@ -1,5 +1,5 @@
 F  79  Query    "DROP TABLE IF EXISTS pq_pipeline_tst;CREATE TABLE pq_pipeline_tst (id int)"
-B  122 NoticeResponse   S "NOTICE" V "NOTICE" C "00000" M "table "pq_pipeline_tst" does not exist, skipping" F "SSSS" L "SSSS" R "SSSS" \x00
+B  NN  NoticeResponse   S "NOTICE" V "NOTICE" C "00000" M "table "pq_pipeline_tst" does not exist, skipping" F "SSSS" L "SSSS" R "SSSS" \x00
 B  15  CommandComplete  "DROP TABLE"
 B  17  CommandComplete  "CREATE TABLE"
 B  5   ReadyForQuery    I
@@ -40,9 +40,9 @@ B 4   BindComplete
 B  4   NoData
 B  10  CommandComplete  "BEGIN"
 B  4   ParseComplete
-B  65  ErrorResponse    S "ERROR" V "ERROR" C "22012" M "division by zero" F "SSSS" L "SSSS" R "SSSS" \x00
+B  NN  ErrorResponse    S "ERROR" V "ERROR" C "22012" M "division by zero" F "SSSS" L "SSSS" R "SSSS" \x00
 B  5   ReadyForQuery    E
-B  145 ErrorResponse    S "ERROR" V "ERROR" C "25P02" M "current transaction is aborted, commands ignored until end of transaction block" F "SSSS" L "SSSS" R "SSSS" \x00
+B  NN  ErrorResponse    S "ERROR" V "ERROR" C "25P02" M "current transaction is aborted, commands ignored until end of transaction block" F "SSSS" L "SSSS" R "SSSS" \x00
 B  5   ReadyForQuery    E
 B  4   BindComplete
 B  4   NoData