Literal<T> constructor
Literal<T> (
- T value
Implementation
factory Literal(T value) {
// TODO: Consider asking Lasse how to actually switch over T, because null is not a type!
// TODO: We need to switch over T or use an extension method! If someone does
// select(toExpr(null as bool?)).union(select(toExpr(true)))
// We'll have a expression that can't actually decode bools!
switch (value) {
case true:
return true$ as Literal<T>;
case false:
return false$ as Literal<T>;
case null:
return null$ as Literal<T>;
case String _:
return Literal._(value, ColumnType.text as _ExprType<T>);
case int _:
return Literal._(value, ColumnType.integer as _ExprType<T>);
case double _:
return Literal._(value, ColumnType.real as _ExprType<T>);
case Uint8List _:
return Literal._(value, ColumnType.blob as _ExprType<T>);
case DateTime _:
return Literal._(value, ColumnType.dateTime as _ExprType<T>);
case CustomDataType _:
throw ArgumentError.value(
value,
'value',
'Use Literal.custom for CustomDataType!',
);
default:
throw ArgumentError.value(
value,
'value',
'Only String, int, double, bool, null, and DateTime '
'literals are allowed',
);
}
}