encodeTextValue static method
Representação de value no formato de entrada do PostgreSQL (antes do
escape do COPY):
- String: o próprio texto;
- int, double (
NaN,Infinity,-Infinity), bool (t/f); - DateTime: data, hora com microssegundos e deslocamento (
+00:00quando UTC). Numa colunatimestamptzgrava o instante; numa colunatimestampo PostgreSQL ignora o deslocamento e grava a data e a hora do próprio DateTime (locais ou UTC, conformeisUtc); numa colunadategrava a data; - Uint8List:
byteaem hexadecimal (\x...); - List: array (
{...}); para uma colunajson/jsonbcom um array JSON, passe uma String comjsonEncode(lista); - PostgresTextEncodable (PgInterval, PgTime, PgTimeTz, PgInet e tipos da aplicação) e PgPoint.
Outros tipos lançam ArgumentError.
Implementation
static String encodeTextValue(Object value) {
if (value is String) return value;
if (value is int) return value.toString();
if (value is double) {
if (value.isNaN) return 'NaN';
if (value.isInfinite) return value.isNegative ? '-Infinity' : 'Infinity';
return value.toString();
}
if (value is bool) return value ? 't' : 'f';
if (value is DateTime) return _encodeDateTime(value);
if (value is Uint8List) {
final hex = StringBuffer(r'\x');
for (final byte in value) {
hex.write(byte.toRadixString(16).padLeft(2, '0'));
}
return hex.toString();
}
if (value is Map) return json.encode(value);
if (value is List) {
final buffer = StringBuffer();
_writeArray(buffer, value);
return buffer.toString();
}
if (value is PostgresTextEncodable) return value.toPostgresText();
if (value is PgPoint) return '(${value.latitude},${value.longitude})';
throw ArgumentError.value(value, 'value',
'Cannot encode ${value.runtimeType} for COPY');
}