github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/go-sql-driver/mysql/rows.go (about)

     1  // Go MySQL Driver - A MySQL-Driver for Go's database/sql package
     2  //
     3  // Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved.
     4  //
     5  // This Source Code Form is subject to the terms of the Mozilla Public
     6  // License, v. 2.0. If a copy of the MPL was not distributed with this file,
     7  // You can obtain one at http://mozilla.org/MPL/2.0/.
     8  
     9  package mysql
    10  
    11  import (
    12  	"database/sql/driver"
    13  	"io"
    14  )
    15  
    16  type mysqlField struct {
    17  	tableName string
    18  	name      string
    19  	flags     fieldFlag
    20  	fieldType byte
    21  	decimals  byte
    22  }
    23  
    24  type mysqlRows struct {
    25  	mc      *mysqlConn
    26  	columns []mysqlField
    27  }
    28  
    29  type binaryRows struct {
    30  	mysqlRows
    31  }
    32  
    33  type textRows struct {
    34  	mysqlRows
    35  }
    36  
    37  type emptyRows struct{}
    38  
    39  func (rows *mysqlRows) Columns() []string {
    40  	columns := make([]string, len(rows.columns))
    41  	if rows.mc != nil && rows.mc.cfg.ColumnsWithAlias {
    42  		for i := range columns {
    43  			if tableName := rows.columns[i].tableName; len(tableName) > 0 {
    44  				columns[i] = tableName + "." + rows.columns[i].name
    45  			} else {
    46  				columns[i] = rows.columns[i].name
    47  			}
    48  		}
    49  	} else {
    50  		for i := range columns {
    51  			columns[i] = rows.columns[i].name
    52  		}
    53  	}
    54  	return columns
    55  }
    56  
    57  func (rows *mysqlRows) Close() error {
    58  	mc := rows.mc
    59  	if mc == nil {
    60  		return nil
    61  	}
    62  	if mc.netConn == nil {
    63  		return ErrInvalidConn
    64  	}
    65  
    66  	// Remove unread packets from stream
    67  	err := mc.readUntilEOF()
    68  	if err == nil {
    69  		if err = mc.discardResults(); err != nil {
    70  			return err
    71  		}
    72  	}
    73  
    74  	rows.mc = nil
    75  	return err
    76  }
    77  
    78  func (rows *binaryRows) Next(dest []driver.Value) error {
    79  	if mc := rows.mc; mc != nil {
    80  		if mc.netConn == nil {
    81  			return ErrInvalidConn
    82  		}
    83  
    84  		// Fetch next row from stream
    85  		return rows.readRow(dest)
    86  	}
    87  	return io.EOF
    88  }
    89  
    90  func (rows *textRows) Next(dest []driver.Value) error {
    91  	if mc := rows.mc; mc != nil {
    92  		if mc.netConn == nil {
    93  			return ErrInvalidConn
    94  		}
    95  
    96  		// Fetch next row from stream
    97  		return rows.readRow(dest)
    98  	}
    99  	return io.EOF
   100  }
   101  
   102  func (rows emptyRows) Columns() []string {
   103  	return nil
   104  }
   105  
   106  func (rows emptyRows) Close() error {
   107  	return nil
   108  }
   109  
   110  func (rows emptyRows) Next(dest []driver.Value) error {
   111  	return io.EOF
   112  }