readField method
Implementation
@override
Object? readField(Field field, Buffer buffer) {
List<int> list;
var length = buffer.readLengthCodedBinary();
if (length != null) {
list = buffer.readList(length);
} else {
return null;
}
switch (field.type) {
case FIELD_TYPE_TINY: // tinyint/bool
case FIELD_TYPE_SHORT: // smallint
case FIELD_TYPE_INT24: // mediumint
case FIELD_TYPE_LONGLONG: // bigint/serial
case FIELD_TYPE_LONG: // int
var s = utf8.decode(list);
return int.parse(s);
case FIELD_TYPE_NEWDECIMAL: // decimal
case FIELD_TYPE_FLOAT: // float
case FIELD_TYPE_DOUBLE: // double
var s = utf8.decode(list);
return double.parse(s);
case FIELD_TYPE_BIT: // bit
var value = 0;
for (var num in list) {
value = (value << 8) + num;
}
return value;
case FIELD_TYPE_DATE: // date
case FIELD_TYPE_DATETIME: // datetime
case FIELD_TYPE_TIMESTAMP: // timestamp
var s = utf8.decode(list);
return parseDateTimeInUtc(s);
case FIELD_TYPE_TIME: // time
var s = utf8.decode(list);
var parts = s.split(':');
return Duration(
days: 0,
hours: int.parse(parts[0]),
minutes: int.parse(parts[1]),
seconds: int.parse(parts[2]),
milliseconds: 0);
case FIELD_TYPE_YEAR: // year
var s = utf8.decode(list);
return int.parse(s);
case FIELD_TYPE_JSON:
var s = utf8.decode(list);
return s;
case FIELD_TYPE_STRING: // char/binary/enum/set
case FIELD_TYPE_VAR_STRING: // varchar/varbinary
var s = utf8.decode(list);
return s;
case FIELD_TYPE_BLOB:
case FIELD_TYPE_TINY_BLOB:
case FIELD_TYPE_MEDIUM_BLOB:
case FIELD_TYPE_LONG_BLOB: // tinytext/text/mediumtext/longtext/tinyblob/mediumblob/blob/longblob
return Blob.fromBytes(list);
case FIELD_TYPE_GEOMETRY: // geometry
var s = utf8.decode(list);
return s;
default:
return null;
}
}