PostgreSQL Source Code git master
Loading...
Searching...
No Matches
fe-trace.c File Reference
#include "postgres_fe.h"
#include <ctype.h>
#include <limits.h>
#include <sys/time.h>
#include <unistd.h>
#include "libpq-fe.h"
#include "libpq-int.h"
#include "port/pg_bswap.h"
Include dependency graph for fe-trace.c:

Go to the source code of this file.

Functions

void PQtrace (PGconn *conn, FILE *debug_port)
 
void PQuntrace (PGconn *conn)
 
void PQsetTraceFlags (PGconn *conn, int flags)
 
static void pqTraceFormatTimestamp (char *timestr, size_t ts_len)
 
static void pqTraceOutputByte1 (FILE *pfdebug, const char *data, int *cursor)
 
static int pqTraceOutputInt16 (FILE *pfdebug, const char *data, int *cursor)
 
static int pqTraceOutputInt32 (FILE *pfdebug, const char *data, int *cursor, bool suppress)
 
static void pqTraceOutputString (FILE *pfdebug, const char *data, int *cursor, bool suppress)
 
static void pqTraceOutputNchar (FILE *pfdebug, int len, const char *data, int *cursor, bool suppress)
 
static void pqTraceOutput_NotificationResponse (FILE *f, const char *message, int *cursor, bool regress)
 
static void pqTraceOutput_Bind (FILE *f, const char *message, int *cursor)
 
static void pqTraceOutput_Close (FILE *f, const char *message, int *cursor)
 
static void pqTraceOutput_CommandComplete (FILE *f, const char *message, int *cursor)
 
static void pqTraceOutput_CopyData (FILE *f, const char *message, int *cursor, int length, bool suppress)
 
static void pqTraceOutput_DataRow (FILE *f, const char *message, int *cursor)
 
static void pqTraceOutput_Describe (FILE *f, const char *message, int *cursor)
 
static void pqTraceOutputNR (FILE *f, const char *type, const char *message, int *cursor, bool regress)
 
static void pqTraceOutput_ErrorResponse (FILE *f, const char *message, int *cursor, bool regress)
 
static void pqTraceOutput_NoticeResponse (FILE *f, const char *message, int *cursor, bool regress)
 
static void pqTraceOutput_Execute (FILE *f, const char *message, int *cursor, bool regress)
 
static void pqTraceOutput_CopyFail (FILE *f, const char *message, int *cursor)
 
static void pqTraceOutput_GSSResponse (FILE *f, const char *message, int *cursor, int length, bool regress)
 
static void pqTraceOutput_PasswordMessage (FILE *f, const char *message, int *cursor)
 
static void pqTraceOutput_SASLInitialResponse (FILE *f, const char *message, int *cursor, bool regress)
 
static void pqTraceOutput_SASLResponse (FILE *f, const char *message, int *cursor, int length, bool regress)
 
static void pqTraceOutput_FunctionCall (FILE *f, const char *message, int *cursor, bool regress)
 
static void pqTraceOutput_CopyInResponse (FILE *f, const char *message, int *cursor)
 
static void pqTraceOutput_CopyOutResponse (FILE *f, const char *message, int *cursor)
 
static void pqTraceOutput_BackendKeyData (FILE *f, const char *message, int *cursor, int length, bool regress)
 
static void pqTraceOutput_Parse (FILE *f, const char *message, int *cursor, bool regress)
 
static void pqTraceOutput_Query (FILE *f, const char *message, int *cursor)
 
static void pqTraceOutput_Authentication (FILE *f, const char *message, int *cursor, int length, bool suppress)
 
static void pqTraceOutput_ParameterStatus (FILE *f, const char *message, int *cursor)
 
static void pqTraceOutput_ParameterDescription (FILE *f, const char *message, int *cursor, bool regress)
 
static void pqTraceOutput_RowDescription (FILE *f, const char *message, int *cursor, bool regress)
 
static void pqTraceOutput_NegotiateProtocolVersion (FILE *f, const char *message, int *cursor)
 
static void pqTraceOutput_FunctionCallResponse (FILE *f, const char *message, int *cursor)
 
static void pqTraceOutput_CopyBothResponse (FILE *f, const char *message, int *cursor, int length)
 
static void pqTraceOutput_ReadyForQuery (FILE *f, const char *message, int *cursor)
 
void pqTraceOutputMessage (PGconn *conn, const char *message, bool toServer)
 
void pqTraceOutputNoTypeByteMessage (PGconn *conn, const char *message)
 
void pqTraceOutputCharResponse (PGconn *conn, const char *responseType, char response)
 

Function Documentation

◆ PQsetTraceFlags()

void PQsetTraceFlags ( PGconn conn,
int  flags 
)

Definition at line 64 of file fe-trace.c.

65{
66 if (conn == NULL)
67 return;
68 /* If PQtrace() failed, do nothing. */
69 if (conn->Pfdebug == NULL)
70 return;
71 conn->traceFlags = flags;
72}
static int fb(int x)
PGconn * conn
Definition streamutil.c:52
FILE * Pfdebug
Definition libpq-int.h:453
int traceFlags
Definition libpq-int.h:454

References conn, fb(), pg_conn::Pfdebug, and pg_conn::traceFlags.

Referenced by main().

◆ PQtrace()

void PQtrace ( PGconn conn,
FILE debug_port 
)

Definition at line 35 of file fe-trace.c.

36{
37 if (conn == NULL)
38 return;
40 if (debug_port == NULL)
41 return;
42
44 conn->traceFlags = 0;
45}
void PQuntrace(PGconn *conn)
Definition fe-trace.c:49

References conn, fb(), pg_conn::Pfdebug, PQuntrace(), and pg_conn::traceFlags.

Referenced by main().

◆ pqTraceFormatTimestamp()

static void pqTraceFormatTimestamp ( char timestr,
size_t  ts_len 
)
static

Definition at line 80 of file fe-trace.c.

81{
82 struct timeval tval;
83 time_t now;
84 struct tm tmbuf;
85
87
88 /*
89 * MSVC's implementation of timeval uses a long for tv_sec, however,
90 * localtime() expects a time_t pointer. Here we'll assign tv_sec to a
91 * local time_t variable so that we pass localtime() the correct pointer
92 * type.
93 */
94 now = tval.tv_sec;
96 "%Y-%m-%d %H:%M:%S",
98 /* append microseconds */
100 ".%06u", (unsigned int) (tval.tv_usec));
101}
Datum now(PG_FUNCTION_ARGS)
Definition timestamp.c:1613
static struct pg_tm tm
Definition localtime.c:148
#define snprintf
Definition port.h:261
int gettimeofday(struct timeval *tp, void *tzp)

