Ver código fonte

Merge pull request #255 from arnehormann/result-without-columns

Fix handling of queries without columns and rows
Arne Hormann 11 anos atrás
pai
commit
105a8fd193
3 arquivos alterados com 30 adições e 3 exclusões
  1. 5 3
      connection.go
  2. 11 0
      driver_test.go
  3. 14 0
      rows.go

+ 5 - 3
connection.go

@@ -222,10 +222,12 @@ func (mc *mysqlConn) Query(query string, args []driver.Value) (driver.Rows, erro
 				rows := new(textRows)
 				rows.mc = mc
 
-				if resLen > 0 {
-					// Columns
-					rows.columns, err = mc.readColumns(resLen)
+				if resLen == 0 {
+					// no columns, no more data
+					return emptyRows{}, nil
 				}
+				// Columns
+				rows.columns, err = mc.readColumns(resLen)
 				return rows, err
 			}
 		}

+ 11 - 0
driver_test.go

@@ -117,6 +117,17 @@ func (dbt *DBTest) mustQuery(query string, args ...interface{}) (rows *sql.Rows)
 	return rows
 }
 
+func TestEmptyQuery(t *testing.T) {
+	runTests(t, dsn, func(dbt *DBTest) {
+		// just a comment, no query
+		rows := dbt.mustQuery("--")
+		// will hang before #255
+		if rows.Next() {
+			dbt.Errorf("Next on rows must be false")
+		}
+	})
+}
+
 func TestCRUD(t *testing.T) {
 	runTests(t, dsn, func(dbt *DBTest) {
 		// Create Table

+ 14 - 0
rows.go

@@ -32,6 +32,8 @@ type textRows struct {
 	mysqlRows
 }
 
+type emptyRows struct{}
+
 func (rows *mysqlRows) Columns() []string {
 	columns := make([]string, len(rows.columns))
 	for i := range columns {
@@ -84,3 +86,15 @@ func (rows *textRows) Next(dest []driver.Value) error {
 	}
 	return io.EOF
 }
+
+func (rows emptyRows) Columns() []string {
+	return nil
+}
+
+func (rows emptyRows) Close() error {
+	return nil
+}
+
+func (rows emptyRows) Next(dest []driver.Value) error {
+	return io.EOF
+}