over method
Expr
over( - Iterable<Expr> partitionBy, {
- Iterable<Expr> orderBy = const [],
- WindowOptions options = const WindowOptions(),
})
Implementation
Expr over(
Iterable<Expr> partitionBy, {
Iterable<Expr> orderBy = const [],
WindowOptions options = const WindowOptions(),
}) {
final partitions = List<Expr>.unmodifiable(partitionBy);
final order = List<Expr>.unmodifiable(orderBy);
if (partitions.isEmpty && order.isEmpty) {
throw ArgumentError.value(
partitionBy,
'partitionBy',
'partitionBy and orderBy must not both be empty',
);
}
for (final value in [...partitions, ...order]) {
_runtime._requireExpr(value);
}
final leases = _leaseAll([
_owner,
...partitions.map((value) => value._owner),
...order.map((value) => value._owner),
]);
try {
final orderStart = 1 + partitions.length;
return _runtime._adoptExpr(
_runtime._client.invokeSync('exprOver', {
'input': leases.first.handle.toString(),
'partitionBy': leases
.sublist(1, orderStart)
.map((x) => x.handle.toString())
.toList(),
'orderBy': leases
.skip(orderStart)
.map((x) => x.handle.toString())
.toList(),
...options._toJson(),
}),
);
} finally {
_releaseAll(leases);
}
}