(ctx context.Context, drv dialect.Driver)
| 1030 | } |
| 1031 | |
| 1032 | func (q *query) count(ctx context.Context, drv dialect.Driver) (int, error) { |
| 1033 | rows := &sql.Rows{} |
| 1034 | selector, err := q.selector(ctx) |
| 1035 | if err != nil { |
| 1036 | return 0, err |
| 1037 | } |
| 1038 | // Remove any ORDER BY clauses present in the COUNT query as |
| 1039 | // they are not allowed in some databases, such as PostgreSQL. |
| 1040 | if q.Order != nil { |
| 1041 | selector.ClearOrder() |
| 1042 | } |
| 1043 | // If no columns were selected in count, |
| 1044 | // the default selection is by node ids. |
| 1045 | columns := q.Node.Columns |
| 1046 | if len(columns) == 0 && q.Node.ID != nil { |
| 1047 | columns = append(columns, q.Node.ID.Column) |
| 1048 | } |
| 1049 | for i, c := range columns { |
| 1050 | columns[i] = selector.C(c) |
| 1051 | } |
| 1052 | if q.Unique { |
| 1053 | selector.SetDistinct(false) |
| 1054 | selector.Count(sql.Distinct(columns...)) |
| 1055 | } else { |
| 1056 | selector.Count(columns...) |
| 1057 | } |
| 1058 | query, args := selector.Query() |
| 1059 | if err := drv.Query(ctx, query, args, rows); err != nil { |
| 1060 | return 0, err |
| 1061 | } |
| 1062 | defer rows.Close() |
| 1063 | return sql.ScanInt(rows) |
| 1064 | } |
| 1065 | |
| 1066 | func (q *query) selector(ctx context.Context) (*sql.Selector, error) { |
| 1067 | selector := q.builder. |
no test coverage detected