MCPcopy Create free account
hub / github.com/IceFireDB/IceFireDB / ParseText

Method ParseText

IceFireDB-SQLite/pkg/mysql/mysql/rowdata.go:21–77  ·  view source on GitHub ↗
(f []*Field, dst []FieldValue)

Source from the content-addressed store, hash-verified

19}
20
21func (p RowData) ParseText(f []*Field, dst []FieldValue) ([]FieldValue, error) {
22 for len(dst) < len(f) {
23 dst = append(dst, FieldValue{})
24 }
25 data := dst[:len(f)]
26
27 var err error
28 var v []byte
29 var isNull bool
30 var pos int = 0
31 var n int = 0
32
33 for i := range f {
34 v, isNull, n, err = LengthEncodedString(p[pos:])
35 if err != nil {
36 return nil, errors.Trace(err)
37 }
38
39 pos += n
40
41 if isNull {
42 data[i].Type = FieldValueTypeNull
43 } else {
44 isUnsigned := f[i].Flag&UNSIGNED_FLAG != 0
45
46 switch f[i].Type {
47 case MYSQL_TYPE_TINY, MYSQL_TYPE_SHORT, MYSQL_TYPE_INT24,
48 MYSQL_TYPE_LONGLONG, MYSQL_TYPE_LONG, MYSQL_TYPE_YEAR:
49 if isUnsigned {
50 var val uint64
51 data[i].Type = FieldValueTypeUnsigned
52 val, err = strconv.ParseUint(utils.ByteSliceToString(v), 10, 64)
53 data[i].value = val
54 } else {
55 var val int64
56 data[i].Type = FieldValueTypeSigned
57 val, err = strconv.ParseInt(utils.ByteSliceToString(v), 10, 64)
58 data[i].value = utils.Int64ToUint64(val)
59 }
60 case MYSQL_TYPE_FLOAT, MYSQL_TYPE_DOUBLE:
61 var val float64
62 data[i].Type = FieldValueTypeFloat
63 val, err = strconv.ParseFloat(utils.ByteSliceToString(v), 64)
64 data[i].value = utils.Float64ToUint64(val)
65 default:
66 data[i].Type = FieldValueTypeString
67 data[i].str = append(data[i].str[:0], v...)
68 }
69
70 if err != nil {
71 return nil, errors.Trace(err)
72 }
73 }
74 }
75
76 return data, nil
77}
78

Callers 1

ParseMethod · 0.95

Calls 4

ByteSliceToStringFunction · 0.92
Int64ToUint64Function · 0.92
Float64ToUint64Function · 0.92
LengthEncodedStringFunction · 0.70

Tested by

no test coverage detected