Forráskód Böngészése

Merge pull request #92 from go-sql-driver/buffer

Buffer: better grow method + appending bug fix
Julien Schmidt 12 éve
szülő
commit
d3fd057cbc
3 módosított fájl, 16 hozzáadás és 14 törlés
  1. 5 9
      buffer.go
  2. 6 2
      driver_test.go
  3. 5 3
      packets.go

+ 5 - 9
buffer.go

@@ -23,8 +23,9 @@ type buffer struct {
 }
 
 func newBuffer(rd io.Reader) *buffer {
+	var b [defaultBufSize]byte
 	return &buffer{
-		buf: make([]byte, defaultBufSize),
+		buf: b[:],
 		rd:  rd,
 	}
 }
@@ -38,14 +39,9 @@ func (b *buffer) fill(need int) (err error) {
 
 	// grow buffer if necessary
 	if need > len(b.buf) {
-		for {
-			b.buf = append(b.buf, 0)
-			b.buf = b.buf[:cap(b.buf)]
-
-			if cap(b.buf) >= need {
-				break
-			}
-		}
+		newBuf := make([]byte, need)
+		copy(newBuf, b.buf)
+		b.buf = newBuf
 	}
 
 	b.idx = 0

+ 6 - 2
driver_test.go

@@ -612,7 +612,7 @@ func TestLongData(t *testing.T) {
 
 		dbt.mustExec("CREATE TABLE test (value LONGBLOB)")
 
-		in := strings.Repeat(`0`, maxAllowedPacketSize+1)
+		in := strings.Repeat(`a`, maxAllowedPacketSize+1)
 		var out string
 		var rows *sql.Rows
 
@@ -648,7 +648,11 @@ func TestLongData(t *testing.T) {
 				dbt.Error("LONGBLOB: unexpexted row")
 			}
 		} else {
-			dbt.Fatalf("LONGBLOB: no data")
+			if err = rows.Err(); err != nil {
+				dbt.Fatalf("LONGBLOB: no data (err: %s)", err.Error())
+			} else {
+				dbt.Fatal("LONGBLOB: no data (err: <nil>)")
+			}
 		}
 	})
 }

+ 5 - 3
packets.go

@@ -57,11 +57,13 @@ func (mc *mysqlConn) readPacket() (data []byte, err error) {
 			return data, nil
 		}
 
+		var buf []byte
+		buf = append(buf, data...)
+
 		// More data
-		var data2 []byte
-		data2, err = mc.readPacket()
+		data, err = mc.readPacket()
 		if err == nil {
-			return append(data, data2...), nil
+			return append(buf, data...), nil
 		}
 	}
 	errLog.Print(err.Error())