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