buildSelectStatement method
JoinedSelectStatement<$Table, $Dataclass>
buildSelectStatement({
- Iterable<
Expression< ? targetColumns,Object> >
Builds a select statement with the given target columns, or all columns if none are provided
Implementation
JoinedSelectStatement<$Table, $Dataclass> buildSelectStatement(
{Iterable<Expression>? targetColumns}) {
final joins = joinBuilders.map((e) => e.buildJoin()).toList();
JoinedSelectStatement<$Table, $Dataclass> joinedStatement;
// If we are only selecting specific columns, we can use a selectOnly statement
if (targetColumns != null) {
joinedStatement =
(db.selectOnly(_tableAsTableInfo, distinct: distinct ?? false)
..addColumns(targetColumns));
// Add the joins to the statement
joinedStatement = joinedStatement.join(joins)
as JoinedSelectStatement<$Table, $Dataclass>;
} else {
joinedStatement = db
.select(_tableAsTableInfo, distinct: distinct ?? false)
.join(joins) as JoinedSelectStatement<$Table, $Dataclass>;
}
// Add any additional columns/expression that were added
joinedStatement.addColumns(addedColumns);
// If there are any added column, then group by primary key and apply filter to it
// other wise add the filter to the select directly
if (addedColumns.isNotEmpty) {
// ignore: invalid_use_of_visible_for_overriding_member
joinedStatement.groupBy(table.primaryKey!, having: filter);
} else if (filter != null) {
joinedStatement.where(filter!);
}
// Apply orderings and limits
joinedStatement
.orderBy(orderingBuilders.map((e) => e.buildTerm()).toList());
if (limit != null) {
joinedStatement.limit(limit!, offset: offset);
}
return joinedStatement;
}