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  }