Bladeren bron

Fix improper cast of <row_count> from int64 (on some systems) to int32

Nimi Wariboko 12 jaren geleden
bovenliggende
commit
c58bba0779
2 gewijzigde bestanden met toevoegingen van 49 en 1 verwijderingen
  1. 1 1
      gocql.go
  2. 48 0
      gocql_test.go

+ 1 - 1
gocql.go

@@ -434,7 +434,7 @@ func (r *rows) Next(values []driver.Value) error {
 		return io.EOF
 	}
 	for column := 0; column < len(r.columns); column++ {
-		n := int(binary.BigEndian.Uint32(r.body))
+		n := int32(binary.BigEndian.Uint32(r.body))
 		r.body = r.body[4:]
 		if n >= 0 {
 			values[column] = decode(r.body[:n], r.meta[column])

+ 48 - 0
gocql_test.go

@@ -175,3 +175,51 @@ func TestTypes(t *testing.T) {
 		t.Errorf("expected %v got %v", id, rid)
 	}
 }
+
+
+func TestNullColumnValues(t *testing.T) {
+	db, err := sql.Open("gocql", "localhost:9042 compression=snappy")
+	if err != nil {
+		t.Fatal(err)
+	}
+	db.Exec("DROP KEYSPACE gocql_nullvalues")
+	if _, err := db.Exec(`CREATE KEYSPACE gocql_nullvalues
+	                      WITH replication = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };`); err != nil {
+		t.Fatal(err)
+	}
+	if _, err := db.Exec("USE gocql_nullvalues"); err != nil {
+		t.Fatal(err)
+	}
+	if _, err := db.Exec(`CREATE TABLE stuff (
+        id bigint,
+        subid bigint,
+				foo text,
+				bar text,
+        PRIMARY KEY (id, subid)
+        )`); err != nil {
+		t.Fatal(err)
+	}
+	id := int64(-1 << 63)
+
+	if _, err := db.Exec(`INSERT INTO stuff (id, subid, foo) VALUES (?, ?, ?);`, id, int64(4), "test"); err != nil {
+		t.Fatal(err)
+	}
+
+	if _, err := db.Exec(`INSERT INTO stuff (id, subid, bar) VALUES (?, ?, ?);`, id, int64(6), "test2"); err != nil {
+		t.Fatal(err)
+	}
+
+	var rid int64
+	var sid int64
+	var data1 []byte
+	var data2 []byte
+	if rows, err := db.Query(`SELECT id, subid, foo, bar FROM stuff`); err == nil {
+			for rows.Next() {
+					if err := rows.Scan(&rid, &sid, &data1, &data2); err != nil {
+				t.Error(err)
+			}
+		}
+	} else {
+		t.Fatal(err)
+	}
+}