adaptValue function
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;
}