doSelectByIDs<R> method

  1. @override
FutureOr<List<R>> doSelectByIDs<R>(
  1. TransactionOperation op,
  2. String entityName,
  3. String table,
  4. List<Object> ids, {
  5. int? limit,
  6. int? offset,
  7. bool? orderByID,
  8. OrderDirection? orderDirection,
  9. PreFinishDBOperation<List<Map<String, dynamic>>, List<R>>? preFinish,
})
override

Ordering and pagination:

  • limit: the maximum number of returned entities. Also the page size of page.
  • offset: the return offset, for pagination.
  • page: the 1-based page to return, an ergonomic alternative to offset: it resolves to (page - 1) * limit. Requires a positive limit, and can't be combined with offset. See resolveSelectOffset.
  • orderByID: if true the result is ordered by the table ID column, automatically resolved from the table scheme (TableScheme.idFieldName) or from EntityHandler.idFieldName. Defaults to true when offset is defined, since a paginated select needs a stable order to be correct, and, with a SQL database, also when limit is defined (which rows an unordered LIMIT returns is undefined). Pass false to opt out.
  • orderDirection: the OrderDirection of the ordering, OrderDirection.ascending by default. Ignored while the ordering is not active (see orderByID).

A query over a to-many relationship returns (and counts, and paginates) each entity once: with a SQL database, its JOINs are in a subquery of the matching IDs. Note that 2 conditions over the same to-many relationship (roles.type == "a" && roles.type == "b") are, on SQL, over the same joined row, and in memory each over any related entity.

Implementation

@override
FutureOr<List<R>> doSelectByIDs<R>(
  TransactionOperation op,
  String entityName,
  String table,
  List<Object> ids, {
  int? limit,
  int? offset,
  bool? orderByID,
  OrderDirection? orderDirection,
  PreFinishDBOperation<List<Map<String, dynamic>>, List<R>>? preFinish,
}) => executeOperation<List<Map<String, dynamic>>, List<R>>(
  op,
  (conn) => _doSelectByIDsImpl<R>(
    table,
    ids,
    entityName,
    limit: limit,
    offset: offset,
    orderByID: orderByID,
    orderDirection: orderDirection,
  ),
  preFinish,
);