adaptValue function

Object? adaptValue(
  1. Object? value,
  2. String type,
  3. SqlDialect dialect
)

value read from another database, as dialect stores a column of type: JSON documents as text, 0/1 as booleans on PostgreSQL, dates as Laravel's Y-m-d H:i:s text on SQLite and MySQL.

Implementation

Object? adaptValue(Object? value, String type, SqlDialect dialect) {
  if (value == null) {
    return null;
  }
  if (value is Map || value is List) {
    return jsonEncode(value);
  }
  final t = type.toLowerCase();
  if (dialect == SqlDialect.postgres) {
    if (t.startsWith('bool')) {
      return switch (value) {
        bool() => value,
        num() => value != 0,
        String() => const {
          '1',
          't',
          'true',
          'y',
          'yes',
        }.contains(value.toLowerCase()),
        _ => value,
      };
    }
    return value;
  }
  if (value is DateTime) {
    final d = value.toUtc();
    String two(int v) => v.toString().padLeft(2, '0');
    final date =
        '${d.year.toString().padLeft(4, '0')}-${two(d.month)}-${two(d.day)}';
    return t == 'date'
        ? date
        : '$date ${two(d.hour)}:${two(d.minute)}:${two(d.second)}';
  }
  return value;
}