Skip to content

Commit 75935e3

Browse files
committed
Add error marshalling
1 parent c645ca9 commit 75935e3

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

error.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package mssql
22

33
import (
4+
"bytes"
45
"database/sql/driver"
6+
"encoding/binary"
57
"fmt"
68
)
79

@@ -23,6 +25,46 @@ type Error struct {
2325
All []Error
2426
}
2527

28+
// Marshal marshals the error to the wire protocol token.
29+
func (e *Error) Marshal() ([]byte, error) {
30+
buf := bytes.NewBuffer([]byte{
31+
byte(tokenError),
32+
})
33+
length := 2 + // length
34+
4 + // number
35+
1 + // state
36+
1 + // class
37+
(2 + 2*len(e.Message)) + // message
38+
(1 + 2*len(e.ServerName)) + // server name
39+
(1 + 2*len(e.ProcName)) + // proc name
40+
4 // line no
41+
if err := binary.Write(buf, binary.LittleEndian, uint16(length)); err != nil {
42+
return nil, err
43+
}
44+
if err := binary.Write(buf, binary.LittleEndian, e.Number); err != nil {
45+
return nil, err
46+
}
47+
if err := buf.WriteByte(e.State); err != nil {
48+
return nil, err
49+
}
50+
if err := buf.WriteByte(e.Class); err != nil {
51+
return nil, err
52+
}
53+
if err := writeUsVarChar(buf, e.Message); err != nil {
54+
return nil, err
55+
}
56+
if err := writeBVarChar(buf, e.ServerName); err != nil {
57+
return nil, err
58+
}
59+
if err := writeBVarChar(buf, e.ProcName); err != nil {
60+
return nil, err
61+
}
62+
if err := binary.Write(buf, binary.LittleEndian, e.LineNo); err != nil {
63+
return nil, err
64+
}
65+
return buf.Bytes(), nil
66+
}
67+
2668
func (e Error) Error() string {
2769
return "mssql: " + e.Message
2870
}

0 commit comments

Comments
 (0)