diff --git a/error.go b/error.go index 09964b87..58575c35 100644 --- a/error.go +++ b/error.go @@ -14,7 +14,7 @@ type Error struct { Number int32 State uint8 Class uint8 - Message string + Message Message ServerName string ProcName string LineNo int32 @@ -23,8 +23,14 @@ type Error struct { All []Error } +type Message string + func (e Error) Error() string { - return "mssql: " + e.Message + return "mssql: " + e.Message.String() +} + +func (m Message) String() string { + return string(m) } // SQLErrorNumber returns the SQL Server error number. @@ -41,7 +47,7 @@ func (e Error) SQLErrorClass() uint8 { } func (e Error) SQLErrorMessage() string { - return e.Message + return e.Message.String() } func (e Error) SQLErrorServerName() string { diff --git a/token.go b/token.go index 43039d3d..939e61b5 100644 --- a/token.go +++ b/token.go @@ -601,7 +601,7 @@ func parseError72(r *tdsBuffer) (res Error) { res.Number = r.int32() res.State = r.byte() res.Class = r.byte() - res.Message = r.UsVarChar() + res.Message = Message(r.UsVarChar()) res.ServerName = r.BVarChar() res.ProcName = r.BVarChar() res.LineNo = r.int32() @@ -615,7 +615,7 @@ func parseInfo(r *tdsBuffer) (res Error) { res.Number = r.int32() res.State = r.byte() res.Class = r.byte() - res.Message = r.UsVarChar() + res.Message = Message(r.UsVarChar()) res.ServerName = r.BVarChar() res.ProcName = r.BVarChar() res.LineNo = r.int32() @@ -773,7 +773,7 @@ func processSingleResponse(ctx context.Context, sess *tdsSession, ch chan tokenS } errs = append(errs, err) if sess.logFlags&logErrors != 0 { - sess.logger.Log(ctx, msdsn.LogErrors, err.Message) + sess.logger.Log(ctx, msdsn.LogErrors, err.Message.String()) } if outs.msgq != nil { _ = sqlexp.ReturnMessageEnqueue(ctx, outs.msgq, sqlexp.MsgError{Error: err}) @@ -784,7 +784,7 @@ func processSingleResponse(ctx context.Context, sess *tdsSession, ch chan tokenS sess.logger.Log(ctx, msdsn.LogDebug, fmt.Sprintf("got INFO %d %s", info.Number, info.Message)) } if sess.logFlags&logMessages != 0 { - sess.logger.Log(ctx, msdsn.LogMessages, info.Message) + sess.logger.Log(ctx, msdsn.LogMessages, info.Message.String()) } if outs.msgq != nil { _ = sqlexp.ReturnMessageEnqueue(ctx, outs.msgq, sqlexp.MsgNotice{Message: info.Message})