readField method

  1. @override
Object? readField(
  1. Field field,
  2. Buffer buffer
)
override

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;
  }
}