getBestMatchDartType method

Type getBestMatchDartType(
  1. int columnLength
)

Retorna o melhor tipo Dart para representar os dados da coluna, levando em consideração o tamanho da coluna (columnLength) e o tipo MySQL (_value).

Por exemplo, tipos textuais são mapeados para String, enquanto tipos BLOB são mapeados para Uint8List. Alguns tipos numéricos são mapeados para int ou double.

Implementation

Type getBestMatchDartType(int columnLength) {
  switch (_value) {
    // Para JSON, definimos como string:
    case mysqlColumnTypeJson:
      return String;

    // Tipos de texto e enumerações → String.
    case mysqlColumnTypeString:
    case mysqlColumnTypeVarString:
    case mysqlColumnTypeVarChar:
    case mysqlColumnTypeEnum:
    case mysqlColumnTypeSet:
      return String;

    // Tipos BLOB → Uint8List.
    case mysqlColumnTypeLongBlob:
    case mysqlColumnTypeMediumBlob:
    case mysqlColumnTypeBlob:
    case mysqlColumnTypeTinyBlob:
      return Uint8List;

    // Outros tipos que preferimos como String (ex.: DECIMAL, BIT, etc.).
    case mysqlColumnTypeGeometry:
    case mysqlColumnTypeBit:
    case mysqlColumnTypeDecimal:
    case mysqlColumnTypeNewDecimal:
      return String;

    // TINY(1) → bool; senão int.
    case mysqlColumnTypeTiny:
      if (columnLength == 1) {
        return bool;
      } else {
        return int;
      }

    case mysqlColumnTypeShort:
    case mysqlColumnTypeLong:
    case mysqlColumnTypeLongLong:
    case mysqlColumnTypeInt24:
    case mysqlColumnTypeYear:
      return int;

    case mysqlColumnTypeFloat:
    case mysqlColumnTypeDouble:
      return double;

    case mysqlColumnTypeDate:
    case mysqlColumnTypeDateTime2:
    case mysqlColumnTypeDateTime:
    case mysqlColumnTypeTimestamp:
    case mysqlColumnTypeTimestamp2:
      return DateTime;

    default:
      // Se não reconhecemos, devolvemos como String.
      return String;
  }
}