References fb(), gettimeofday(), now(), snprintf, and tm.

Referenced by pqTraceOutputCharResponse(), pqTraceOutputMessage(), and pqTraceOutputNoTypeByteMessage().

◆ pqTraceOutput_Authentication()

static void pqTraceOutput_Authentication ( FILE f,
const char message,
int cursor,
int  length,
bool  suppress 
)
static

Definition at line 485 of file fe-trace.c.

487{
488 int authType = 0;
489
490 memcpy(&authType, message + *cursor, 4);
492 *cursor += 4;
493 switch (authType)
494 {
495 case AUTH_REQ_OK:
496 fprintf(f, "AuthenticationOk");
497 break;
498 /* AUTH_REQ_KRB4 not supported */
499 /* AUTH_REQ_KRB5 not supported */
501 fprintf(f, "AuthenticationCleartextPassword");
502 break;
503 /* AUTH_REQ_CRYPT not supported */
504 case AUTH_REQ_MD5:
505 fprintf(f, "AuthenticationMD5Password");
506 break;
507 case AUTH_REQ_GSS:
508 fprintf(f, "AuthenticationGSS");
509 break;
511 fprintf(f, "AuthenticationGSSContinue\t");
512 pqTraceOutputNchar(f, length - *cursor + 1, message, cursor,
513 suppress);
514 break;
515 case AUTH_REQ_SSPI:
516 fprintf(f, "AuthenticationSSPI");
517 break;
518 case AUTH_REQ_SASL:
519 fprintf(f, "AuthenticationSASL\t");
520 while (message[*cursor] != '\0')
521 pqTraceOutputString(f, message, cursor, false);
522 pqTraceOutputString(f, message, cursor, false);
523 break;
525 fprintf(f, "AuthenticationSASLContinue\t");
526 pqTraceOutputNchar(f, length - *cursor + 1, message, cursor,
527 suppress);
528 break;
530 fprintf(f, "AuthenticationSASLFinal\t");
531 pqTraceOutputNchar(f, length - *cursor + 1, message, cursor,
532 suppress);
533 break;
534 default:
535 fprintf(f, "Unknown authentication message %d", authType);
536 }
537}
memcpy(sums, checksumBaseOffsets, sizeof(checksumBaseOffsets))
#define fprintf(file, fmt, msg)
Definition cubescan.l:21
static void pqTraceOutputString(FILE *pfdebug, const char *data, int *cursor, bool suppress)
Definition fe-trace.c:166
static void pqTraceOutputNchar(FILE *pfdebug, int len, const char *data, int *cursor, bool suppress)
Definition fe-trace.c:193
#define pg_ntoh32(x)
Definition pg_bswap.h:125
#define AUTH_REQ_SSPI
Definition protocol.h:105
#define AUTH_REQ_SASL_CONT
Definition protocol.h:107
#define AUTH_REQ_GSS
Definition protocol.h:103
#define AUTH_REQ_MD5
Definition protocol.h:101
#define AUTH_REQ_OK
Definition protocol.h:96
#define AUTH_REQ_PASSWORD
Definition protocol.h:99
#define AUTH_REQ_GSS_CONT
Definition protocol.h:104
#define AUTH_REQ_SASL
Definition protocol.h:106
#define AUTH_REQ_SASL_FIN
Definition protocol.h:108
Definition type.h:139

References AUTH_REQ_GSS, AUTH_REQ_GSS_CONT, AUTH_REQ_MD5, AUTH_REQ_OK, AUTH_REQ_PASSWORD, AUTH_REQ_SASL, AUTH_REQ_SASL_CONT, AUTH_REQ_SASL_FIN, AUTH_REQ_SSPI, fb(), fprintf, memcpy(), pg_ntoh32, pqTraceOutputNchar(), and pqTraceOutputString().

Referenced by pqTraceOutputMessage().

◆ pqTraceOutput_BackendKeyData()

static void pqTraceOutput_BackendKeyData ( FILE f,
const char message,
int cursor,
int  length,
bool  regress 
)
static

Definition at line 455 of file fe-trace.c.

457{
458 fprintf(f, "BackendKeyData\t");
459 pqTraceOutputInt32(f, message, cursor, regress);
460 pqTraceOutputNchar(f, length - *cursor + 1, message, cursor, regress);
461}
static int pqTraceOutputInt32(FILE *pfdebug, const char *data, int *cursor, bool suppress)
Definition fe-trace.c:145

References fb(), fprintf, pqTraceOutputInt32(), and pqTraceOutputNchar().

Referenced by pqTraceOutputMessage().

◆ pqTraceOutput_Bind()

static void pqTraceOutput_Bind ( FILE f,
const char message,
int cursor 
)
static

Definition at line 240 of file fe-trace.c.

241{
242 int nparams;
243
244 fprintf(f, "Bind\t");
245 pqTraceOutputString(f, message, cursor, false);
246 pqTraceOutputString(f, message, cursor, false);
247 nparams = pqTraceOutputInt16(f, message, cursor);
248
249 for (int i = 0; i < nparams; i++)
250 pqTraceOutputInt16(f, message, cursor);
251
252 nparams = pqTraceOutputInt16(f, message, cursor);
253
254 for (int i = 0; i < nparams; i++)
255 {
256 int nbytes;
257
258 nbytes = pqTraceOutputInt32(f, message, cursor, false);
259 if (nbytes == -1)
260 continue;
261 pqTraceOutputNchar(f, nbytes, message, cursor, false);
262 }
263
264 nparams = pqTraceOutputInt16(f, message, cursor);
265 for (int i = 0; i < nparams; i++)
266 pqTraceOutputInt16(f, message, cursor);
267}
static int pqTraceOutputInt16(FILE *pfdebug, const char *data, int *cursor)
Definition fe-trace.c:126
int i
Definition isn.c:77

References fprintf, i, pqTraceOutputInt16(), pqTraceOutputInt32(), pqTraceOutputNchar(), and pqTraceOutputString().

Referenced by pqTraceOutputMessage().

◆ pqTraceOutput_Close()

static void pqTraceOutput_Close ( FILE f,
const char message,
int cursor 
)
static

