encodeTextValue static method

String encodeTextValue(
  1. Object value
)

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:00 quando UTC). Numa coluna timestamptz grava o instante; numa coluna timestamp o PostgreSQL ignora o deslocamento e grava a data e a hora do próprio DateTime (locais ou UTC, conforme isUtc); numa coluna date grava a data;
  • Uint8List: bytea em hexadecimal (\x...);
  • List: array ({...}); para uma coluna json/jsonb com um array JSON, passe uma String com jsonEncode(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');
}