Skip to content

Commit 6a9e36b

Browse files
authored
Pass database_id from GetInstance() down to CreateFirestore() (#1270)
1 parent bd7a8df commit 6a9e36b

File tree

6 files changed

+67
-33
lines changed

6 files changed

+67
-33
lines changed

firestore/integration_test_internal/src/util/integration_test_util.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ struct TestFriend {
3737
static FirestoreInternal* CreateTestFirestoreInternal(App* app) {
3838
#if !defined(__ANDROID__)
3939
return new FirestoreInternal(
40-
app, absl::make_unique<credentials::EmptyAuthCredentialsProvider>(),
40+
app, /*database_id=*/"(default)",
41+
absl::make_unique<credentials::EmptyAuthCredentialsProvider>(),
4142
absl::make_unique<credentials::EmptyAppCheckCredentialsProvider>());
4243
#else
4344
return new FirestoreInternal(app);

firestore/integration_test_internal/src/validation_test.cc

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -440,6 +440,14 @@ TEST_F(ValidationTest,
440440
"database ID.");
441441
}
442442

443+
TEST_F(ValidationTest,
444+
FirestoreGetInstanceWithNoArgumentsReturnsNonNullInstance) {
445+
InitResult result;
446+
EXPECT_NO_THROW(Firestore::GetInstance(&result));
447+
EXPECT_EQ(kInitResultSuccess, result);
448+
EXPECT_NE(Firestore::GetInstance(), nullptr);
449+
}
450+
443451
TEST_F(ValidationTest,
444452
FirestoreGetInstanceWithNonNullAppReturnsNonNullInstance) {
445453
InitResult result;
@@ -448,6 +456,22 @@ TEST_F(ValidationTest,
448456
EXPECT_NE(Firestore::GetInstance(app()), nullptr);
449457
}
450458

459+
TEST_F(ValidationTest,
460+
FirestoreGetInstanceWithAppAndDatabaseNameReturnsNonNullInstance) {
461+
InitResult result;
462+
EXPECT_NO_THROW(Firestore::GetInstance(app(), "foo", &result));
463+
EXPECT_EQ(kInitResultSuccess, result);
464+
EXPECT_NE(Firestore::GetInstance(app(), "foo"), nullptr);
465+
}
466+
467+
TEST_F(ValidationTest,
468+
FirestoreGetInstanceWithDatabaseNameReturnsNonNullInstance) {
469+
InitResult result;
470+
EXPECT_NO_THROW(Firestore::GetInstance("foo", &result));
471+
EXPECT_EQ(kInitResultSuccess, result);
472+
EXPECT_NE(Firestore::GetInstance("foo"), nullptr);
473+
}
474+
451475
TEST_F(ValidationTest, CollectionPathsMustBeOddLength) {
452476
Firestore* db = TestFirestore();
453477
DocumentReference base_document = db->Document("foo/bar");

firestore/src/common/firestore.cc

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -118,45 +118,44 @@ void ValidateDatabase(const char* db_name) {
118118

119119
} // namespace
120120

121-
Firestore* Firestore::GetInstance(App* app, InitResult* init_result_out) {
122-
ValidateApp(app);
123-
124-
MutexLock lock(*g_firestores_lock);
125-
126-
Firestore* from_cache = FindFirestoreInCache(app, init_result_out);
127-
if (from_cache) {
128-
return from_cache;
121+
Firestore* Firestore::GetInstance(InitResult* init_result_out) {
122+
App* app = App::GetInstance();
123+
if (!app) {
124+
SimpleThrowInvalidArgument(
125+
"Failed to get firebase::App instance. Please call "
126+
"firebase::App::Create before using Firestore");
129127
}
128+
return Firestore::GetInstance(app, kDefaultDatabase, init_result_out);
129+
}
130130

131-
return AddFirestoreToCache(new Firestore(app), init_result_out);
131+
Firestore* Firestore::GetInstance(App* app, InitResult* init_result_out) {
132+
return Firestore::GetInstance(app, kDefaultDatabase, init_result_out);
132133
}
133134

134-
Firestore* Firestore::GetInstance(InitResult* init_result_out) {
135+
Firestore* Firestore::GetInstance(const char* db_name,
136+
InitResult* init_result_out) {
135137
App* app = App::GetInstance();
136138
if (!app) {
137139
SimpleThrowInvalidArgument(
138140
"Failed to get firebase::App instance. Please call "
139141
"firebase::App::Create before using Firestore");
140142
}
141-
142-
return Firestore::GetInstance(app, init_result_out);
143+
return Firestore::GetInstance(app, db_name, init_result_out);
143144
}
144145

145146
Firestore* Firestore::GetInstance(App* app,
146147
const char* db_name,
147148
InitResult* init_result_out) {
148149
ValidateApp(app);
149150
ValidateDatabase(db_name);
150-
// TODO(Mila): Implement code
151-
return Firestore::GetInstance(app, init_result_out);
152-
}
153151

154-
Firestore* Firestore::GetInstance(const char* db_name,
155-
InitResult* init_result_out) {
156-
ValidateDatabase(db_name);
157-
// TODO(Mila): Implement code
158-
App* app = App::GetInstance();
159-
return Firestore::GetInstance(app, init_result_out);
152+
MutexLock lock(*g_firestores_lock);
153+
Firestore* from_cache = FindFirestoreInCache(app, init_result_out);
154+
if (from_cache) {
155+
return from_cache;
156+
}
157+
158+
return AddFirestoreToCache(new Firestore(app, db_name), init_result_out);
160159
}
161160

162161
Firestore* Firestore::CreateFirestore(App* app,
@@ -190,8 +189,8 @@ Firestore* Firestore::AddFirestoreToCache(Firestore* firestore,
190189
return firestore;
191190
}
192191

193-
Firestore::Firestore(::firebase::App* app)
194-
: Firestore{new FirestoreInternal{app}} {}
192+
Firestore::Firestore(::firebase::App* app, const char* database_id)
193+
: Firestore{new FirestoreInternal{app, database_id}} {}
195194

196195
Firestore::Firestore(FirestoreInternal* internal)
197196
// TODO(wuandy): use make_unique once it is supported for our build here.

firestore/src/include/firebase/firestore.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,9 @@ class TransactionManager;
7272

7373
} // namespace csharp
7474

75+
/** The default name for "unset" database ID in resource names. */
76+
static const char* kDefaultDatabase = "(default)";
77+
7578
/**
7679
* @brief Entry point for the Firebase Firestore C++ SDK.
7780
*
@@ -492,7 +495,8 @@ class Firestore {
492495
friend class csharp::ApiHeaders;
493496
friend class csharp::TransactionManager;
494497

495-
explicit Firestore(::firebase::App* app);
498+
explicit Firestore(::firebase::App* app,
499+
const char* database_id = kDefaultDatabase);
496500
explicit Firestore(FirestoreInternal* internal);
497501

498502
static Firestore* CreateFirestore(::firebase::App* app,

firestore/src/main/firestore_main.cc

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -101,17 +101,20 @@ void ValidateDoubleSlash(const char* path) {
101101

102102
} // namespace
103103

104-
FirestoreInternal::FirestoreInternal(App* app)
105-
: FirestoreInternal{app, CreateCredentialsProvider(*app),
104+
FirestoreInternal::FirestoreInternal(App* app, const char* database_id)
105+
: FirestoreInternal{app, database_id, CreateCredentialsProvider(*app),
106106
CreateAppCheckCredentialsProvider(*app)} {}
107107

108108
FirestoreInternal::FirestoreInternal(
109109
App* app,
110+
const char* database_id,
110111
std::unique_ptr<AuthCredentialsProvider> auth_credentials,
111112
std::unique_ptr<AppCheckCredentialsProvider> app_check_credentials)
112113
: app_(NOT_NULL(app)),
113-
firestore_core_(CreateFirestore(
114-
app, std::move(auth_credentials), std::move(app_check_credentials))),
114+
firestore_core_(CreateFirestore(app,
115+
database_id,
116+
std::move(auth_credentials),
117+
std::move(app_check_credentials))),
115118
transaction_executor_(absl::ShareUniquePtr(Executor::CreateConcurrent(
116119
"com.google.firebase.firestore.transaction", /*threads=*/5))) {
117120
ApplyDefaultSettings();
@@ -131,13 +134,14 @@ FirestoreInternal::~FirestoreInternal() {
131134

132135
std::shared_ptr<api::Firestore> FirestoreInternal::CreateFirestore(
133136
App* app,
137+
const char* database_id,
134138
std::unique_ptr<AuthCredentialsProvider> auth_credentials,
135139
std::unique_ptr<AppCheckCredentialsProvider> app_check_credentials) {
136140
const AppOptions& opt = app->options();
137141
return std::make_shared<api::Firestore>(
138-
DatabaseId{opt.project_id()}, app->name(), std::move(auth_credentials),
139-
std::move(app_check_credentials), CreateWorkerQueue(),
140-
CreateFirebaseMetadataProvider(*app), this);
142+
DatabaseId{opt.project_id(), database_id}, app->name(),
143+
std::move(auth_credentials), std::move(app_check_credentials),
144+
CreateWorkerQueue(), CreateFirebaseMetadataProvider(*app), this);
141145
}
142146

143147
CollectionReference FirestoreInternal::Collection(

firestore/src/main/firestore_main.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class Executor;
5555
class FirestoreInternal {
5656
public:
5757
// Note: call `set_firestore_public` immediately after construction.
58-
explicit FirestoreInternal(App* app);
58+
FirestoreInternal(App* app, const char* database_id);
5959
~FirestoreInternal();
6060

6161
FirestoreInternal(const FirestoreInternal&) = delete;
@@ -150,12 +150,14 @@ class FirestoreInternal {
150150

151151
FirestoreInternal(
152152
App* app,
153+
const char* database_id,
153154
std::unique_ptr<credentials::AuthCredentialsProvider> auth_credentials,
154155
std::unique_ptr<credentials::AppCheckCredentialsProvider>
155156
app_check_credentials);
156157

157158
std::shared_ptr<api::Firestore> CreateFirestore(
158159
App* app,
160+
const char* database_id,
159161
std::unique_ptr<credentials::AuthCredentialsProvider> auth_credentials,
160162
std::unique_ptr<credentials::AppCheckCredentialsProvider>
161163
app_check_credentials);

0 commit comments

Comments
 (0)