Definition at line 270 of file fe-trace.c.

271{
272 fprintf(f, "Close\t");
273 pqTraceOutputByte1(f, message, cursor);
274 pqTraceOutputString(f, message, cursor, false);
275}
static void pqTraceOutputByte1(FILE *pfdebug, const char *data, int *cursor)
Definition fe-trace.c:107

References fprintf, pqTraceOutputByte1(), and pqTraceOutputString().

Referenced by pqTraceOutputMessage().

◆ pqTraceOutput_CommandComplete()

static void pqTraceOutput_CommandComplete ( FILE f,
const char message,
int cursor 
)
static

Definition at line 278 of file fe-trace.c.

279{
280 fprintf(f, "CommandComplete\t");
281 pqTraceOutputString(f, message, cursor, false);
282}

References fprintf, and pqTraceOutputString().

Referenced by pqTraceOutputMessage().

◆ pqTraceOutput_CopyBothResponse()

static void pqTraceOutput_CopyBothResponse ( FILE f,
const char message,
int cursor,
int  length 
)
static

Definition at line 605 of file fe-trace.c.

606{
607 fprintf(f, "CopyBothResponse\t");
608 pqTraceOutputByte1(f, message, cursor);
609
610 while (length > *cursor)
611 pqTraceOutputInt16(f, message, cursor);
612}

References fprintf, pqTraceOutputByte1(), and pqTraceOutputInt16().

Referenced by pqTraceOutputMessage().

◆ pqTraceOutput_CopyData()

static void pqTraceOutput_CopyData ( FILE f,
const char message,
int cursor,
int  length,
bool  suppress 
)
static

Definition at line 285 of file fe-trace.c.

287{
288 fprintf(f, "CopyData\t");
289 pqTraceOutputNchar(f, length - *cursor + 1, message, cursor, suppress);
290}

References fb(), fprintf, and pqTraceOutputNchar().

Referenced by pqTraceOutputMessage().

◆ pqTraceOutput_CopyFail()

static void pqTraceOutput_CopyFail ( FILE f,
const char message,
int cursor 
)
static

Definition at line 360 of file fe-trace.c.

361{
362 fprintf(f, "CopyFail\t");
363 pqTraceOutputString(f, message, cursor, false);
364}

References fprintf, and pqTraceOutputString().

Referenced by pqTraceOutputMessage().

◆ pqTraceOutput_CopyInResponse()

static void pqTraceOutput_CopyInResponse ( FILE f,
const char message,
int cursor 
)
static

Definition at line 429 of file fe-trace.c.

430{
431 int nfields;
432
433 fprintf(f, "CopyInResponse\t");
434 pqTraceOutputByte1(f, message, cursor);
435 nfields = pqTraceOutputInt16(f, message, cursor);
436
437 for (int i = 0; i < nfields; i++)
438 pqTraceOutputInt16(f, message, cursor);
439}

References fprintf, i, pqTraceOutputByte1(), and pqTraceOutputInt16().

Referenced by pqTraceOutputMessage().

◆ pqTraceOutput_CopyOutResponse()

static void pqTraceOutput_CopyOutResponse ( FILE f,
const char message,
int cursor 
)
static

Definition at line 442 of file fe-trace.c.

443{
444 int nfields;
445
446 fprintf(f, "CopyOutResponse\t");
447 pqTraceOutputByte1(f, message, cursor);
448 nfields = pqTraceOutputInt16(f, message, cursor);
449
450 for (int i = 0; i < nfields; i++)
451 pqTraceOutputInt16(f, message, cursor);
452}

References fprintf, i, pqTraceOutputByte1(), and pqTraceOutputInt16().

Referenced by pqTraceOutputMessage().

◆ pqTraceOutput_DataRow()

static void pqTraceOutput_DataRow ( FILE f,
const char message,
int cursor 
)
static

Definition at line 293 of file fe-trace.c.

294{
295 int nfields;
296 int len;
297 int i;
298
299 fprintf(f, "DataRow\t");
300 nfields = pqTraceOutputInt16(f, message, cursor);
301 for (i = 0; i < nfields; i++)
302 {
303 len = pqTraceOutputInt32(f, message, cursor, false);
304 if (len == -1)
305 continue;
306 pqTraceOutputNchar(f, len, message, cursor, false);
307 }
308}
const void size_t len

References fprintf, i, len, pqTraceOutputInt16(), pqTraceOutputInt32(), and pqTraceOutputNchar().

Referenced by pqTraceOutputMessage().

◆ pqTraceOutput_Describe()

static void pqTraceOutput_Describe ( FILE f,
const char message,
int cursor 
)
static

Definition at line 311 of file fe-trace.c.

312{
313 fprintf(f, "Describe\t");
314 pqTraceOutputByte1(f, message, cursor);
315 pqTraceOutputString(f, message, cursor, false);
316}

References fprintf, pqTraceOutputByte1(), and pqTraceOutputString().

Referenced by pqTraceOutputMessage().

◆ pqTraceOutput_ErrorResponse()

static void pqTraceOutput_ErrorResponse ( FILE f,
const char message,
int cursor,
bool  regress 
)
static

Definition at line 340 of file fe-trace.c.

341{
342 pqTraceOutputNR(f, "ErrorResponse", message, cursor, regress);
343}
static void pqTraceOutputNR(FILE *f, const char *type, const char *message, int *cursor, bool regress)
Definition fe-trace.c:320

References fb(), and pqTraceOutputNR().

Referenced by pqTraceOutputMessage().

◆ pqTraceOutput_Execute()

static void pqTraceOutput_Execute ( FILE f,
const char message,
int cursor,
bool  regress 
)
static

Definition at line 352 of file fe-trace.c.

353{
354 fprintf(f, "Execute\t");
355 pqTraceOutputString(f, message, cursor, false);
356 pqTraceOutputInt32(f, message, cursor, false);
357}

References fprintf, pqTraceOutputInt32(), and pqTraceOutputString().

Referenced by pqTraceOutputMessage().

◆ pqTraceOutput_FunctionCall()

static void pqTraceOutput_FunctionCall ( FILE f,
const char message,
int cursor,
bool  regress 
)
static

Definition at line 403 of file fe-trace.c.

