Skip to content

Commit 76e5b20

Browse files
committed
[realppl 7] realppl integration with remote/local and unit tests
1 parent 96a4345 commit 76e5b20

File tree

77 files changed

+2882
-408
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

77 files changed

+2882
-408
lines changed

Firestore/Example/Firestore.xcodeproj/project.pbxproj

Lines changed: 24 additions & 9 deletions
Large diffs are not rendered by default.

Firestore/Example/Tests/SpecTests/FSTMockDatastore.mm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ bool IsOpen() const override {
109109
}
110110

111111
void WatchQuery(const TargetData& query) override {
112-
LOG_DEBUG("WatchQuery: %s: %s, %s", query.target_id(), query.target().ToString(),
112+
LOG_DEBUG("WatchQuery: %s: %s, %s", query.target_id(), query.target_or_pipeline().ToString(),
113113
query.resume_token().ToString());
114114

115115
// Snapshot version is ignored on the wire

Firestore/Example/Tests/SpecTests/FSTSpecTests.mm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -982,7 +982,7 @@ - (void)validateActiveTargets {
982982
const TargetData &actual = found->second;
983983

984984
XCTAssertEqual(actual.purpose(), targetData.purpose());
985-
XCTAssertEqual(actual.target(), targetData.target());
985+
XCTAssertEqual(actual.target_or_pipeline(), targetData.target_or_pipeline());
986986
XCTAssertEqual(actual.target_id(), targetData.target_id());
987987
XCTAssertEqual(actual.snapshot_version(), targetData.snapshot_version());
988988
XCTAssertEqual(actual.resume_token(), targetData.resume_token());

Firestore/core/src/api/api_fwd.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ class Firestore;
4646
class ListenerRegistration;
4747
class Pipeline;
4848
class PipelineSnapshot;
49+
class RealtimePipeline;
4950
class Query;
5051
class QuerySnapshot;
5152
class Settings;

Firestore/core/src/api/expressions.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ google_firestore_v1_Value Constant::to_proto() const {
5050
return *model::DeepClone(*value_).release();
5151
}
5252

53+
const google_firestore_v1_Value& Constant::value() const {
54+
return *value_;
55+
}
56+
5357
std::unique_ptr<core::EvaluableExpr> Constant::ToEvaluable() const {
5458
return std::make_unique<core::CoreConstant>(
5559
std::make_unique<Constant>(*this));

Firestore/core/src/api/expressions.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ class Constant : public Expr {
8080
}
8181
google_firestore_v1_Value to_proto() const override;
8282

83+
const google_firestore_v1_Value& value() const;
84+
8385
std::unique_ptr<core::EvaluableExpr> ToEvaluable() const override;
8486

8587
private:

Firestore/core/src/api/ordering.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,18 @@ class Ordering {
4949
return expr_.get();
5050
}
5151

52+
const std::shared_ptr<Expr> expr_shared() const {
53+
return expr_;
54+
}
55+
5256
Direction direction() const {
5357
return direction_;
5458
}
5559

60+
Ordering WithReversedDirection() const {
61+
return Ordering(expr_, direction_ == ASCENDING ? DESCENDING : ASCENDING);
62+
}
63+
5664
google_firestore_v1_Value to_proto() const;
5765

5866
private:

Firestore/core/src/api/query_snapshot.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,8 @@ void QuerySnapshot::ForEachChange(
110110
// Special case the first snapshot because index calculation is easy and
111111
// fast. Also all changes on the first snapshot are adds so there are also
112112
// no metadata-only changes to filter out.
113-
DocumentComparator doc_comparator = snapshot_.query().Comparator();
113+
DocumentComparator doc_comparator =
114+
snapshot_.query_or_pipeline().Comparator();
114115
absl::optional<Document> last_document;
115116
size_t index = 0;
116117
for (const DocumentViewChange& change : snapshot_.document_changes()) {

Firestore/core/src/api/realtime_pipeline.cc

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include <memory>
2020
#include <utility>
2121

22+
#include "Firestore/core/src/core/pipeline_util.h"
2223
#include "Firestore/core/src/remote/serializer.h"
2324

2425
namespace firebase {
@@ -27,16 +28,35 @@ namespace api {
2728

2829
RealtimePipeline::RealtimePipeline(
2930
std::vector<std::shared_ptr<EvaluableStage>> stages,
30-
remote::Serializer serializer)
31-
: stages_(std::move(stages)), serializer_(serializer) {
31+
std::unique_ptr<remote::Serializer> serializer)
32+
: stages_(std::move(stages)), serializer_(std::move(serializer)) {
33+
this->rewritten_stages_ = core::RewriteStages(this->stages());
34+
}
35+
36+
RealtimePipeline::RealtimePipeline(const RealtimePipeline& other)
37+
: stages_(other.stages_),
38+
rewritten_stages_(other.rewritten_stages_),
39+
serializer_(std::make_unique<remote::Serializer>(
40+
other.serializer_->database_id())) {
41+
}
42+
43+
RealtimePipeline& RealtimePipeline::operator=(const RealtimePipeline& other) {
44+
if (this != &other) {
45+
stages_ = other.stages_;
46+
rewritten_stages_ = other.rewritten_stages_;
47+
serializer_ =
48+
std::make_unique<remote::Serializer>(other.serializer_->database_id());
49+
}
50+
return *this;
3251
}
3352

3453
RealtimePipeline RealtimePipeline::AddingStage(
3554
std::shared_ptr<EvaluableStage> stage) {
3655
auto copy = std::vector<std::shared_ptr<EvaluableStage>>(this->stages_);
3756
copy.push_back(stage);
3857

39-
return {copy, serializer_};
58+
return {copy,
59+
std::make_unique<remote::Serializer>(serializer_->database_id())};
4060
}
4161

4262
const std::vector<std::shared_ptr<EvaluableStage>>& RealtimePipeline::stages()
@@ -49,13 +69,8 @@ RealtimePipeline::rewritten_stages() const {
4969
return this->rewritten_stages_;
5070
}
5171

52-
void RealtimePipeline::SetRewrittentStages(
53-
std::vector<std::shared_ptr<EvaluableStage>> stages) {
54-
this->rewritten_stages_ = std::move(stages);
55-
}
56-
57-
EvaluateContext RealtimePipeline::evaluate_context() {
58-
return EvaluateContext(&serializer_);
72+
EvaluateContext RealtimePipeline::evaluate_context() const {
73+
return EvaluateContext(serializer_.get());
5974
}
6075

6176
} // namespace api

Firestore/core/src/api/realtime_pipeline.h

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,36 +18,37 @@
1818
#define FIRESTORE_CORE_SRC_API_REALTIME_PIPELINE_H_
1919

2020
#include <memory>
21-
#include <utility>
2221
#include <vector>
2322

24-
#include "Firestore/core/src/api/firestore.h"
25-
#include "Firestore/core/src/api/pipeline_snapshot.h"
2623
#include "Firestore/core/src/api/stages.h"
27-
#include "Firestore/core/src/remote/serializer.h"
2824

2925
namespace firebase {
3026
namespace firestore {
27+
namespace remote {
28+
class Serializer;
29+
} // namespace remote
30+
3131
namespace api {
3232

3333
class RealtimePipeline {
3434
public:
3535
RealtimePipeline(std::vector<std::shared_ptr<EvaluableStage>> stages,
36-
remote::Serializer serializer);
36+
std::unique_ptr<remote::Serializer> serializer);
37+
38+
RealtimePipeline(const RealtimePipeline& other);
39+
RealtimePipeline& operator=(const RealtimePipeline& other);
3740

3841
RealtimePipeline AddingStage(std::shared_ptr<EvaluableStage> stage);
3942

4043
const std::vector<std::shared_ptr<EvaluableStage>>& stages() const;
4144
const std::vector<std::shared_ptr<EvaluableStage>>& rewritten_stages() const;
4245

43-
void SetRewrittentStages(std::vector<std::shared_ptr<EvaluableStage>>);
44-
45-
EvaluateContext evaluate_context();
46+
EvaluateContext evaluate_context() const;
4647

4748
private:
4849
std::vector<std::shared_ptr<EvaluableStage>> stages_;
4950
std::vector<std::shared_ptr<EvaluableStage>> rewritten_stages_;
50-
remote::Serializer serializer_;
51+
std::unique_ptr<remote::Serializer> serializer_;
5152
};
5253

5354
} // namespace api

0 commit comments

Comments
 (0)