@ -215,9 +215,8 @@ pqTraceOutputNchar(FILE *pfdebug, int len, const char *data, int *cursor)
* Output functions by protocol message type
* Output functions by protocol message type
*/
*/
/* NotificationResponse */
static void
static void
pqTraceOutputA ( FILE * f , const char * message , int * cursor , bool regress )
pqTraceOutput_NotificationResponse ( FILE * f , const char * message , int * cursor , bool regress )
{
{
fprintf ( f , " NotificationResponse \t " ) ;
fprintf ( f , " NotificationResponse \t " ) ;
pqTraceOutputInt32 ( f , message , cursor , regress ) ;
pqTraceOutputInt32 ( f , message , cursor , regress ) ;
@ -225,9 +224,8 @@ pqTraceOutputA(FILE *f, const char *message, int *cursor, bool regress)
pqTraceOutputString ( f , message , cursor , false ) ;
pqTraceOutputString ( f , message , cursor , false ) ;
}
}
/* Bind */
static void
static void
pqTraceOutputB ( FILE * f , const char * message , int * cursor )
pqTraceOutput_ Bind ( FILE * f , const char * message , int * cursor )
{
{
int nparams ;
int nparams ;
@ -256,52 +254,48 @@ pqTraceOutputB(FILE *f, const char *message, int *cursor)
pqTraceOutputInt16 ( f , message , cursor ) ;
pqTraceOutputInt16 ( f , message , cursor ) ;
}
}
/* Close(F) or CommandComplete(B) */
static void
static void
pqTraceOutputC ( FILE * f , bool toServer , const char * message , int * cursor )
pqTraceOutput_ Close ( FILE * f , const char * message , int * cursor )
{
{
if ( toServer )
fprintf ( f , " Close \t " ) ;
{
pqTraceOutputByte1 ( f , message , cursor ) ;
fprintf ( f , " Close \t " ) ;
pqTraceOutputString ( f , message , cursor , false ) ;
pqTraceOutputByte1 ( f , message , cursor ) ;
}
pqTraceOutputString ( f , message , cursor , false ) ;
}
static void
else
pqTraceOutput_CommandComplete ( FILE * f , const char * message , int * cursor )
{
{
fprintf ( f , " CommandComplete \t " ) ;
fprintf ( f , " CommandComplete \t " ) ;
pqTraceOutputString ( f , message , cursor , false ) ;
pqTraceOutputString ( f , message , cursor , false ) ;
}
}
}
/* Describe(F) or DataRow(B) */
static void
static void
pqTraceOutputD ( FILE * f , bool toServer , const char * message , int * cursor )
pqTraceOutput_ DataRow ( FILE * f , const char * message , int * cursor )
{
{
if ( toServer )
int nfields ;
int len ;
int i ;
fprintf ( f , " DataRow \t " ) ;
nfields = pqTraceOutputInt16 ( f , message , cursor ) ;
for ( i = 0 ; i < nfields ; i + + )
{
{
fprintf ( f , " Describe \t " ) ;
len = pqTraceOutputInt32 ( f , message , cursor , false ) ;
pqTraceOutputByte1 ( f , message , cursor ) ;
if ( len = = - 1 )
pqTraceOutputString ( f , message , cursor , false ) ;
continue ;
pqTraceOutputNchar ( f , len , message , cursor ) ;
}
}
else
}
{
int nfields ;
int len ;
int i ;
fprintf ( f , " DataRow \t " ) ;
static void
nfields = pqTraceOutputInt16 ( f , message , cursor ) ;
pqTraceOutput_Describe ( FILE * f , const char * message , int * cursor )
for ( i = 0 ; i < nfields ; i + + )
{
{
fprintf ( f , " Describe \t " ) ;
len = pqTraceOutputInt32 ( f , message , cursor , false ) ;
pqTraceOutputByte1 ( f , message , cursor ) ;
if ( len = = - 1 )
pqTraceOutputString ( f , message , cursor , false ) ;
continue ;
pqTraceOutputNchar ( f , len , message , cursor ) ;
}
}
}
}
/* NoticeResponse / ErrorResponse */
/* shared code NoticeResponse / ErrorResponse */
static void
static void
pqTraceOutputNR ( FILE * f , const char * type , const char * message , int * cursor ,
pqTraceOutputNR ( FILE * f , const char * type , const char * message , int * cursor ,
bool regress )
bool regress )
@ -322,31 +316,35 @@ pqTraceOutputNR(FILE *f, const char *type, const char *message, int *cursor,
}
}
}
}
/* Execute(F) or ErrorResponse(B) */
static void
static void
pqTraceOutputE ( FILE * f , bool toServer , const char * message , int * cursor , bool regress )
pqTraceOutput_ ErrorResponse ( FILE * f , const char * message , int * cursor , bool regress )
{
{
if ( toServer )
pqTraceOutputNR ( f , " ErrorResponse " , message , cursor , regress ) ;
{
}
fprintf ( f , " Execute \t " ) ;
pqTraceOutputString ( f , message , cursor , false ) ;
static void
pqTraceOutputInt32 ( f , message , cursor , false ) ;
pqTraceOutput_NoticeResponse ( FILE * f , const char * message , int * cursor , bool regress )
}
{
else
pqTraceOutputNR ( f , " NoticeResponse " , message , cursor , regress ) ;
pqTraceOutputNR ( f , " ErrorResponse " , message , cursor , regress ) ;
}
}
/* CopyFail */
static void
static void
pqTraceOutputf ( FILE * f , const char * message , int * cursor )
pqTraceOutput_Execute ( FILE * f , const char * message , int * cursor , bool regress )
{
fprintf ( f , " Execute \t " ) ;
pqTraceOutputString ( f , message , cursor , false ) ;
pqTraceOutputInt32 ( f , message , cursor , false ) ;
}
static void
pqTraceOutput_CopyFail ( FILE * f , const char * message , int * cursor )
{
{
fprintf ( f , " CopyFail \t " ) ;
fprintf ( f , " CopyFail \t " ) ;
pqTraceOutputString ( f , message , cursor , false ) ;
pqTraceOutputString ( f , message , cursor , false ) ;
}
}
/* FunctionCall */
static void
static void
pqTraceOutputF ( FILE * f , const char * message , int * cursor , bool regress )
pqTraceOutput_ FunctionCall ( FILE * f , const char * message , int * cursor , bool regress )
{
{
int nfields ;
int nfields ;
int nbytes ;
int nbytes ;
@ -371,9 +369,8 @@ pqTraceOutputF(FILE *f, const char *message, int *cursor, bool regress)
pqTraceOutputInt16 ( f , message , cursor ) ;
pqTraceOutputInt16 ( f , message , cursor ) ;
}
}
/* CopyInResponse */
static void
static void
pqTraceOutputG ( FILE * f , const char * message , int * cursor )
pqTraceOutput_CopyInResponse ( FILE * f , const char * message , int * cursor )
{
{
int nfields ;
int nfields ;
@ -385,9 +382,8 @@ pqTraceOutputG(FILE *f, const char *message, int *cursor)
pqTraceOutputInt16 ( f , message , cursor ) ;
pqTraceOutputInt16 ( f , message , cursor ) ;
}
}
/* CopyOutResponse */
static void
static void
pqTraceOutputH ( FILE * f , const char * message , int * cursor )
pqTraceOutput_CopyOutResponse ( FILE * f , const char * message , int * cursor )
{
{
int nfields ;
int nfields ;
@ -399,18 +395,16 @@ pqTraceOutputH(FILE *f, const char *message, int *cursor)
pqTraceOutputInt16 ( f , message , cursor ) ;
pqTraceOutputInt16 ( f , message , cursor ) ;
}
}
/* BackendKeyData */
static void
static void
pqTraceOutputK ( FILE * f , const char * message , int * cursor , bool regress )
pqTraceOutput_Backend KeyData ( FILE * f , const char * message , int * cursor , bool regress )
{
{
fprintf ( f , " BackendKeyData \t " ) ;
fprintf ( f , " BackendKeyData \t " ) ;
pqTraceOutputInt32 ( f , message , cursor , regress ) ;
pqTraceOutputInt32 ( f , message , cursor , regress ) ;
pqTraceOutputInt32 ( f , message , cursor , regress ) ;
pqTraceOutputInt32 ( f , message , cursor , regress ) ;
}
}
/* Parse */
static void
static void
pqTraceOutputP ( FILE * f , const char * message , int * cursor , bool regress )
pqTraceOutput_ Parse ( FILE * f , const char * message , int * cursor , bool regress )
{
{
int nparams ;
int nparams ;
@ -423,34 +417,30 @@ pqTraceOutputP(FILE *f, const char *message, int *cursor, bool regress)
pqTraceOutputInt32 ( f , message , cursor , regress ) ;
pqTraceOutputInt32 ( f , message , cursor , regress ) ;
}
}
/* Query */
static void
static void
pqTraceOutputQ ( FILE * f , const char * message , int * cursor )
pqTraceOutput_ Query ( FILE * f , const char * message , int * cursor )
{
{
fprintf ( f , " Query \t " ) ;
fprintf ( f , " Query \t " ) ;
pqTraceOutputString ( f , message , cursor , false ) ;
pqTraceOutputString ( f , message , cursor , false ) ;
}
}
/* Authentication */
static void
static void
pqTraceOutputR ( FILE * f , const char * message , int * cursor )
pqTraceOutput_Authentication ( FILE * f , const char * message , int * cursor )
{
{
fprintf ( f , " Authentication \t " ) ;
fprintf ( f , " Authentication \t " ) ;
pqTraceOutputInt32 ( f , message , cursor , false ) ;
pqTraceOutputInt32 ( f , message , cursor , false ) ;
}
}
/* ParameterStatus */
static void
static void
pqTraceOutputS ( FILE * f , const char * message , int * cursor )
pqTraceOutput_Parameter Status ( FILE * f , const char * message , int * cursor )
{
{
fprintf ( f , " ParameterStatus \t " ) ;
fprintf ( f , " ParameterStatus \t " ) ;
pqTraceOutputString ( f , message , cursor , false ) ;
pqTraceOutputString ( f , message , cursor , false ) ;
pqTraceOutputString ( f , message , cursor , false ) ;
pqTraceOutputString ( f , message , cursor , false ) ;
}
}
/* ParameterDescription */
static void
static void
pqTraceOutputt ( FILE * f , const char * message , int * cursor , bool regress )
pqTraceOutput_Parame terDescription ( FILE * f , const char * message , int * cursor , bool regress )
{
{
int nfields ;
int nfields ;
@ -461,9 +451,8 @@ pqTraceOutputt(FILE *f, const char *message, int *cursor, bool regress)
pqTraceOutputInt32 ( f , message , cursor , regress ) ;
pqTraceOutputInt32 ( f , message , cursor , regress ) ;
}
}
/* RowDescription */
static void
static void
pqTraceOutputT ( FILE * f , const char * message , int * cursor , bool regress )
pqTraceOutput_RowDescription ( FILE * f , const char * message , int * cursor , bool regress )
{
{
int nfields ;
int nfields ;
@ -482,18 +471,16 @@ pqTraceOutputT(FILE *f, const char *message, int *cursor, bool regress)
}
}
}
}
/* NegotiateProtocolVersion */
static void
static void
pqTraceOutputv ( FILE * f , const char * message , int * cursor )
pqTraceOutput_NegotiateProtocolVersion ( FILE * f , const char * message , int * cursor )
{
{
fprintf ( f , " NegotiateProtocolVersion \t " ) ;
fprintf ( f , " NegotiateProtocolVersion \t " ) ;
pqTraceOutputInt32 ( f , message , cursor , false ) ;
pqTraceOutputInt32 ( f , message , cursor , false ) ;
pqTraceOutputInt32 ( f , message , cursor , false ) ;
pqTraceOutputInt32 ( f , message , cursor , false ) ;
}
}
/* FunctionCallResponse */
static void
static void
pqTraceOutputV ( FILE * f , const char * message , int * cursor )
pqTraceOutput_FunctionCallResponse ( FILE * f , const char * message , int * cursor )
{
{
int len ;
int len ;
@ -503,9 +490,8 @@ pqTraceOutputV(FILE *f, const char *message, int *cursor)
pqTraceOutputNchar ( f , len , message , cursor ) ;
pqTraceOutputNchar ( f , len , message , cursor ) ;
}
}
/* CopyBothResponse */
static void
static void
pqTraceOutputW ( FILE * f , const char * message , int * cursor , int length )
pqTraceOutput_CopyBothResponse ( FILE * f , const char * message , int * cursor , int length )
{
{
fprintf ( f , " CopyBothResponse \t " ) ;
fprintf ( f , " CopyBothResponse \t " ) ;
pqTraceOutputByte1 ( f , message , cursor ) ;
pqTraceOutputByte1 ( f , message , cursor ) ;
@ -514,9 +500,8 @@ pqTraceOutputW(FILE *f, const char *message, int *cursor, int length)
pqTraceOutputInt16 ( f , message , cursor ) ;
pqTraceOutputInt16 ( f , message , cursor ) ;
}
}
/* ReadyForQuery */
static void
static void
pqTraceOutputZ ( FILE * f , const char * message , int * cursor )
pqTraceOutput_ReadyForQuery ( FILE * f , const char * message , int * cursor )
{
{
fprintf ( f , " ReadyForQuery \t " ) ;
fprintf ( f , " ReadyForQuery \t " ) ;
pqTraceOutputByte1 ( f , message , cursor ) ;
pqTraceOutputByte1 ( f , message , cursor ) ;
@ -555,7 +540,7 @@ pqTraceOutputMessage(PGconn *conn, const char *message, bool toServer)
* name ) fields can change as server code is modified , and if their
* name ) fields can change as server code is modified , and if their
* lengths differ from the originals , that would break tests .
* lengths differ from the originals , that would break tests .
*/
*/
if ( regress & & ! toServer & & ( id = = ' E ' | | id = = ' N ' ) )
if ( regress & & ! toServer & & ( id = = PqMsg_ErrorResponse | | id = = PqMsg_NoticeResponse ) )
fprintf ( conn - > Pfdebug , " %s \t NN \t " , prefix ) ;
fprintf ( conn - > Pfdebug , " %s \t NN \t " , prefix ) ;
else
else
fprintf ( conn - > Pfdebug , " %s \t %d \t " , prefix , length ) ;
fprintf ( conn - > Pfdebug , " %s \t %d \t " , prefix , length ) ;
@ -575,10 +560,10 @@ pqTraceOutputMessage(PGconn *conn, const char *message, bool toServer)
/* No message content */
/* No message content */
break ;
break ;
case PqMsg_NotificationResponse :
case PqMsg_NotificationResponse :
pqTraceOutputA ( conn - > Pfdebug , message , & logCursor , regress ) ;
pqTraceOutput_NotificationResponse ( conn - > Pfdebug , message , & logCursor , regress ) ;
break ;
break ;
case PqMsg_Bind :
case PqMsg_Bind :
pqTraceOutputB ( conn - > Pfdebug , message , & logCursor ) ;
pqTraceOutput_ Bind ( conn - > Pfdebug , message , & logCursor ) ;
break ;
break ;
case PqMsg_CopyDone :
case PqMsg_CopyDone :
fprintf ( conn - > Pfdebug , " CopyDone " ) ;
fprintf ( conn - > Pfdebug , " CopyDone " ) ;
@ -587,7 +572,10 @@ pqTraceOutputMessage(PGconn *conn, const char *message, bool toServer)
case PqMsg_CommandComplete :
case PqMsg_CommandComplete :
/* Close(F) and CommandComplete(B) use the same identifier. */
/* Close(F) and CommandComplete(B) use the same identifier. */
Assert ( PqMsg_Close = = PqMsg_CommandComplete ) ;
Assert ( PqMsg_Close = = PqMsg_CommandComplete ) ;
pqTraceOutputC ( conn - > Pfdebug , toServer , message , & logCursor ) ;
if ( toServer )
pqTraceOutput_Close ( conn - > Pfdebug , message , & logCursor ) ;
else
pqTraceOutput_CommandComplete ( conn - > Pfdebug , message , & logCursor ) ;
break ;
break ;
case PqMsg_CopyData :
case PqMsg_CopyData :
/* Drop COPY data to reduce the overhead of logging. */
/* Drop COPY data to reduce the overhead of logging. */
@ -595,88 +583,92 @@ pqTraceOutputMessage(PGconn *conn, const char *message, bool toServer)
case PqMsg_Describe :
case PqMsg_Describe :
/* Describe(F) and DataRow(B) use the same identifier. */
/* Describe(F) and DataRow(B) use the same identifier. */
Assert ( PqMsg_Describe = = PqMsg_DataRow ) ;
Assert ( PqMsg_Describe = = PqMsg_DataRow ) ;
pqTraceOutputD ( conn - > Pfdebug , toServer , message , & logCursor ) ;
if ( toServer )
pqTraceOutput_Describe ( conn - > Pfdebug , message , & logCursor ) ;
else
pqTraceOutput_DataRow ( conn - > Pfdebug , message , & logCursor ) ;
break ;
break ;
case PqMsg_Execute :
case PqMsg_Execute :
/* Execute(F) and ErrorResponse(B) use the same identifier. */
/* Execute(F) and ErrorResponse(B) use the same identifier. */
Assert ( PqMsg_Execute = = PqMsg_ErrorResponse ) ;
Assert ( PqMsg_Execute = = PqMsg_ErrorResponse ) ;
pqTraceOutputE ( conn - > Pfdebug , toServer , message , & logCursor ,
if ( toServer )
regress ) ;
pqTraceOutput_Execute ( conn - > Pfdebug , message , & logCursor , regress ) ;
else
pqTraceOutput_ErrorResponse ( conn - > Pfdebug , message , & logCursor , regress ) ;
break ;
break ;
case PqMsg_CopyFail :
case PqMsg_CopyFail :
pqTraceOutputf ( conn - > Pfdebug , message , & logCursor ) ;
pqTraceOutput_CopyFail ( conn - > Pfdebug , message , & logCursor ) ;
break ;
break ;
case PqMsg_FunctionCall :
case PqMsg_FunctionCall :
pqTraceOutputF ( conn - > Pfdebug , message , & logCursor , regress ) ;
pqTraceOutput_ FunctionCall ( conn - > Pfdebug , message , & logCursor , regress ) ;
break ;
break ;
case PqMsg_CopyInResponse :
case PqMsg_CopyInResponse :
pqTraceOutputG ( conn - > Pfdebug , message , & logCursor ) ;
pqTraceOutput_CopyInResponse ( conn - > Pfdebug , message , & logCursor ) ;
break ;
break ;
case PqMsg_Flush :
case PqMsg_Flush :
/* Flush(F) and CopyOutResponse(B) use the same identifier */
/* Flush(F) and CopyOutResponse(B) use the same identifier */
Assert ( PqMsg_CopyOutResponse = = PqMsg_Flush ) ;
Assert ( PqMsg_CopyOutResponse = = PqMsg_Flush ) ;
if ( ! toServer )
if ( toServer )
pqTraceOutputH ( conn - > Pfdebug , message , & logCursor ) ;
else
fprintf ( conn - > Pfdebug , " Flush " ) ; /* no message content */
fprintf ( conn - > Pfdebug , " Flush " ) ; /* no message content */
else
pqTraceOutput_CopyOutResponse ( conn - > Pfdebug , message , & logCursor ) ;
break ;
break ;
case PqMsg_EmptyQueryResponse :
case PqMsg_EmptyQueryResponse :
fprintf ( conn - > Pfdebug , " EmptyQueryResponse " ) ;
fprintf ( conn - > Pfdebug , " EmptyQueryResponse " ) ;
/* No message content */
/* No message content */
break ;
break ;
case PqMsg_BackendKeyData :
case PqMsg_BackendKeyData :
pqTraceOutputK ( conn - > Pfdebug , message , & logCursor , regress ) ;
pqTraceOutput_Backend KeyData ( conn - > Pfdebug , message , & logCursor , regress ) ;
break ;
break ;
case PqMsg_NoData :
case PqMsg_NoData :
fprintf ( conn - > Pfdebug , " NoData " ) ;
fprintf ( conn - > Pfdebug , " NoData " ) ;
/* No message content */
/* No message content */
break ;
break ;
case PqMsg_NoticeResponse :
case PqMsg_NoticeResponse :
pqTraceOutputNR ( conn - > Pfdebug , " NoticeResponse " , message ,
pqTraceOutput_NoticeResponse ( conn - > Pfdebug , message , & logCursor , regress ) ;
& logCursor , regress ) ;
break ;
break ;
case PqMsg_Parse :
case PqMsg_Parse :
pqTraceOutputP ( conn - > Pfdebug , message , & logCursor , regress ) ;
pqTraceOutput_ Parse ( conn - > Pfdebug , message , & logCursor , regress ) ;
break ;
break ;
case PqMsg_Query :
case PqMsg_Query :
pqTraceOutputQ ( conn - > Pfdebug , message , & logCursor ) ;
pqTraceOutput_ Query ( conn - > Pfdebug , message , & logCursor ) ;
break ;
break ;
case PqMsg_AuthenticationRequest :
case PqMsg_AuthenticationRequest :
pqTraceOutputR ( conn - > Pfdebug , message , & logCursor ) ;
pqTraceOutput_Authentication ( conn - > Pfdebug , message , & logCursor ) ;
break ;
break ;
case PqMsg_PortalSuspended :
case PqMsg_PortalSuspended :
fprintf ( conn - > Pfdebug , " PortalSuspended " ) ;
fprintf ( conn - > Pfdebug , " PortalSuspended " ) ;
/* No message content */
/* No message content */
break ;
break ;
case PqMsg_Sync :
case PqMsg_Sync :
/* Parameter Status(B) and Sync(F) use the same identifier */
/* ParameterStatus(B) and Sync(F) use the same identifier */
Assert ( PqMsg_ParameterStatus = = PqMsg_Sync ) ;
Assert ( PqMsg_ParameterStatus = = PqMsg_Sync ) ;
if ( ! toServer )
if ( toServer )
pqTraceOutputS ( conn - > Pfdebug , message , & logCursor ) ;
else
fprintf ( conn - > Pfdebug , " Sync " ) ; /* no message content */
fprintf ( conn - > Pfdebug , " Sync " ) ; /* no message content */
else
pqTraceOutput_ParameterStatus ( conn - > Pfdebug , message , & logCursor ) ;
break ;
break ;
case PqMsg_ParameterDescription :
case PqMsg_ParameterDescription :
pqTraceOutputt ( conn - > Pfdebug , message , & logCursor , regress ) ;
pqTraceOutput_Parame terDescription ( conn - > Pfdebug , message , & logCursor , regress ) ;
break ;
break ;
case PqMsg_RowDescription :
case PqMsg_RowDescription :
pqTraceOutputT ( conn - > Pfdebug , message , & logCursor , regress ) ;
pqTraceOutput_RowDescription ( conn - > Pfdebug , message , & logCursor , regress ) ;
break ;
break ;
case PqMsg_NegotiateProtocolVersion :
case PqMsg_NegotiateProtocolVersion :
pqTraceOutputv ( conn - > Pfdebug , message , & logCursor ) ;
pqTraceOutput_NegotiateProtocolVersion ( conn - > Pfdebug , message , & logCursor ) ;
break ;
break ;
case PqMsg_FunctionCallResponse :
case PqMsg_FunctionCallResponse :
pqTraceOutputV ( conn - > Pfdebug , message , & logCursor ) ;
pqTraceOutput_FunctionCallResponse ( conn - > Pfdebug , message , & logCursor ) ;
break ;
break ;
case PqMsg_CopyBothResponse :
case PqMsg_CopyBothResponse :
pqTraceOutputW ( conn - > Pfdebug , message , & logCursor , length ) ;
pqTraceOutput_CopyBothResponse ( conn - > Pfdebug , message , & logCursor , length ) ;
break ;
break ;
case PqMsg_Terminate :
case PqMsg_Terminate :
fprintf ( conn - > Pfdebug , " Terminate " ) ;
fprintf ( conn - > Pfdebug , " Terminate " ) ;
/* No message content */
/* No message content */
break ;
break ;
case PqMsg_ReadyForQuery :
case PqMsg_ReadyForQuery :
pqTraceOutputZ ( conn - > Pfdebug , message , & logCursor ) ;
pqTraceOutput_ReadyForQuery ( conn - > Pfdebug , message , & logCursor ) ;
break ;
break ;
default :
default :
fprintf ( conn - > Pfdebug , " Unknown message: %02x " , id ) ;
fprintf ( conn - > Pfdebug , " Unknown message: %02x " , id ) ;