404{
405 int nfields;
406 int nbytes;
407
408 fprintf(f, "FunctionCall\t");
409 pqTraceOutputInt32(f, message, cursor, regress);
410 nfields = pqTraceOutputInt16(f, message, cursor);
411
412 for (int i = 0; i < nfields; i++)
413 pqTraceOutputInt16(f, message, cursor);
414
415 nfields = pqTraceOutputInt16(f, message, cursor);
416
417 for (int i = 0; i < nfields; i++)
418 {
419 nbytes = pqTraceOutputInt32(f, message, cursor, false);
420 if (nbytes == -1)
421 continue;
422 pqTraceOutputNchar(f, nbytes, message, cursor, false);
423 }
424
425 pqTraceOutputInt16(f, message, cursor);
426}

References fb(), fprintf, i, pqTraceOutputInt16(), pqTraceOutputInt32(), and pqTraceOutputNchar().

Referenced by pqTraceOutputMessage().

◆ pqTraceOutput_FunctionCallResponse()

static void pqTraceOutput_FunctionCallResponse ( FILE f,
const char message,
int cursor 
)
static

Definition at line 594 of file fe-trace.c.

595{
596 int len;
597
598 fprintf(f, "FunctionCallResponse\t");
599 len = pqTraceOutputInt32(f, message, cursor, false);
600 if (len != -1)
601 pqTraceOutputNchar(f, len, message, cursor, false);
602}

References fprintf, len, pqTraceOutputInt32(), and pqTraceOutputNchar().

Referenced by pqTraceOutputMessage().

◆ pqTraceOutput_GSSResponse()

static void pqTraceOutput_GSSResponse ( FILE f,
const char message,
int cursor,
int  length,
bool  regress 
)
static

Definition at line 367 of file fe-trace.c.

369{
370 fprintf(f, "GSSResponse\t");
371 pqTraceOutputNchar(f, length - *cursor + 1, message, cursor, regress);
372}

References fb(), fprintf, and pqTraceOutputNchar().

Referenced by pqTraceOutputMessage().

◆ pqTraceOutput_NegotiateProtocolVersion()

static void pqTraceOutput_NegotiateProtocolVersion ( FILE f,
const char message,
int cursor 
)
static

Definition at line 580 of file fe-trace.c.

581{
582 int nparams;
583
584 fprintf(f, "NegotiateProtocolVersion\t");
585 pqTraceOutputInt32(f, message, cursor, false);
586 nparams = pqTraceOutputInt32(f, message, cursor, false);
587 for (int i = 0; i < nparams; i++)
588 {
589 pqTraceOutputString(f, message, cursor, false);
590 }
591}

References fprintf, i, pqTraceOutputInt32(), and pqTraceOutputString().

Referenced by pqTraceOutputMessage().

◆ pqTraceOutput_NoticeResponse()

static void pqTraceOutput_NoticeResponse ( FILE f,
const char message,
int cursor,
bool  regress 
)
static

Definition at line 346 of file fe-trace.c.

347{
348 pqTraceOutputNR(f, "NoticeResponse", message, cursor, regress);
349}

References fb(), and pqTraceOutputNR().

Referenced by pqTraceOutputMessage().

◆ pqTraceOutput_NotificationResponse()

static void pqTraceOutput_NotificationResponse ( FILE f,
const char message,
int cursor,
bool  regress 
)
static

Definition at line 231 of file fe-trace.c.

232{
233 fprintf(f, "NotificationResponse\t");
234 pqTraceOutputInt32(f, message, cursor, regress);
235 pqTraceOutputString(f, message, cursor, false);
236 pqTraceOutputString(f, message, cursor, false);
237}

References fb(), fprintf, pqTraceOutputInt32(), and pqTraceOutputString().

Referenced by pqTraceOutputMessage().

◆ pqTraceOutput_ParameterDescription()

static void pqTraceOutput_ParameterDescription ( FILE f,
const char message,
int cursor,
bool  regress 
)
static

Definition at line 548 of file fe-trace.c.

549{
550 int nfields;
551
552 fprintf(f, "ParameterDescription\t");
553 nfields = pqTraceOutputInt16(f, message, cursor);
554
555 for (int i = 0; i < nfields; i++)
556 pqTraceOutputInt32(f, message, cursor, regress);
557}

References fb(), fprintf, i, pqTraceOutputInt16(), and pqTraceOutputInt32().

Referenced by pqTraceOutputMessage().

◆ pqTraceOutput_ParameterStatus()

static void pqTraceOutput_ParameterStatus ( FILE f,
const char message,
int cursor 
)
static

Definition at line 540 of file fe-trace.c.

541{
542 fprintf(f, "ParameterStatus\t");
543 pqTraceOutputString(f, message, cursor, false);
544 pqTraceOutputString(f, message, cursor, false);
545}

References fprintf, and pqTraceOutputString().

Referenced by pqTraceOutputMessage().

◆ pqTraceOutput_Parse()

static void pqTraceOutput_Parse ( FILE f,
const char message,
int cursor,
bool  regress 
)
static

Definition at line 464 of file fe-trace.c.

465{
466 int nparams;
467
468 fprintf(f, "Parse\t");
469 pqTraceOutputString(f, message, cursor, false);
470 pqTraceOutputString(f, message, cursor, false);
471 nparams = pqTraceOutputInt16(f, message, cursor);
472
473 for (int i = 0; i < nparams; i++)
474 pqTraceOutputInt32(f, message, cursor, regress);
475}

References fb(), fprintf, i, pqTraceOutputInt16(), pqTraceOutputInt32(), and pqTraceOutputString().

Referenced by pqTraceOutputMessage().

◆ pqTraceOutput_PasswordMessage()

static void pqTraceOutput_PasswordMessage ( FILE f,
const char message,
int cursor 
)
static

Definition at line 375 of file fe-trace.c.

376{
377 fprintf(f, "PasswordMessage\t");
378 pqTraceOutputString(f, message, cursor, false);
379}

References fprintf, and pqTraceOutputString().

Referenced by pqTraceOutputMessage().

◆ pqTraceOutput_Query()

static void pqTraceOutput_Query ( FILE f,
const char message,
int cursor 
)
static

Definition at line 478 of file fe-trace.c.

479{
480 fprintf(f, "Query\t");
481 pqTraceOutputString(f, message, cursor, false);
482}

References fprintf, and pqTraceOutputString().

Referenced by pqTraceOutputMessage().

◆ pqTraceOutput_ReadyForQuery()

static void pqTraceOutput_ReadyForQuery ( FILE f,
const char message,
int cursor 
)
static

Definition at line 615 of file fe-trace.c.

