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