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;
}