616{
617 fprintf(f, "ReadyForQuery\t");
618 pqTraceOutputByte1(f, message, cursor);
619}

References fprintf, and pqTraceOutputByte1().

Referenced by pqTraceOutputMessage().

◆ pqTraceOutput_RowDescription()

static void pqTraceOutput_RowDescription ( FILE f,
const char message,
int cursor,
bool  regress 
)
static

Definition at line 560 of file fe-trace.c.

561{
562 int nfields;
563
564 fprintf(f, "RowDescription\t");
565 nfields = pqTraceOutputInt16(f, message, cursor);
566
567 for (int i = 0; i < nfields; i++)
568 {
569 pqTraceOutputString(f, message, cursor, false);
570 pqTraceOutputInt32(f, message, cursor, regress);
571 pqTraceOutputInt16(f, message, cursor);
572 pqTraceOutputInt32(f, message, cursor, regress);
573 pqTraceOutputInt16(f, message, cursor);
574 pqTraceOutputInt32(f, message, cursor, false);
575 pqTraceOutputInt16(f, message, cursor);
576 }
577}

References fb(), fprintf, i, pqTraceOutputInt16(), pqTraceOutputInt32(), and pqTraceOutputString().

Referenced by pqTraceOutputMessage().

◆ pqTraceOutput_SASLInitialResponse()

static void pqTraceOutput_SASLInitialResponse ( FILE f,
const char message,
int cursor,
bool  regress 
)
static

Definition at line 382 of file fe-trace.c.

384{
385 int initialResponse;
386
387 fprintf(f, "SASLInitialResponse\t");
388 pqTraceOutputString(f, message, cursor, false);
389 initialResponse = pqTraceOutputInt32(f, message, cursor, false);
390 if (initialResponse != -1)
392}

References fb(), fprintf, pqTraceOutputInt32(), pqTraceOutputNchar(), and pqTraceOutputString().

Referenced by pqTraceOutputMessage().

◆ pqTraceOutput_SASLResponse()

static void pqTraceOutput_SASLResponse ( FILE f,
const char message,
int cursor,
int  length,
bool  regress 
)
static

Definition at line 395 of file fe-trace.c.

397{
398 fprintf(f, "SASLResponse\t");
399 pqTraceOutputNchar(f, length - *cursor + 1, message, cursor, regress);
400}

References fb(), fprintf, and pqTraceOutputNchar().

Referenced by pqTraceOutputMessage().

◆ pqTraceOutputByte1()

static void pqTraceOutputByte1 ( FILE pfdebug,
const char data,
int cursor 
)
static

Definition at line 107 of file fe-trace.c.

108{
109 const char *v = data + *cursor;
110
111 /*
112 * Show non-printable data in hex format, including the terminating \0
113 * that completes ErrorResponse and NoticeResponse messages.
114 */
115 if (!isprint((unsigned char) *v))
116 fprintf(pfdebug, " \\x%02x", (unsigned char) *v);
117 else
118 fprintf(pfdebug, " %c", *v);
119 *cursor += 1;
120}
const void * data

References data, fb(), and fprintf.

Referenced by pqTraceOutput_Close(), pqTraceOutput_CopyBothResponse(), pqTraceOutput_CopyInResponse(), pqTraceOutput_CopyOutResponse(), pqTraceOutput_Describe(), pqTraceOutput_ReadyForQuery(), and pqTraceOutputNR().

◆ pqTraceOutputCharResponse()

void pqTraceOutputCharResponse ( PGconn conn,
const char responseType,
char  response 
)

Definition at line 918 of file fe-trace.c.

920{
922 {
923 char timestr[128];
924
926 fprintf(conn->Pfdebug, "%s\t", timestr);
927 }
928
929 fprintf(conn->Pfdebug, "B\t1\t%s\t %c\n", responseType, response);
930}
static void pqTraceFormatTimestamp(char *timestr, size_t ts_len)
Definition fe-trace.c:80
#define PQTRACE_SUPPRESS_TIMESTAMPS
Definition libpq-fe.h:495

References conn, fb(), fprintf, pg_conn::Pfdebug, PQTRACE_SUPPRESS_TIMESTAMPS, pqTraceFormatTimestamp(), and pg_conn::traceFlags.

Referenced by PQconnectPoll().

◆ pqTraceOutputInt16()

static int pqTraceOutputInt16 ( FILE pfdebug,
const char data,
int cursor 
)
static

◆ pqTraceOutputInt32()

◆ pqTraceOutputMessage()

void pqTraceOutputMessage ( PGconn conn,
const char message,
bool  toServer 
)

Definition at line 625 of file fe-trace.c.

