diff --git a/pgconn/errors.go b/pgconn/errors.go index c315739a9..1bc386c3f 100644 --- a/pgconn/errors.go +++ b/pgconn/errors.go @@ -29,23 +29,24 @@ func Timeout(err error) bool { // http://www.postgresql.org/docs/11/static/protocol-error-fields.html for // detailed field description. type PgError struct { - Severity string - Code string - Message string - Detail string - Hint string - Position int32 - InternalPosition int32 - InternalQuery string - Where string - SchemaName string - TableName string - ColumnName string - DataTypeName string - ConstraintName string - File string - Line int32 - Routine string + Severity string + SeverityUnlocalized string + Code string + Message string + Detail string + Hint string + Position int32 + InternalPosition int32 + InternalQuery string + Where string + SchemaName string + TableName string + ColumnName string + DataTypeName string + ConstraintName string + File string + Line int32 + Routine string } func (pe *PgError) Error() string { diff --git a/pgconn/pgconn.go b/pgconn/pgconn.go index 0bf03f335..170f18db6 100644 --- a/pgconn/pgconn.go +++ b/pgconn/pgconn.go @@ -928,23 +928,24 @@ func (pgConn *PgConn) Deallocate(ctx context.Context, name string) error { // ErrorResponseToPgError converts a wire protocol error message to a *PgError. func ErrorResponseToPgError(msg *pgproto3.ErrorResponse) *PgError { return &PgError{ - Severity: msg.Severity, - Code: string(msg.Code), - Message: string(msg.Message), - Detail: string(msg.Detail), - Hint: msg.Hint, - Position: msg.Position, - InternalPosition: msg.InternalPosition, - InternalQuery: string(msg.InternalQuery), - Where: string(msg.Where), - SchemaName: string(msg.SchemaName), - TableName: string(msg.TableName), - ColumnName: string(msg.ColumnName), - DataTypeName: string(msg.DataTypeName), - ConstraintName: msg.ConstraintName, - File: string(msg.File), - Line: msg.Line, - Routine: string(msg.Routine), + Severity: msg.Severity, + SeverityUnlocalized: msg.SeverityUnlocalized, + Code: string(msg.Code), + Message: string(msg.Message), + Detail: string(msg.Detail), + Hint: msg.Hint, + Position: msg.Position, + InternalPosition: msg.InternalPosition, + InternalQuery: string(msg.InternalQuery), + Where: string(msg.Where), + SchemaName: string(msg.SchemaName), + TableName: string(msg.TableName), + ColumnName: string(msg.ColumnName), + DataTypeName: string(msg.DataTypeName), + ConstraintName: msg.ConstraintName, + File: string(msg.File), + Line: msg.Line, + Routine: string(msg.Routine), } } diff --git a/pgconn/pgconn_test.go b/pgconn/pgconn_test.go index b77d21c17..604aa9e61 100644 --- a/pgconn/pgconn_test.go +++ b/pgconn/pgconn_test.go @@ -1556,9 +1556,9 @@ func TestConnOnNotice(t *testing.T) { config, err := pgconn.ParseConfig(os.Getenv("PGX_TEST_DATABASE")) require.NoError(t, err) - var msg string - config.OnNotice = func(c *pgconn.PgConn, notice *pgconn.Notice) { - msg = notice.Message + var notice *pgconn.Notice + config.OnNotice = func(c *pgconn.PgConn, n *pgconn.Notice) { + notice = n } config.RuntimeParams["client_min_messages"] = "notice" // Ensure we only get the message we expect. @@ -1576,7 +1576,8 @@ begin end$$;`) err = multiResult.Close() require.NoError(t, err) - assert.Equal(t, "hello, world", msg) + assert.Equal(t, "NOTICE", notice.SeverityUnlocalized) + assert.Equal(t, "hello, world", notice.Message) ensureConnValid(t, pgConn) }