Procházet zdrojové kódy

fix readLengthEncodedInteger \w n > 1
Fixes Issue #37
Fixes Issue #38

Julien Schmidt před 12 roky
rodič
revize
69826e6a8d
2 změnil soubory, kde provedl 29 přidání a 6 odebrání
  1. 23 0
      driver_test.go
  2. 6 6
      utils.go

+ 23 - 0
driver_test.go

@@ -310,6 +310,29 @@ func TestString(t *testing.T) {
 
 		mustExec(t, db, "DROP TABLE IF EXISTS test")
 	}
+
+	// BLOB
+	mustExec(t, db, "CREATE TABLE test (id int, value BLOB) CHARACTER SET utf8 COLLATE utf8_unicode_ci")
+
+	id := 2
+	in = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, " +
+		"sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, " +
+		"sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. " +
+		"Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. " +
+		"Lorem ipsum dolor sit amet, consetetur sadipscing elitr, " +
+		"sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, " +
+		"sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. " +
+		"Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."
+	mustExec(t, db, ("INSERT INTO test VALUES (?, ?)"), id, in)
+
+	err = db.QueryRow("SELECT value FROM test WHERE id = ?", id).Scan(&out)
+	if err != nil {
+		t.Fatalf("Error on BLOB-Query: %v", err)
+	} else if out != in {
+		t.Errorf("BLOB: %s != %s", in, out)
+	}
+
+	return
 }
 
 func TestNULL(t *testing.T) {

+ 6 - 6
utils.go

@@ -183,7 +183,7 @@ func skipLengthEnodedString(b []byte) (int, error) {
 }
 
 func readLengthEncodedInteger(b []byte) (num uint64, isNull bool, n int) {
-	switch (b)[0] {
+	switch b[0] {
 
 	// 251: NULL
 	case 0xfb:
@@ -212,15 +212,15 @@ func readLengthEncodedInteger(b []byte) (num uint64, isNull bool, n int) {
 
 	switch n - 1 {
 	case 2:
-		num = uint64(b[0]) | uint64(b[1])<<8
+		num = uint64(b[1]) | uint64(b[2])<<8
 		return
 	case 3:
-		num = uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16
+		num = uint64(b[1]) | uint64(b[2])<<8 | uint64(b[3])<<16
 		return
 	default:
-		num = uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 |
-			uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 |
-			uint64(b[6])<<48 | uint64(b[7])<<54
+		num = uint64(b[1]) | uint64(b[2])<<8 | uint64(b[3])<<16 |
+			uint64(b[4])<<24 | uint64(b[5])<<32 | uint64(b[6])<<40 |
+			uint64(b[7])<<48 | uint64(b[8])<<54
 	}
 	return
 }