626{
627 char id;
628 int length;
629 char *prefix = toServer ? "F" : "B";
630 int logCursor = 0;
631 bool regress;
632
634 {
635 char timestr[128];
636
638 fprintf(conn->Pfdebug, "%s\t", timestr);
639 }
641
642 id = message[logCursor++];
643
644 memcpy(&length, message + logCursor, 4);
645 length = (int) pg_ntoh32(length);
646 logCursor += 4;
647
648 /*
649 * In regress mode, suppress the length of ErrorResponse and
650 * NoticeResponse. The F (file name), L (line number) and R (routine
651 * name) fields can change as server code is modified, and if their
652 * lengths differ from the originals, that would break tests.
653 */
654 if (regress && !toServer && (id == PqMsg_ErrorResponse || id == PqMsg_NoticeResponse))
655 fprintf(conn->Pfdebug, "%s\tNN\t", prefix);
656 else
657 fprintf(conn->Pfdebug, "%s\t%d\t", prefix, length);
658
659 switch (id)
660 {
662 fprintf(conn->Pfdebug, "ParseComplete");
663 /* No message content */
664 break;
666 fprintf(conn->Pfdebug, "BindComplete");
667 /* No message content */
668 break;
670 fprintf(conn->Pfdebug, "CloseComplete");
671 /* No message content */
672 break;
675 break;
676 case PqMsg_Bind:
678 break;
679 case PqMsg_CopyDone:
680 fprintf(conn->Pfdebug, "CopyDone");
681 /* No message content */
682 break;
684 /* Close(F) and CommandComplete(B) use the same identifier. */
686 if (toServer)
688 else
690 break;
691 case PqMsg_CopyData:
693 length, regress);
694 break;
695 case PqMsg_Describe:
696 /* Describe(F) and DataRow(B) use the same identifier. */
698 if (toServer)
700 else
702 break;
703 case PqMsg_Execute:
704 /* Execute(F) and ErrorResponse(B) use the same identifier. */
706 if (toServer)
708 else
710 break;
711 case PqMsg_CopyFail:
713 break;
718
719 /*
720 * These messages share a common type byte, so we discriminate by
721 * having the code store the auth type separately.
722 */
724 {
727 &logCursor, length, regress);
728 break;
731 &logCursor);
732 break;
736 break;
739 &logCursor, length, regress);
740 break;
741 default:
742 fprintf(conn->Pfdebug, "UnknownAuthenticationResponse");
743 break;
744 }
746 break;
749 break;
752 break;
753 case PqMsg_Flush:
754 /* Flush(F) and CopyOutResponse(B) use the same identifier */
756 if (toServer)
757 fprintf(conn->Pfdebug, "Flush"); /* no message content */
758 else
760 break;
762 fprintf(conn->Pfdebug, "EmptyQueryResponse");
763 /* No message content */
764 break;
767 length, regress);
768 break;
769 case PqMsg_NoData:
770 fprintf(conn->Pfdebug, "NoData");
771 /* No message content */
772 break;
775 break;
776 case PqMsg_Parse:
778 break;
779 case PqMsg_Query:
781 break;
784 length, regress);
785 break;
787 fprintf(conn->Pfdebug, "PortalSuspended");
788 /* No message content */
789 break;
790 case PqMsg_Sync:
791 /* ParameterStatus(B) and Sync(F) use the same identifier */
793 if (toServer)
794 fprintf(conn->Pfdebug, "Sync"); /* no message content */
795 else
797 break;
800 break;
803 break;
806 break;
809 break;
812 break;
813 case PqMsg_Terminate:
814 fprintf(conn->Pfdebug, "Terminate");
815 /* No message content */
816 break;
819 break;
820 default:
821 fprintf(conn->Pfdebug, "Unknown message: %02x", id);
822 break;
823 }
824
825 fputc('\n', conn->Pfdebug);
826
827 /*
828 * Verify the printing routine did it right. Note that the one-byte
829 * message identifier is not included in the length, but our cursor does
830 * include it.
831 */
832 if (logCursor - 1 != length)
834 "mismatched message length: consumed %d, expected %d\n",
835 logCursor - 1, length);
836}
#define Assert(condition)
Definition c.h:1002
static void pqTraceOutput_RowDescription(FILE *f, const char *message, int *cursor, bool regress)
Definition fe-trace.c:560
static void pqTraceOutput_GSSResponse(FILE *f, const char *message, int *cursor, int length, bool regress)
Definition fe-trace.c:367
static void pqTraceOutput_FunctionCall(FILE *f, const char *message, int *cursor, bool regress)
Definition fe-trace.c:403
static void pqTraceOutput_CopyInResponse(FILE *f, const char *message, int *cursor)
Definition fe-trace.c:429
static void pqTraceOutput_Authentication(FILE *f, const char *message, int *cursor, int length, bool suppress)
Definition fe-trace.c:485
static void pqTraceOutput_Parse(FILE *f, const char *message, int *cursor, bool regress)
Definition fe-trace.c:464
static void pqTraceOutput_NoticeResponse(FILE *f, const char *message, int *cursor, bool regress)
Definition fe-trace.c:346
static void pqTraceOutput_ParameterDescription(FILE *f, const char *message, int *cursor, bool regress)
Definition fe-trace.c:548
static void pqTraceOutput_DataRow(FILE *f, const char *message, int *cursor)
Definition fe-trace.c:293
static void pqTraceOutput_SASLResponse(FILE *f, const char *message, int *cursor, int length, bool regress)
Definition fe-trace.c:395
static void pqTraceOutput_Query(FILE *f, const char *message, int *cursor)
Definition fe-trace.c:478
static void pqTraceOutput_CopyData(FILE *f, const char *message, int *cursor, int length, bool suppress)
Definition fe-trace.c:285
static void pqTraceOutput_SASLInitialResponse(FILE *f, const char *message, int *cursor, bool regress)
Definition fe-trace.c:382
static void pqTraceOutput_NegotiateProtocolVersion(FILE *f, const char *message, int *cursor)
Definition fe-trace.c:580
static void pqTraceOutput_CopyBothResponse(FILE *f, const char *message, int *cursor, int length)
Definition fe-trace.c:605
static void pqTraceOutput_Bind(FILE *f, const char *message, int *cursor)
Definition fe-trace.c:240
static void pqTraceOutput_ErrorResponse(FILE *f, const char *message, int *cursor, bool regress)
Definition fe-trace.c:340
static void pqTraceOutput_Close(FILE *f, const char *message, int *cursor)
Definition fe-trace.c:270
static void pqTraceOutput_Describe(FILE *f, const char *message, int *cursor)
Definition fe-trace.c:311
static void pqTraceOutput_NotificationResponse(FILE *f, const char *message, int *cursor, bool regress)
Definition fe-trace.c:231
static void pqTraceOutput_CommandComplete(FILE *f, const char *message, int *cursor)
Definition fe-trace.c:278
static void pqTraceOutput_BackendKeyData(FILE *f, const char *message, int *cursor, int length, bool regress)
Definition fe-trace.c:455
static void pqTraceOutput_ParameterStatus(FILE *f, const char *message, int *cursor)
Definition fe-trace.c:540
static void pqTraceOutput_Execute(FILE *f, const char *message, int *cursor, bool regress)
Definition fe-trace.c:352
static void pqTraceOutput_CopyOutResponse(FILE *f, const char *message, int *cursor)
Definition fe-trace.c:442
static void pqTraceOutput_ReadyForQuery(FILE *f, const char *message, int *cursor)
Definition fe-trace.c:615
static void pqTraceOutput_CopyFail(FILE *f, const char *message, int *cursor)
Definition fe-trace.c:360
static void pqTraceOutput_PasswordMessage(FILE *f, const char *message, int *cursor)
Definition fe-trace.c:375
static void pqTraceOutput_FunctionCallResponse(FILE *f, const char *message, int *cursor)
Definition fe-trace.c:594
#define PQTRACE_REGRESS_MODE
Definition libpq-fe.h:497
#define AUTH_RESPONSE_PASSWORD
Definition libpq-int.h:338
#define AUTH_RESPONSE_SASL
Definition libpq-int.h:340
#define AUTH_RESPONSE_SASL_INITIAL
Definition libpq-int.h:339
#define AUTH_RESPONSE_GSS
Definition libpq-int.h:337
#define PqMsg_CloseComplete
Definition protocol.h:40
#define PqMsg_CopyDone
Definition protocol.h:64
#define PqMsg_NotificationResponse
Definition protocol.h:41
#define PqMsg_BindComplete
Definition protocol.h:39
#define PqMsg_CopyData
Definition protocol.h:65
#define PqMsg_ParameterDescription
Definition protocol.h:58
#define PqMsg_FunctionCall
Definition protocol.h:23
#define PqMsg_GSSResponse
Definition protocol.h:30
#define PqMsg_SASLResponse
Definition protocol.h:33
#define PqMsg_Describe
Definition protocol.h:21
#define PqMsg_FunctionCallResponse
Definition protocol.h:53
#define PqMsg_SASLInitialResponse
Definition protocol.h:32
#define PqMsg_ReadyForQuery
Definition protocol.h:55
#define PqMsg_AuthenticationRequest
Definition protocol.h:50
#define PqMsg_CopyInResponse
Definition protocol.h:45
#define PqMsg_EmptyQueryResponse
Definition protocol.h:47
#define PqMsg_RowDescription
Definition protocol.h:52
#define PqMsg_CopyBothResponse
Definition protocol.h:54
#define PqMsg_ParameterStatus
Definition protocol.h:51
#define PqMsg_NoData
Definition protocol.h:56
#define PqMsg_NegotiateProtocolVersion
Definition protocol.h:59
#define PqMsg_PortalSuspended
Definition protocol.h:57
#define PqMsg_Parse
Definition protocol.h:25
#define PqMsg_Bind
Definition protocol.h:19
#define PqMsg_PasswordMessage
Definition protocol.h:31
#define PqMsg_Sync
Definition protocol.h:27
#define PqMsg_CopyFail
Definition protocol.h:29
#define PqMsg_Flush
Definition protocol.h:24
#define PqMsg_BackendKeyData
Definition protocol.h:48
#define PqMsg_CommandComplete
Definition protocol.h:42
#define PqMsg_Query
Definition protocol.h:26
#define PqMsg_ErrorResponse
Definition protocol.h:44
#define PqMsg_DataRow
Definition protocol.h:43
#define PqMsg_NoticeResponse
Definition protocol.h:49
#define PqMsg_Terminate
Definition protocol.h:28
#define PqMsg_Execute
Definition protocol.h:22
#define PqMsg_Close
Definition protocol.h:20
#define PqMsg_CopyOutResponse
Definition protocol.h:46
#define PqMsg_ParseComplete
Definition protocol.h:38
char current_auth_response
Definition libpq-int.h:526

