mirror of https://github.com/AMT-Cheif/drift.git
Avoid repeated allocations.
This commit is contained in:
parent
059108fff6
commit
1a1f53f60d
|
@ -157,19 +157,15 @@ class _BoundArguments {
|
||||||
final List<Type> types;
|
final List<Type> types;
|
||||||
final List<TypedValue> parameters;
|
final List<TypedValue> parameters;
|
||||||
|
|
||||||
_BoundArguments(this.types, this.parameters);
|
_BoundArguments(this.parameters)
|
||||||
|
: types = parameters.map((p) => p.type).toList(growable: false);
|
||||||
|
|
||||||
factory _BoundArguments.ofDartArgs(List<Object?> args) {
|
factory _BoundArguments.ofDartArgs(List<Object?> args) {
|
||||||
final types = <Type>[];
|
final parameters = List<TypedValue>.generate(
|
||||||
final parameters = <TypedValue>[];
|
args.length,
|
||||||
|
(i) {
|
||||||
void add(TypedValue param) {
|
final value = args[i];
|
||||||
types.add(param.type);
|
return switch (value) {
|
||||||
parameters.add(param);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (final value in args) {
|
|
||||||
add(switch (value) {
|
|
||||||
TypedValue() => value,
|
TypedValue() => value,
|
||||||
null => TypedValue(Type.text, null),
|
null => TypedValue(Type.text, null),
|
||||||
int() || BigInt() => TypedValue(Type.bigInteger, value),
|
int() || BigInt() => TypedValue(Type.bigInteger, value),
|
||||||
|
@ -178,10 +174,12 @@ class _BoundArguments {
|
||||||
double() => TypedValue(Type.double, value),
|
double() => TypedValue(Type.double, value),
|
||||||
List<int>() => TypedValue(Type.byteArray, value),
|
List<int>() => TypedValue(Type.byteArray, value),
|
||||||
_ => throw ArgumentError.value(value, 'value', 'Unsupported type'),
|
_ => throw ArgumentError.value(value, 'value', 'Unsupported type'),
|
||||||
});
|
};
|
||||||
}
|
},
|
||||||
|
growable: false,
|
||||||
|
);
|
||||||
|
|
||||||
return _BoundArguments(types, parameters);
|
return _BoundArguments(parameters);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue