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 }