github.com/altipla-consulting/ravendb-go-client@v0.1.3/group_by_document_query.go (about) 1 package ravendb 2 3 // GroupByDocumentQuery represents a "group by" query 4 type GroupByDocumentQuery struct { 5 query *DocumentQuery 6 err error 7 } 8 9 func newGroupByDocumentQuery(query *DocumentQuery) *GroupByDocumentQuery { 10 return &GroupByDocumentQuery{ 11 query: query, 12 } 13 } 14 15 func (q *GroupByDocumentQuery) SelectKey() *GroupByDocumentQuery { 16 if q.err != nil { 17 return q 18 } 19 return q.SelectKeyWithNameAndProjectedName("", "") 20 } 21 22 func (q *GroupByDocumentQuery) SelectKeyWithName(fieldName string) *GroupByDocumentQuery { 23 if q.err != nil { 24 return q 25 } 26 return q.SelectKeyWithNameAndProjectedName(fieldName, "") 27 } 28 29 func (q *GroupByDocumentQuery) SelectKeyWithNameAndProjectedName(fieldName string, projectedName string) *GroupByDocumentQuery { 30 if q.err != nil { 31 return q 32 } 33 q.err = q.query.groupByKey(fieldName, projectedName) 34 return q 35 } 36 37 func (q *GroupByDocumentQuery) SelectSum(field *GroupByField, fields ...*GroupByField) *DocumentQuery { 38 if q.err != nil { 39 q.query.err = q.err 40 return q.query 41 } 42 43 if field == nil { 44 q.err = newIllegalArgumentError("Field cannot be null") 45 } 46 47 q.err = q.query.groupBySum(field.FieldName, field.ProjectedName) 48 if q.err != nil { 49 q.query.err = q.err 50 return q.query 51 } 52 53 if len(fields) == 0 { 54 return q.query 55 } 56 57 for _, f := range fields { 58 q.err = q.query.groupBySum(f.FieldName, f.ProjectedName) 59 if q.err != nil { 60 q.query.err = q.err 61 break 62 } 63 } 64 65 return q.query 66 } 67 68 func (q *GroupByDocumentQuery) SelectCount() *DocumentQuery { 69 return q.SelectCountWithName("count") 70 } 71 72 func (q *GroupByDocumentQuery) SelectCountWithName(projectedName string) *DocumentQuery { 73 if q.err != nil { 74 q.query.err = q.err 75 return q.query 76 } 77 q.err = q.query.groupByCount(projectedName) 78 if q.err != nil { 79 q.query.err = q.err 80 } 81 return q.query 82 }