References Assert, AUTH_RESPONSE_GSS, AUTH_RESPONSE_PASSWORD, AUTH_RESPONSE_SASL, AUTH_RESPONSE_SASL_INITIAL, conn, pg_conn::current_auth_response, fb(), fprintf, memcpy(), pg_conn::Pfdebug, pg_ntoh32, PqMsg_AuthenticationRequest, PqMsg_BackendKeyData, PqMsg_Bind, PqMsg_BindComplete, PqMsg_Close, PqMsg_CloseComplete, PqMsg_CommandComplete, PqMsg_CopyBothResponse, PqMsg_CopyData, PqMsg_CopyDone, PqMsg_CopyFail, PqMsg_CopyInResponse, PqMsg_CopyOutResponse, PqMsg_DataRow, PqMsg_Describe, PqMsg_EmptyQueryResponse, PqMsg_ErrorResponse, PqMsg_Execute, PqMsg_Flush, PqMsg_FunctionCall, PqMsg_FunctionCallResponse, PqMsg_GSSResponse, PqMsg_NegotiateProtocolVersion, PqMsg_NoData, PqMsg_NoticeResponse, PqMsg_NotificationResponse, PqMsg_ParameterDescription, PqMsg_ParameterStatus, PqMsg_Parse, PqMsg_ParseComplete, PqMsg_PasswordMessage, PqMsg_PortalSuspended, PqMsg_Query, PqMsg_ReadyForQuery, PqMsg_RowDescription, PqMsg_SASLInitialResponse, PqMsg_SASLResponse, PqMsg_Sync, PqMsg_Terminate, PQTRACE_REGRESS_MODE, PQTRACE_SUPPRESS_TIMESTAMPS, pqTraceFormatTimestamp(), pqTraceOutput_Authentication(), pqTraceOutput_BackendKeyData(), pqTraceOutput_Bind(), pqTraceOutput_Close(), pqTraceOutput_CommandComplete(), pqTraceOutput_CopyBothResponse(), pqTraceOutput_CopyData(), pqTraceOutput_CopyFail(), pqTraceOutput_CopyInResponse(), pqTraceOutput_CopyOutResponse(), pqTraceOutput_DataRow(), pqTraceOutput_Describe(), pqTraceOutput_ErrorResponse(), pqTraceOutput_Execute(), pqTraceOutput_FunctionCall(), pqTraceOutput_FunctionCallResponse(), pqTraceOutput_GSSResponse(), pqTraceOutput_NegotiateProtocolVersion(), pqTraceOutput_NoticeResponse(), pqTraceOutput_NotificationResponse(), pqTraceOutput_ParameterDescription(), pqTraceOutput_ParameterStatus(), pqTraceOutput_Parse(), pqTraceOutput_PasswordMessage(), pqTraceOutput_Query(), pqTraceOutput_ReadyForQuery(), pqTraceOutput_RowDescription(), pqTraceOutput_SASLInitialResponse(), pqTraceOutput_SASLResponse(), and pg_conn::traceFlags.

Referenced by pg_password_sendauth(), pg_SASL_continue(), pg_SASL_init(), pqParseDone(), and pqPutMsgEnd().

◆ pqTraceOutputNchar()

static void pqTraceOutputNchar ( FILE pfdebug,
int  len,
const char data,
int cursor,
bool  suppress 
)
static

Definition at line 193 of file fe-trace.c.

