Преглед изворни кода

Support receiving ERR packet while reading rows

ref: http://dev.mysql.com/doc/internals/en/com-query-response.html
INADA Naoki пре 10 година
родитељ
комит
3dcc0ea1f4
2 измењених фајлова са 8 додато и 8 уклоњено
  1. 6 0
      packets.go
  2. 2 8
      rows.go

+ 6 - 0
packets.go

@@ -603,8 +603,13 @@ func (rows *textRows) readRow(dest []driver.Value) error {
 
 	// EOF Packet
 	if data[0] == iEOF && len(data) == 5 {
+		rows.mc = nil
 		return io.EOF
 	}
+	if data[0] == iERR {
+		rows.mc = nil
+		return mc.handleErrorPacket(data)
+	}
 
 	// RowSet Packet
 	var n int
@@ -968,6 +973,7 @@ func (rows *binaryRows) readRow(dest []driver.Value) error {
 
 	// packet indicator [1 byte]
 	if data[0] != iOK {
+		rows.mc = nil
 		// EOF Packet
 		if data[0] == iEOF && len(data) == 5 {
 			return io.EOF

+ 2 - 8
rows.go

@@ -72,10 +72,7 @@ func (rows *binaryRows) Next(dest []driver.Value) error {
 		}
 
 		// Fetch next row from stream
-		if err := rows.readRow(dest); err != io.EOF {
-			return err
-		}
-		rows.mc = nil
+		return rows.readRow(dest)
 	}
 	return io.EOF
 }
@@ -87,10 +84,7 @@ func (rows *textRows) Next(dest []driver.Value) error {
 		}
 
 		// Fetch next row from stream
-		if err := rows.readRow(dest); err != io.EOF {
-			return err
-		}
-		rows.mc = nil
+		return rows.readRow(dest)
 	}
 	return io.EOF
 }