//compare value using asc func cmpValue(v1 interface{}, v2 interface{}) int { if v1 == nil && v2 == nil { return 0 } else if v1 == nil { return -1 } else if v2 == nil { return 1 } switch v := v1.(type) { case string: s := v2.(string) return bytes.Compare(hack.Slice(v), hack.Slice(s)) case []byte: s := v2.([]byte) return bytes.Compare(v, s) case int64: s := v2.(int64) if v < s { return -1 } else if v > s { return 1 } else { return 0 } case uint64: s := v2.(uint64) if v < s { return -1 } else if v > s { return 1 } else { return 0 } case float64: s := v2.(float64) if v < s { return -1 } else if v > s { return 1 } else { return 0 } default: //can not go here panic(fmt.Sprintf("invalid type %T", v)) } }
func (c *Conn) buildSimpleShowResultset(values []interface{}, name string) (*Resultset, error) { r := new(Resultset) field := &Field{} field.Name = hack.Slice(name) field.Charset = 33 field.Type = MYSQL_TYPE_VAR_STRING r.Fields = []*Field{field} var row []byte var err error for _, value := range values { row, err = formatValue(value) if err != nil { return nil, err } r.RowDatas = append(r.RowDatas, PutLengthEncodedString(row)) } return r, nil }