visitGroupBy method

  1. @override
SqlFragment visitGroupBy(
  1. GroupByExpr e
)
override

Implementation

@override
SqlFragment visitGroupBy(GroupByExpr e) {
  // The translator does NOT build the full
  // `SELECT ... GROUP BY ...` statement here.
  // It returns the GROUP BY fragment, which
  // the caller (Queryable) splices into the
  // outer SELECT. This keeps the translator
  // composable: the `WHERE` translator + the
  // `GROUP BY` translator + the `HAVING`
  // translator each return their own fragment.
  final SqlFragment key = e.keySelector.accept(this);
  final List<SqlFragment> parts = <SqlFragment>[key];
  if (e.elementSelector != null) {
    parts.add(e.elementSelector!.accept(this));
  }
  final String cols = parts.map((SqlFragment f) => f.sql).join(', ');
  final List<Object?> binds =
      parts.expand((SqlFragment f) => f.binds).toList();
  return SqlFragment('GROUP BY $cols', binds);
}