Skip to content

Commit

Permalink
Firestore DatabaseId in C++ (firebase#727)
Browse files Browse the repository at this point in the history
* Implement DataBaseId in C++

* add database_id_test to project

* fix project

* address changes

* fix style
  • Loading branch information
zxu123 committed Jan 29, 2018
1 parent 05ef5ae commit 6474a82
Show file tree
Hide file tree
Showing 6 changed files with 189 additions and 0 deletions.
4 changes: 4 additions & 0 deletions Firestore/Example/Firestore.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@
AB99452C1FE3018D00DFC1E6 /* FIRQuerySnapshotTests.m in Sources */ = {isa = PBXBuildFile; fileRef = AB99452B1FE3018D00DFC1E6 /* FIRQuerySnapshotTests.m */; };
AB99452E1FE30AC800DFC1E6 /* FIRFieldValueTests.m in Sources */ = {isa = PBXBuildFile; fileRef = AB99452D1FE30AC800DFC1E6 /* FIRFieldValueTests.m */; };
ABAEEF4F1FD5F8B100C966CB /* FIRQueryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = ABAEEF4E1FD5F8B100C966CB /* FIRQueryTests.m */; };
ABE6637A201FA81900ED349A /* database_id_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = AB71064B201FA60300344F18 /* database_id_test.cc */; };
ABF341051FE860CA00C48322 /* FSTAPIHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = ABF341021FE8593500C48322 /* FSTAPIHelpers.m */; };
ABF6506C201131F8005F2C74 /* timestamp_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = ABF6506B201131F8005F2C74 /* timestamp_test.cc */; };
AFE6114F0D4DAECBA7B7C089 /* Pods_Firestore_IntegrationTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B2FA635DF5D116A67A7441CD /* Pods_Firestore_IntegrationTests.framework */; };
Expand Down Expand Up @@ -257,6 +258,7 @@
AB380D03201BC6E400D97691 /* ordered_code_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ordered_code_test.cc; path = ../../core/test/firebase/firestore/util/ordered_code_test.cc; sourceTree = "<group>"; };
AB382F7B1FE02A1F007CA955 /* FIRDocumentReferenceTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FIRDocumentReferenceTests.m; sourceTree = "<group>"; };
AB382F7D1FE03059007CA955 /* FIRFieldPathTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FIRFieldPathTests.m; sourceTree = "<group>"; };
AB71064B201FA60300344F18 /* database_id_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = database_id_test.cc; sourceTree = "<group>"; };
AB7BAB332012B519001E0872 /* geo_point_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = geo_point_test.cc; path = ../../core/test/firebase/firestore/geo_point_test.cc; sourceTree = "<group>"; };
AB9945251FE2D71100DFC1E6 /* FIRCollectionReferenceTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FIRCollectionReferenceTests.m; sourceTree = "<group>"; };
AB9945271FE2DE0C00DFC1E6 /* FIRSnapshotMetadataTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FIRSnapshotMetadataTests.m; sourceTree = "<group>"; };
Expand Down Expand Up @@ -553,6 +555,7 @@
children = (
AB356EF6200EA5EB0089B766 /* field_value_test.cc */,
ABF6506B201131F8005F2C74 /* timestamp_test.cc */,
AB71064B201FA60300344F18 /* database_id_test.cc */,
);
name = model;
path = ../../core/test/firebase/firestore/model;
Expand Down Expand Up @@ -1222,6 +1225,7 @@
files = (
DE2EF0881F3D0B6E003D0CDC /* FSTTreeSortedDictionaryTests.m in Sources */,
DE51B1FD1F0D492C0013853F /* FSTSpecTests.m in Sources */,
ABE6637A201FA81900ED349A /* database_id_test.cc in Sources */,
ABAEEF4F1FD5F8B100C966CB /* FIRQueryTests.m in Sources */,
ABF341051FE860CA00C48322 /* FSTAPIHelpers.m in Sources */,
DE51B1CC1F0D48C00013853F /* FIRGeoPointTests.m in Sources */,
Expand Down
5 changes: 5 additions & 0 deletions Firestore/core/src/firebase/firestore/model/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,14 @@
cc_library(
firebase_firestore_model
SOURCES
database_id.cc
database_id.h
field_value.cc
field_value.h
timestamp.cc
timestamp.h
DEPENDS
absl_strings
firebase_firestore_util
firebase_firestore_types
)
40 changes: 40 additions & 0 deletions Firestore/core/src/firebase/firestore/model/database_id.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/*
* Copyright 2018 Google
*
* 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.
*/

#include "Firestore/core/src/firebase/firestore/model/database_id.h"

#include "Firestore/core/src/firebase/firestore/util/firebase_assert.h"

namespace firebase {
namespace firestore {
namespace model {

constexpr const char* DatabaseId::kDefaultDatabaseId;

DatabaseId::DatabaseId(const absl::string_view project_id,
const absl::string_view database_id)
: project_id_(project_id), database_id_(database_id) {
FIREBASE_ASSERT(!project_id.empty());
FIREBASE_ASSERT(!database_id.empty());
}

bool DatabaseId::IsDefaultDatabase() {
return database_id_ == kDefaultDatabaseId;
}

} // namespace model
} // namespace firestore
} // namespace firebase
92 changes: 92 additions & 0 deletions Firestore/core/src/firebase/firestore/model/database_id.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
/*
* Copyright 2018 Google
*
* 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.
*/

#ifndef FIRESTORE_CORE_SRC_FIREBASE_FIRESTORE_MODEL_DATABASE_ID_H_
#define FIRESTORE_CORE_SRC_FIREBASE_FIRESTORE_MODEL_DATABASE_ID_H_

#include <string>

#include "absl/strings/string_view.h"

namespace firebase {
namespace firestore {
namespace model {

/** A DatabaseId represents a particular database in the Firestore. */
class DatabaseId {
public:
/** The default name for "unset" database ID in resource names. */
static constexpr const char* kDefaultDatabaseId = "(default)";

/**
* Creates and returns a new DatabaseId.
*
* @param project_id The project for the database.
* @param database_id The database in the project to use.
*/
DatabaseId(const absl::string_view project_id,
const absl::string_view database_id);

const std::string& project_id() const {
return project_id_;
}

const std::string& database_id() const {
return database_id_;
}

/** Whether this is the default database of the project. */
bool IsDefaultDatabase();

friend bool operator<(const DatabaseId& lhs, const DatabaseId& rhs);

private:
const std::string project_id_;
const std::string database_id_;
};

/** Compares against another DatabaseId. */
inline bool operator<(const DatabaseId& lhs, const DatabaseId& rhs) {
return lhs.project_id_ < rhs.project_id_ ||
(lhs.project_id_ == rhs.project_id_ &&
lhs.database_id_ < rhs.database_id_);
}

inline bool operator>(const DatabaseId& lhs, const DatabaseId& rhs) {
return rhs < lhs;
}

inline bool operator>=(const DatabaseId& lhs, const DatabaseId& rhs) {
return !(lhs < rhs);
}

inline bool operator<=(const DatabaseId& lhs, const DatabaseId& rhs) {
return !(lhs > rhs);
}

inline bool operator!=(const DatabaseId& lhs, const DatabaseId& rhs) {
return lhs < rhs || lhs > rhs;
}

inline bool operator==(const DatabaseId& lhs, const DatabaseId& rhs) {
return !(lhs != rhs);
}

} // namespace model
} // namespace firestore
} // namespace firebase

#endif // FIRESTORE_CORE_SRC_FIREBASE_FIRESTORE_MODEL_DATABASE_ID_H_
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
cc_test(
firebase_firestore_model_test
SOURCES
database_id_test.cc
field_value_test.cc
timestamp_test.cc
DEPENDS
Expand Down
47 changes: 47 additions & 0 deletions Firestore/core/test/firebase/firestore/model/database_id_test.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/*
* Copyright 2018 Google
*
* 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.
*/

#include "Firestore/core/src/firebase/firestore/model/database_id.h"

#include "gtest/gtest.h"

namespace firebase {
namespace firestore {
namespace model {

TEST(DatabaseId, Constructor) {
DatabaseId id("p", "d");
EXPECT_EQ("p", id.project_id());
EXPECT_EQ("d", id.database_id());
EXPECT_FALSE(id.IsDefaultDatabase());
}

TEST(DatabaseId, DefaultDb) {
DatabaseId id("p", DatabaseId::kDefaultDatabaseId);
EXPECT_EQ("p", id.project_id());
EXPECT_EQ(DatabaseId::kDefaultDatabaseId, id.database_id());
EXPECT_TRUE(id.IsDefaultDatabase());
}

TEST(DatabaseId, Comparison) {
EXPECT_LT(DatabaseId("a", "b"), DatabaseId("b", "a"));
EXPECT_LT(DatabaseId("a", "b"), DatabaseId("a", "c"));
EXPECT_EQ(DatabaseId("a", "b"), DatabaseId("a", "b"));
}

} // namespace model
} // namespace firestore
} // namespace firebase

0 comments on commit 6474a82

Please sign in to comment.