func (c *Conn) FieldList(table string, wildcard string) ([]*mysql.Field, error) { if err := c.writeCommandStrStr(mysql.COM_FIELD_LIST, table, wildcard); err != nil { return nil, err } data, err := c.readPacket() if err != nil { return nil, err } fs := make([]*mysql.Field, 0, 4) var f *mysql.Field if data[0] == mysql.ERR_HEADER { return nil, c.handleErrorPacket(data) } else { for { if data, err = c.readPacket(); err != nil { return nil, err } // EOF Packet if c.isEOFPacket(data) { return fs, nil } if f, err = mysql.FieldData(data).Parse(); err != nil { return nil, err } fs = append(fs, f) } } return nil, fmt.Errorf("field list error") }
func (c *Conn) readResultColumns(result *mysql.Result) (err error) { var i int = 0 var data []byte for { data, err = c.readPacket() if err != nil { return } // EOF Packet if c.isEOFPacket(data) { if c.capability&mysql.CLIENT_PROTOCOL_41 > 0 { //result.Warnings = binary.LittleEndian.Uint16(data[1:]) //todo add strict_mode, warning will be treat as error result.Status = binary.LittleEndian.Uint16(data[3:]) c.status = result.Status } if i != len(result.Fields) { err = mysql.ErrMalformPacket } return } result.Fields[i], err = mysql.FieldData(data).Parse() if err != nil { return } result.FieldNames[string(result.Fields[i].Name)] = i i++ } }