194{
195 int i,
196 next; /* first char not yet printed */
197 const char *v = data + *cursor;
198
199 if (suppress)
200 {
201 fprintf(pfdebug, " 'BBBB'");
202 *cursor += len;
203 return;
204 }
205
206 fprintf(pfdebug, " \'");
207
208 for (next = i = 0; i < len; ++i)
209 {
210 if (isprint((unsigned char) v[i]))
211 continue;
212 else
213 {
214 fwrite(v + next, 1, i - next, pfdebug);
215 fprintf(pfdebug, "\\x%02x", (unsigned char) v[i]);
216 next = i + 1;
217 }
218 }
219 if (next < len)
220 fwrite(v + next, 1, len - next, pfdebug);
221
222 fprintf(pfdebug, "\'");
223 *cursor += len;
224}
static int32 next
Definition blutils.c:225

References data, fb(), fprintf, i, len, and next.

Referenced by pqTraceOutput_Authentication(), pqTraceOutput_BackendKeyData(), pqTraceOutput_Bind(), pqTraceOutput_CopyData(), pqTraceOutput_DataRow(), pqTraceOutput_FunctionCall(), pqTraceOutput_FunctionCallResponse(), pqTraceOutput_GSSResponse(), pqTraceOutput_SASLInitialResponse(), pqTraceOutput_SASLResponse(), and pqTraceOutputNoTypeByteMessage().

◆ pqTraceOutputNoTypeByteMessage()

void pqTraceOutputNoTypeByteMessage ( PGconn conn,
const char message 
)

Definition at line 843 of file fe-trace.c.

844{
845 int length;
846 int version;
847 bool regress;
848 int logCursor = 0;
849
851
853 {
854 char timestr[128];
855
857 fprintf(conn->Pfdebug, "%s\t", timestr);
858 }
859
860 memcpy(&length, message + logCursor, 4);
861 length = (int) pg_ntoh32(length);
862 logCursor += 4;
863
864 fprintf(conn->Pfdebug, "F\t%d\t", length);
865
866 if (length < 8)
867 {
868 fprintf(conn->Pfdebug, "Unknown message\n");
869 return;
870 }
871
872 memcpy(&version, message + logCursor, 4);
873 version = (int) pg_ntoh32(version);
874
875 if (version == CANCEL_REQUEST_CODE && length >= 16)
876 {
877 fprintf(conn->Pfdebug, "CancelRequest\t");
881 pqTraceOutputNchar(conn->Pfdebug, length - logCursor, message,
883 }
884 else if (version == NEGOTIATE_SSL_CODE)
885 {
886 fprintf(conn->Pfdebug, "SSLRequest\t");
889 }
890 else if (version == NEGOTIATE_GSS_CODE)
891 {
892 fprintf(conn->Pfdebug, "GSSENCRequest\t");
895 }
896 else
897 {
898 fprintf(conn->Pfdebug, "StartupMessage\t");
901 while (message[logCursor] != '\0')
902 {
903 /* XXX should we suppress anything in regress mode? */
904 pqTraceOutputString(conn->Pfdebug, message, &logCursor, false);
905 pqTraceOutputString(conn->Pfdebug, message, &logCursor, false);
906 }
907 }
908
909 fputc('\n', conn->Pfdebug);
910}
#define CANCEL_REQUEST_CODE
Definition pqcomm.h:122
#define NEGOTIATE_GSS_CODE
Definition pqcomm.h:129
#define NEGOTIATE_SSL_CODE
Definition pqcomm.h:128

References CANCEL_REQUEST_CODE, conn, fb(), fprintf, memcpy(), NEGOTIATE_GSS_CODE, NEGOTIATE_SSL_CODE, pg_conn::Pfdebug, pg_ntoh32, PQTRACE_REGRESS_MODE, PQTRACE_SUPPRESS_TIMESTAMPS, pqTraceFormatTimestamp(), pqTraceOutputInt16(), pqTraceOutputInt32(), pqTraceOutputNchar(), pqTraceOutputString(), and pg_conn::traceFlags.

Referenced by pqPutMsgEnd().

◆ pqTraceOutputNR()

static void pqTraceOutputNR ( FILE f,
const char type,
const char message,
int cursor,
bool  regress 
)
static

Definition at line 320 of file fe-trace.c.

322{
323 fprintf(f, "%s\t", type);
324 for (;;)
325 {
326 char field;
327 bool suppress;
328
329 pqTraceOutputByte1(f, message, cursor);
330 field = message[*cursor - 1];
331 if (field == '\0')
332 break;
333
334 suppress = regress && (field == 'L' || field == 'F' || field == 'R');
335 pqTraceOutputString(f, message, cursor, suppress);
336 }
337}
const char * type

References fb(), fprintf, pqTraceOutputByte1(), pqTraceOutputString(), and type.

Referenced by pqTraceOutput_ErrorResponse(), and pqTraceOutput_NoticeResponse().

◆ pqTraceOutputString()

static void pqTraceOutputString ( FILE pfdebug,
const char data,
int cursor,
bool  suppress 
)
static

Definition at line 166 of file fe-trace.c.

167{
168 int len;
169
170 if (suppress)
171 {
172 fprintf(pfdebug, " \"SSSS\"");
173 *cursor += strlen(data + *cursor) + 1;
174 }
175 else
176 {
177 len = fprintf(pfdebug, " \"%s\"", data + *cursor);
178
179 /*
180 * This is a null-terminated string. So add 1 after subtracting 3
181 * which is the double quotes and space length from len.
182 */
183 *cursor += (len - 3 + 1);
184 }
185}

References data, fb(), fprintf, and len.

Referenced by pqTraceOutput_Authentication(), pqTraceOutput_Bind(), pqTraceOutput_Close(), pqTraceOutput_CommandComplete(), pqTraceOutput_CopyFail(), pqTraceOutput_Describe(), pqTraceOutput_Execute(), pqTraceOutput_NegotiateProtocolVersion(), pqTraceOutput_NotificationResponse(), pqTraceOutput_ParameterStatus(), pqTraceOutput_Parse(), pqTraceOutput_PasswordMessage(), pqTraceOutput_Query(), pqTraceOutput_RowDescription(), pqTraceOutput_SASLInitialResponse(), pqTraceOutputNoTypeByteMessage(), and pqTraceOutputNR().

◆ PQuntrace()

void PQuntrace ( PGconn conn)

Definition at line 49 of file fe-trace.c.

50{
51 if (conn == NULL)
52 return;
53 if (conn->Pfdebug)
54 {
56 conn->Pfdebug = NULL;
57 }
58
59 conn->traceFlags = 0;
60}

References conn, fb(), pg_conn::Pfdebug, and pg_conn::traceFlags.

Referenced by PQtrace().