Procházet zdrojové kódy

Export MySQL error struct

Also export a MySQL error type struct for consistency
Julien Schmidt před 12 roky
rodič
revize
8decd5c6bd
2 změnil soubory, kde provedl 19 přidání a 6 odebrání
  1. 15 5
      errors.go
  2. 4 1
      packets.go

+ 15 - 5
errors.go

@@ -24,16 +24,26 @@ var (
 	errPktTooLarge = errors.New("Packet for query is too large. You can change this value on the server by adjusting the 'max_allowed_packet' variable.")
 )
 
-// error type which represents one or more MySQL warnings
+// error type which represents a single MySQL error
+type MySQLError struct {
+	Number  uint16
+	Message string
+}
+
+func (me *MySQLError) Error() string {
+	return fmt.Sprintf("Error %d: %s", me.Number, me.Message)
+}
+
+// error type which represents a group (one ore more) MySQL warnings
 type MySQLWarnings []mysqlWarning
 
-func (mws MySQLWarnings) Error() string {
+func (mws *MySQLWarnings) Error() string {
 	var msg string
-	for i := range mws {
+	for i, warning := range *mws {
 		if i > 0 {
 			msg += "\r\n"
 		}
-		msg += fmt.Sprintf("%s %s: %s", mws[i].Level, mws[i].Code, mws[i].Message)
+		msg += fmt.Sprintf("%s %s: %s", warning.Level, warning.Code, warning.Message)
 	}
 	return msg
 }
@@ -83,7 +93,7 @@ func (mc *mysqlConn) getWarnings() (err error) {
 			warnings = append(warnings, warning)
 
 		case io.EOF:
-			return warnings
+			return &warnings
 
 		default:
 			rows.Close()

+ 4 - 1
packets.go

@@ -413,7 +413,10 @@ func (mc *mysqlConn) handleErrorPacket(data []byte) error {
 	}
 
 	// Error Message [string]
-	return fmt.Errorf("Error %d: %s", errno, string(data[pos:]))
+	return &MySQLError{
+		Number:  errno,
+		Message: string(data[pos:]),
+	}
 }
 
 // Ok Packet