| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- /*
- * Copyright 2023 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- #import "FIRAggregateField.h"
- #include <string>
- #import "Firestore/Source/API/FIRAggregateField+Internal.h"
- #import "Firestore/Source/API/FIRFieldPath+Internal.h"
- using firebase::firestore::model::AggregateField;
- NS_ASSUME_NONNULL_BEGIN
- #pragma mark - FIRAggregateField
- @interface FIRAggregateField ()
- @property(nonatomic, strong) FIRFieldPath *_fieldPath;
- @property(nonatomic, readwrite) model::AggregateField::OpKind _op;
- - (instancetype)initWithFieldPathAndKind:(nullable FIRFieldPath *)fieldPath
- opKind:(model::AggregateField::OpKind)op;
- @end
- @implementation FIRAggregateField
- - (instancetype)initWithFieldPathAndKind:(nullable FIRFieldPath *)fieldPath
- opKind:(model::AggregateField::OpKind)op {
- if (self = [super init]) {
- self._fieldPath = fieldPath;
- self._op = op;
- }
- return self;
- }
- - (FIRFieldPath *)fieldPath {
- return [self _fieldPath];
- }
- - (const std::string)name {
- switch ([self _op]) {
- case AggregateField::OpKind::Sum:
- return std::string("sum");
- case AggregateField::OpKind::Avg:
- return std::string("avg");
- case AggregateField::OpKind::Count:
- return std::string("count");
- }
- UNREACHABLE();
- }
- - (model::AggregateField)createInternalValue {
- if (self.fieldPath != Nil) {
- return model::AggregateField([self _op], [self createAlias], self.fieldPath.internalValue);
- } else {
- return model::AggregateField([self _op], [self createAlias]);
- }
- }
- - (model::AggregateAlias)createAlias {
- if (self.fieldPath != Nil) {
- return model::AggregateAlias([self name] + std::string{"_"} +
- self.fieldPath.internalValue.CanonicalString());
- } else {
- return model::AggregateAlias([self name]);
- }
- }
- + (instancetype)aggregateFieldForCount {
- return [[FSTCountAggregateField alloc] initPrivate];
- }
- + (instancetype)aggregateFieldForSumOfField:(NSString *)field {
- return [self aggregateFieldForSumOfFieldPath:[FIRFieldPath pathWithDotSeparatedString:field]];
- }
- + (instancetype)aggregateFieldForSumOfFieldPath:(FIRFieldPath *)fieldPath {
- return [[FSTSumAggregateField alloc] initWithFieldPath:fieldPath];
- }
- + (instancetype)aggregateFieldForAverageOfField:(NSString *)field {
- return [self aggregateFieldForAverageOfFieldPath:[FIRFieldPath pathWithDotSeparatedString:field]];
- }
- + (instancetype)aggregateFieldForAverageOfFieldPath:(FIRFieldPath *)fieldPath {
- return [[FSTAverageAggregateField alloc] initWithFieldPath:fieldPath];
- }
- @end
- #pragma mark - FSTSumAggregateField
- @implementation FSTSumAggregateField
- - (instancetype)initWithFieldPath:(FIRFieldPath *)fieldPath {
- self = [super initWithFieldPathAndKind:fieldPath opKind:model::AggregateField::OpKind::Sum];
- return self;
- }
- @end
- #pragma mark - FSTAverageAggregateField
- @implementation FSTAverageAggregateField
- - (instancetype)initWithFieldPath:(FIRFieldPath *)fieldPath {
- self = [super initWithFieldPathAndKind:fieldPath opKind:model::AggregateField::OpKind::Avg];
- return self;
- }
- @end
- #pragma mark - FSTCountAggregateField
- @implementation FSTCountAggregateField
- - (instancetype)initPrivate {
- self = [super initWithFieldPathAndKind:Nil opKind:model::AggregateField::OpKind::Count];
- return self;
- }
- @end
- NS_ASSUME_NONNULL_END
|