Sfoglia il codice sorgente

Export errors for easy checks from application code

Gustavo Kristic 11 anni fa
parent
commit
734d65ec97
9 ha cambiato i file con 41 aggiunte e 40 eliminazioni
  1. 1 0
      AUTHORS
  2. 4 4
      connection.go
  3. 1 1
      driver.go
  4. 1 1
      driver_test.go
  5. 9 9
      errors.go
  6. 17 17
      packets.go
  7. 3 3
      rows.go
  8. 3 3
      statement.go
  9. 2 2
      transaction.go

+ 1 - 0
AUTHORS

@@ -16,6 +16,7 @@ Arne Hormann <arnehormann at gmail.com>
 Carlos Nieto <jose.carlos at menteslibres.net>
 DisposaBoy <disposaboy at dby.me>
 Frederick Mayle <frederickmayle at gmail.com>
+Gustavo Kristic <gkristic at gmail.com>
 Hanno Braun <mail at hannobraun.com>
 James Harr <james.harr at gmail.com>
 Jian Zhen <zhenjl at gmail.com>

+ 4 - 4
connection.go

@@ -99,7 +99,7 @@ func (mc *mysqlConn) handleParams() (err error) {
 
 func (mc *mysqlConn) Begin() (driver.Tx, error) {
 	if mc.netConn == nil {
-		errLog.Print(errInvalidConn)
+		errLog.Print(ErrInvalidConn)
 		return nil, driver.ErrBadConn
 	}
 	err := mc.exec("START TRANSACTION")
@@ -130,7 +130,7 @@ func (mc *mysqlConn) Close() (err error) {
 
 func (mc *mysqlConn) Prepare(query string) (driver.Stmt, error) {
 	if mc.netConn == nil {
-		errLog.Print(errInvalidConn)
+		errLog.Print(ErrInvalidConn)
 		return nil, driver.ErrBadConn
 	}
 	// Send command
@@ -162,7 +162,7 @@ func (mc *mysqlConn) Prepare(query string) (driver.Stmt, error) {
 
 func (mc *mysqlConn) Exec(query string, args []driver.Value) (driver.Result, error) {
 	if mc.netConn == nil {
-		errLog.Print(errInvalidConn)
+		errLog.Print(ErrInvalidConn)
 		return nil, driver.ErrBadConn
 	}
 	if len(args) == 0 { // no args, fastpath
@@ -207,7 +207,7 @@ func (mc *mysqlConn) exec(query string) error {
 
 func (mc *mysqlConn) Query(query string, args []driver.Value) (driver.Rows, error) {
 	if mc.netConn == nil {
-		errLog.Print(errInvalidConn)
+		errLog.Print(ErrInvalidConn)
 		return nil, driver.ErrBadConn
 	}
 	if len(args) == 0 { // no args, fastpath

+ 1 - 1
driver.go

@@ -84,7 +84,7 @@ func (d *MySQLDriver) Open(dsn string) (driver.Conn, error) {
 	err = mc.readResultOK()
 	if err != nil {
 		// Retry with old authentication method, if allowed
-		if mc.cfg != nil && mc.cfg.allowOldPasswords && err == errOldPassword {
+		if mc.cfg != nil && mc.cfg.allowOldPasswords && err == ErrOldPassword {
 			if err = mc.writeOldAuthPacket(cipher); err != nil {
 				mc.Close()
 				return nil, err

+ 1 - 1
driver_test.go

@@ -827,7 +827,7 @@ func TestStrict(t *testing.T) {
 func TestTLS(t *testing.T) {
 	tlsTest := func(dbt *DBTest) {
 		if err := dbt.db.Ping(); err != nil {
-			if err == errNoTLS {
+			if err == ErrNoTLS {
 				dbt.Skip("Server does not support TLS")
 			} else {
 				dbt.Fatalf("Error on Ping: %s", err.Error())

+ 9 - 9
errors.go

@@ -18,15 +18,15 @@ import (
 )
 
 var (
-	errInvalidConn = errors.New("Invalid Connection")
-	errMalformPkt  = errors.New("Malformed Packet")
-	errNoTLS       = errors.New("TLS encryption requested but server does not support TLS")
-	errOldPassword = errors.New("This server only supports the insecure old password authentication. If you still want to use it, please add 'allowOldPasswords=1' to your DSN. See also https://github.com/go-sql-driver/mysql/wiki/old_passwords")
-	errOldProtocol = errors.New("MySQL-Server does not support required Protocol 41+")
-	errPktSync     = errors.New("Commands out of sync. You can't run this command now")
-	errPktSyncMul  = errors.New("Commands out of sync. Did you run multiple statements at once?")
-	errPktTooLarge = errors.New("Packet for query is too large. You can change this value on the server by adjusting the 'max_allowed_packet' variable.")
-	errBusyBuffer  = errors.New("Busy buffer")
+	ErrInvalidConn = errors.New("Invalid Connection")
+	ErrMalformPkt  = errors.New("Malformed Packet")
+	ErrNoTLS       = errors.New("TLS encryption requested but server does not support TLS")
+	ErrOldPassword = errors.New("This server only supports the insecure old password authentication. If you still want to use it, please add 'allowOldPasswords=1' to your DSN. See also https://github.com/go-sql-driver/mysql/wiki/old_passwords")
+	ErrOldProtocol = errors.New("MySQL-Server does not support required Protocol 41+")
+	ErrPktSync     = errors.New("Commands out of sync. You can't run this command now")
+	ErrPktSyncMul  = errors.New("Commands out of sync. Did you run multiple statements at once?")
+	ErrPktTooLarge = errors.New("Packet for query is too large. You can change this value on the server by adjusting the 'max_allowed_packet' variable.")
+	ErrBusyBuffer  = errors.New("Busy buffer")
 
 	errLog Logger = log.New(os.Stderr, "[MySQL] ", log.Ldate|log.Ltime|log.Lshortfile)
 )

+ 17 - 17
packets.go

@@ -38,7 +38,7 @@ func (mc *mysqlConn) readPacket() ([]byte, error) {
 		pktLen := int(uint32(data[0]) | uint32(data[1])<<8 | uint32(data[2])<<16)
 
 		if pktLen < 1 {
-			errLog.Print(errMalformPkt)
+			errLog.Print(ErrMalformPkt)
 			mc.Close()
 			return nil, driver.ErrBadConn
 		}
@@ -46,9 +46,9 @@ func (mc *mysqlConn) readPacket() ([]byte, error) {
 		// Check Packet Sync [8 bit]
 		if data[3] != mc.sequence {
 			if data[3] > mc.sequence {
-				return nil, errPktSyncMul
+				return nil, ErrPktSyncMul
 			} else {
-				return nil, errPktSync
+				return nil, ErrPktSync
 			}
 		}
 		mc.sequence++
@@ -81,7 +81,7 @@ func (mc *mysqlConn) writePacket(data []byte) error {
 	pktLen := len(data) - 4
 
 	if pktLen > mc.maxPacketAllowed {
-		return errPktTooLarge
+		return ErrPktTooLarge
 	}
 
 	for {
@@ -113,7 +113,7 @@ func (mc *mysqlConn) writePacket(data []byte) error {
 
 		// Handle error
 		if err == nil { // n != len(data)
-			errLog.Print(errMalformPkt)
+			errLog.Print(ErrMalformPkt)
 		} else {
 			errLog.Print(err)
 		}
@@ -159,10 +159,10 @@ func (mc *mysqlConn) readInitPacket() ([]byte, error) {
 	// capability flags (lower 2 bytes) [2 bytes]
 	mc.flags = clientFlag(binary.LittleEndian.Uint16(data[pos : pos+2]))
 	if mc.flags&clientProtocol41 == 0 {
-		return nil, errOldProtocol
+		return nil, ErrOldProtocol
 	}
 	if mc.flags&clientSSL == 0 && mc.cfg.tls != nil {
-		return nil, errNoTLS
+		return nil, ErrNoTLS
 	}
 	pos += 2
 
@@ -195,7 +195,7 @@ func (mc *mysqlConn) readInitPacket() ([]byte, error) {
 		//if data[len(data)-1] == 0 {
 		//	return
 		//}
-		//return errMalformPkt
+		//return ErrMalformPkt
 		return cipher, nil
 	}
 
@@ -240,7 +240,7 @@ func (mc *mysqlConn) writeAuthPacket(cipher []byte) error {
 	data := mc.buf.takeSmallBuffer(pktLen + 4)
 	if data == nil {
 		// can not take the buffer. Something must be wrong with the connection
-		errLog.Print(errBusyBuffer)
+		errLog.Print(ErrBusyBuffer)
 		return driver.ErrBadConn
 	}
 
@@ -311,7 +311,7 @@ func (mc *mysqlConn) writeOldAuthPacket(cipher []byte) error {
 	data := mc.buf.takeSmallBuffer(4 + pktLen)
 	if data == nil {
 		// can not take the buffer. Something must be wrong with the connection
-		errLog.Print(errBusyBuffer)
+		errLog.Print(ErrBusyBuffer)
 		return driver.ErrBadConn
 	}
 
@@ -333,7 +333,7 @@ func (mc *mysqlConn) writeCommandPacket(command byte) error {
 	data := mc.buf.takeSmallBuffer(4 + 1)
 	if data == nil {
 		// can not take the buffer. Something must be wrong with the connection
-		errLog.Print(errBusyBuffer)
+		errLog.Print(ErrBusyBuffer)
 		return driver.ErrBadConn
 	}
 
@@ -352,7 +352,7 @@ func (mc *mysqlConn) writeCommandPacketStr(command byte, arg string) error {
 	data := mc.buf.takeBuffer(pktLen + 4)
 	if data == nil {
 		// can not take the buffer. Something must be wrong with the connection
-		errLog.Print(errBusyBuffer)
+		errLog.Print(ErrBusyBuffer)
 		return driver.ErrBadConn
 	}
 
@@ -373,7 +373,7 @@ func (mc *mysqlConn) writeCommandPacketUint32(command byte, arg uint32) error {
 	data := mc.buf.takeSmallBuffer(4 + 1 + 4)
 	if data == nil {
 		// can not take the buffer. Something must be wrong with the connection
-		errLog.Print(errBusyBuffer)
+		errLog.Print(ErrBusyBuffer)
 		return driver.ErrBadConn
 	}
 
@@ -406,7 +406,7 @@ func (mc *mysqlConn) readResultOK() error {
 
 		case iEOF:
 			// someone is using old_passwords
-			return errOldPassword
+			return ErrOldPassword
 
 		default: // Error otherwise
 			return mc.handleErrorPacket(data)
@@ -438,7 +438,7 @@ func (mc *mysqlConn) readResultSetHeaderPacket() (int, error) {
 			return int(num), nil
 		}
 
-		return 0, errMalformPkt
+		return 0, ErrMalformPkt
 	}
 	return 0, err
 }
@@ -447,7 +447,7 @@ func (mc *mysqlConn) readResultSetHeaderPacket() (int, error) {
 // http://dev.mysql.com/doc/internals/en/generic-response-packets.html#packet-ERR_Packet
 func (mc *mysqlConn) handleErrorPacket(data []byte) error {
 	if data[0] != iERR {
-		return errMalformPkt
+		return ErrMalformPkt
 	}
 
 	// 0xff [1 byte]
@@ -765,7 +765,7 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error {
 	}
 	if data == nil {
 		// can not take the buffer. Something must be wrong with the connection
-		errLog.Print(errBusyBuffer)
+		errLog.Print(ErrBusyBuffer)
 		return driver.ErrBadConn
 	}
 

+ 3 - 3
rows.go

@@ -46,7 +46,7 @@ func (rows *mysqlRows) Close() error {
 		return nil
 	}
 	if mc.netConn == nil {
-		return errInvalidConn
+		return ErrInvalidConn
 	}
 
 	// Remove unread packets from stream
@@ -58,7 +58,7 @@ func (rows *mysqlRows) Close() error {
 func (rows *binaryRows) Next(dest []driver.Value) error {
 	if mc := rows.mc; mc != nil {
 		if mc.netConn == nil {
-			return errInvalidConn
+			return ErrInvalidConn
 		}
 
 		// Fetch next row from stream
@@ -73,7 +73,7 @@ func (rows *binaryRows) Next(dest []driver.Value) error {
 func (rows *textRows) Next(dest []driver.Value) error {
 	if mc := rows.mc; mc != nil {
 		if mc.netConn == nil {
-			return errInvalidConn
+			return ErrInvalidConn
 		}
 
 		// Fetch next row from stream

+ 3 - 3
statement.go

@@ -21,7 +21,7 @@ type mysqlStmt struct {
 
 func (stmt *mysqlStmt) Close() error {
 	if stmt.mc == nil || stmt.mc.netConn == nil {
-		errLog.Print(errInvalidConn)
+		errLog.Print(ErrInvalidConn)
 		return driver.ErrBadConn
 	}
 
@@ -36,7 +36,7 @@ func (stmt *mysqlStmt) NumInput() int {
 
 func (stmt *mysqlStmt) Exec(args []driver.Value) (driver.Result, error) {
 	if stmt.mc.netConn == nil {
-		errLog.Print(errInvalidConn)
+		errLog.Print(ErrInvalidConn)
 		return nil, driver.ErrBadConn
 	}
 	// Send command
@@ -76,7 +76,7 @@ func (stmt *mysqlStmt) Exec(args []driver.Value) (driver.Result, error) {
 
 func (stmt *mysqlStmt) Query(args []driver.Value) (driver.Rows, error) {
 	if stmt.mc.netConn == nil {
-		errLog.Print(errInvalidConn)
+		errLog.Print(ErrInvalidConn)
 		return nil, driver.ErrBadConn
 	}
 	// Send command

+ 2 - 2
transaction.go

@@ -14,7 +14,7 @@ type mysqlTx struct {
 
 func (tx *mysqlTx) Commit() (err error) {
 	if tx.mc == nil || tx.mc.netConn == nil {
-		return errInvalidConn
+		return ErrInvalidConn
 	}
 	err = tx.mc.exec("COMMIT")
 	tx.mc = nil
@@ -23,7 +23,7 @@ func (tx *mysqlTx) Commit() (err error) {
 
 func (tx *mysqlTx) Rollback() (err error) {
 	if tx.mc == nil || tx.mc.netConn == nil {
-		return errInvalidConn
+		return ErrInvalidConn
 	}
 	err = tx.mc.exec("ROLLBACK")
 	tx.mc = nil