@@ -25,19 +25,30 @@ var (
2525)
2626
2727// error type which represents one or more MySQL warnings
28- type MySQLWarnings []string
28+ type MySQLWarnings []MySQLWarning
2929
30- func (mw MySQLWarnings ) Error () string {
30+ func (mws MySQLWarnings ) Error () string {
3131 var msg string
32- for i := range mw {
32+ for i := range mws {
3333 if i > 0 {
3434 msg += "\r \n "
3535 }
36- msg += mw [i ]
36+ msg += mws [i ]. Error ()
3737 }
3838 return msg
3939}
4040
41+ // error type which represents a single MySQL warning
42+ type MySQLWarning struct {
43+ Level string
44+ Code string
45+ Message string
46+ }
47+
48+ func (mw MySQLWarning ) Error () string {
49+ return fmt .Sprintf ("%s %s: %s" , mw .Level , mw .Code , mw .Message )
50+ }
51+
4152func (mc * mysqlConn ) getWarnings () (err error ) {
4253 rows , err := mc .Query ("SHOW WARNINGS" , []driver.Value {})
4354 if err != nil {
@@ -47,14 +58,38 @@ func (mc *mysqlConn) getWarnings() (err error) {
4758 var warnings = MySQLWarnings {}
4859 var values = make ([]driver.Value , 3 )
4960
61+ var warning MySQLWarning
62+ var raw []byte
63+ var ok bool
64+
5065 for {
51- if err = rows .Next (values ); err == nil {
52- warnings = append (warnings ,
53- fmt .Sprintf ("%s %s: %s" , values [0 ], values [1 ], values [2 ]),
54- )
55- } else if err == io .EOF {
66+ err = rows .Next (values )
67+ switch err {
68+ case nil :
69+ warning = MySQLWarning {}
70+
71+ if raw , ok = values [0 ].([]byte ); ok {
72+ warning .Level = string (raw )
73+ } else {
74+ warning .Level = fmt .Sprintf ("%s" , values [0 ])
75+ }
76+ if raw , ok = values [1 ].([]byte ); ok {
77+ warning .Code = string (raw )
78+ } else {
79+ warning .Code = fmt .Sprintf ("%s" , values [1 ])
80+ }
81+ if raw , ok = values [2 ].([]byte ); ok {
82+ warning .Message = string (raw )
83+ } else {
84+ warning .Message = fmt .Sprintf ("%s" , values [0 ])
85+ }
86+
87+ warnings = append (warnings , warning )
88+
89+ case io .EOF :
5690 return warnings
57- } else {
91+
92+ default :
5893 rows .Close ()
5994 return
6095 }
0 commit comments