mirror of
https://github.com/ent/ent.git
synced 2026-05-24 09:31:56 +03:00
entc/gen: allow group-by by relations
This commit is contained in:
committed by
Ariel Mashraki
parent
26b8f3b6b2
commit
a51c50f6a3
@@ -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 }}
|
||||
|
||||
Reference in New Issue
Block a user