entc/gen: allow group-by by relations

This commit is contained in:
Ariel Mashraki
2021-04-19 13:57:51 +03:00
committed by Ariel Mashraki
parent 26b8f3b6b2
commit a51c50f6a3
100 changed files with 1829 additions and 337 deletions

View File

@@ -32,11 +32,22 @@ func ({{ $receiver }} *{{ $builder }}) sqlScan(ctx context.Context, v interface{
func ({{ $receiver }} *{{ $builder }}) sqlQuery() *sql.Selector {
selector := {{ $receiver }}.sql
columns := make([]string, 0, len({{ $receiver }}.fields) + len({{ $receiver}}.fns))
columns = append(columns, {{ $receiver }}.fields...)
aggregation := make([]string, 0, len({{ $receiver}}.fns))
for _, fn := range {{ $receiver }}.fns {
columns = append(columns, fn(selector))
aggregation = append(aggregation, fn(selector))
}
return selector.Select(columns...).GroupBy({{ $receiver }}.fields...)
// If no columns were selected in a custom aggregation function, the default
// selection is the fields used for "group-by", and the aggregation functions.
if len(selector.Columns()) == 0 {
columns := make([]string, 0, len({{ $receiver }}.fields) + len({{ $receiver}}.fns))
for _, f := range {{ $receiver }}.fields {
columns = append(columns, selector.C(f))
}
for _, c := range aggregation {
columns = append(columns, c)
}
selector.Select(columns...)
}
return selector.GroupBy(selector.Columns({{ $receiver }}.fields...)...)
}
{{ end }}