eval method
Evaluate this expression in the context of row (column name -> value).
Implementation
@override
Object? eval(Map<String, Object?> row) {
final v = expr.eval(row);
if (v == null) return null;
// CAST has more lenient conversion than the implicit table coercion:
// - double->int truncates
// - int/double->TEXT stringifies
switch (targetType) {
case DataType.integer:
if (v is int) return v;
if (v is double) return v.truncate();
if (v is String) {
final i = int.tryParse(v);
if (i != null) return i;
final d = double.tryParse(v);
if (d != null) return d.truncate();
return 0;
}
if (v is bool) return v ? 1 : 0;
return coerce(v, targetType);
case DataType.real:
if (v is num) return v.toDouble();
if (v is String) return double.tryParse(v) ?? 0.0;
return coerce(v, targetType);
case DataType.text:
return v.toString();
default:
return coerce(v, targetType);
}
}