FIRQuery+Internal.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /*
  2. * Copyright 2017 Google
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #import "FIRAggregateField.h"
  17. #import "FIRQuery.h"
  18. #include <memory>
  19. #include "Firestore/core/src/api/api_fwd.h"
  20. #include "Firestore/core/src/core/core_fwd.h"
  21. @class FIRFilter;
  22. namespace api = firebase::firestore::api;
  23. namespace core = firebase::firestore::core;
  24. NS_ASSUME_NONNULL_BEGIN
  25. @interface FIRQuery (/* Init */)
  26. - (instancetype)initWithQuery:(api::Query &&)query NS_DESIGNATED_INITIALIZER;
  27. - (instancetype)initWithQuery:(core::Query)query
  28. firestore:(std::shared_ptr<api::Firestore>)firestore;
  29. @end
  30. /** Internal FIRQuery API we don't want exposed in our public header files. */
  31. @interface FIRQuery (Internal)
  32. - (const core::Query &)query;
  33. - (const api::Query &)apiQuery;
  34. @end
  35. // TODO(sum/avg) move the contents of this FuturePublicApi category to
  36. // ../Public/FirebaseFirestore/FIRAggregateQuerySnapshot.h
  37. @interface FIRQuery (FuturePublicApi)
  38. /**
  39. * Creates and returns a new `AggregateQuery` that aggregates the documents in the result set
  40. * of this query, without actually downloading the documents.
  41. *
  42. * Using an `AggregateQuery` to perform aggregations is efficient because only the final aggregation
  43. * values, not the documents' data, is downloaded. The query can even aggregate the documents if the
  44. * result set would be prohibitively large to download entirely (e.g. thousands of documents).
  45. *
  46. * @param aggregations Specifies the aggregation operations to perform on the result set of this
  47. * query.
  48. *
  49. * @return An `AggregateQuery` encapsulating this `Query` and `AggregateField`s, which can be used
  50. * to query the server for the aggregation results.
  51. */
  52. - (FIRAggregateQuery *)aggregate:(NSArray<FIRAggregateField *> *)aggregations
  53. NS_SWIFT_NAME(aggregate(_:));
  54. @end
  55. NS_ASSUME_NONNULL_END