// Go MySQL Driver - A MySQL-Driver for Go's database/sql package // // Copyright 2012 Julien Schmidt. All rights reserved. // http://www.julienschmidt.com // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this file, // You can obtain one at http://mozilla.org/MPL/2.0/. package mysql import ( "database/sql/driver" "io" ) type mysqlField struct { name string fieldType byte flags fieldFlag } type mysqlRows struct { mc *mysqlConn binary bool columns []mysqlField eof bool } func (rows *mysqlRows) Columns() (columns []string) { columns = make([]string, len(rows.columns)) for i := range columns { columns[i] = rows.columns[i].name } return } func (rows *mysqlRows) Close() (err error) { defer func() { rows.mc = nil }() // Remove unread packets from stream if !rows.eof { if rows.mc == nil || rows.mc.netConn == nil { return errInvalidConn } err = rows.mc.readUntilEOF() // explicitly set because readUntilEOF might return early in case of an // error rows.eof = true } return } func (rows *mysqlRows) Next(dest []driver.Value) error { if rows.eof { return io.EOF } if rows.mc == nil || rows.mc.netConn == nil { return errInvalidConn } // Fetch next row from stream var err error if rows.binary { err = rows.readBinaryRow(dest) } else { err = rows.readRow(dest) } if err == io.EOF { rows.eof = true } return err }