| 1130 | } |
| 1131 | |
| 1132 | func (ugb *UserGroupBy) sqlScan(ctx context.Context, root *UserQuery, v any) error { |
| 1133 | selector := root.sqlQuery(ctx).Select() |
| 1134 | aggregation := make([]string, 0, len(ugb.fns)) |
| 1135 | for _, fn := range ugb.fns { |
| 1136 | aggregation = append(aggregation, fn(selector)) |
| 1137 | } |
| 1138 | if len(selector.SelectedColumns()) == 0 { |
| 1139 | columns := make([]string, 0, len(*ugb.flds)+len(ugb.fns)) |
| 1140 | for _, f := range *ugb.flds { |
| 1141 | columns = append(columns, selector.C(f)) |
| 1142 | } |
| 1143 | columns = append(columns, aggregation...) |
| 1144 | selector.Select(columns...) |
| 1145 | } |
| 1146 | selector.GroupBy(selector.Columns(*ugb.flds...)...) |
| 1147 | if err := selector.Err(); err != nil { |
| 1148 | return err |
| 1149 | } |
| 1150 | rows := &sql.Rows{} |
| 1151 | query, args := selector.Query() |
| 1152 | if err := ugb.build.driver.Query(ctx, query, args, rows); err != nil { |
| 1153 | return err |
| 1154 | } |
| 1155 | defer rows.Close() |
| 1156 | return sql.ScanSlice(rows, v) |
| 1157 | } |
| 1158 | |
| 1159 | // UserSelect is the builder for selecting fields of User entities. |
| 1160 | type UserSelect struct { |