Skip to content

Commit ad0f20b

Browse files
committed
feat: support for specifying databaseId
This commit adds support for specifying the databaseId when creating a FirebaseFirestore instance. This allows users to connect to a specific database within their Firebase project. The `firestore` function now accepts an optional `databaseId` parameter. If not provided, it defaults to the default database for the project. Additionally, the `NativeFirebaseFirestoreWrapper` now stores the databaseId and uses it when initializing the Firestore instance.
1 parent f6ee9e6 commit ad0f20b

File tree

11 files changed

+25
-19
lines changed

11 files changed

+25
-19
lines changed

firebase-firestore/api/android/firebase-firestore.api

+2-1
Original file line numberDiff line numberDiff line change
@@ -730,7 +730,8 @@ public final class dev/gitlive/firebase/firestore/_encodersKt {
730730
}
731731

732732
public final class dev/gitlive/firebase/firestore/android {
733-
public static final fun firestore (Ldev/gitlive/firebase/Firebase;Ldev/gitlive/firebase/FirebaseApp;)Ldev/gitlive/firebase/firestore/FirebaseFirestore;
733+
public static final fun firestore (Ldev/gitlive/firebase/Firebase;Ldev/gitlive/firebase/FirebaseApp;Ljava/lang/String;)Ldev/gitlive/firebase/firestore/FirebaseFirestore;
734+
public static synthetic fun firestore$default (Ldev/gitlive/firebase/Firebase;Ldev/gitlive/firebase/FirebaseApp;Ljava/lang/String;ILjava/lang/Object;)Ldev/gitlive/firebase/firestore/FirebaseFirestore;
734735
public static final fun firestoreSettings (Ldev/gitlive/firebase/firestore/FirebaseFirestoreSettings;Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/FirebaseFirestoreSettings;
735736
public static synthetic fun firestoreSettings$default (Ldev/gitlive/firebase/firestore/FirebaseFirestoreSettings;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ldev/gitlive/firebase/firestore/FirebaseFirestoreSettings;
736737
public static final fun getAndroid (Ldev/gitlive/firebase/firestore/CollectionReference;)Lcom/google/firebase/firestore/CollectionReference;

firebase-firestore/api/jvm/firebase-firestore.api

+2-1
Original file line numberDiff line numberDiff line change
@@ -730,7 +730,8 @@ public final class dev/gitlive/firebase/firestore/_encodersKt {
730730
}
731731

732732
public final class dev/gitlive/firebase/firestore/android {
733-
public static final fun firestore (Ldev/gitlive/firebase/Firebase;Ldev/gitlive/firebase/FirebaseApp;)Ldev/gitlive/firebase/firestore/FirebaseFirestore;
733+
public static final fun firestore (Ldev/gitlive/firebase/Firebase;Ldev/gitlive/firebase/FirebaseApp;Ljava/lang/String;)Ldev/gitlive/firebase/firestore/FirebaseFirestore;
734+
public static synthetic fun firestore$default (Ldev/gitlive/firebase/Firebase;Ldev/gitlive/firebase/FirebaseApp;Ljava/lang/String;ILjava/lang/Object;)Ldev/gitlive/firebase/firestore/FirebaseFirestore;
734735
public static final fun firestoreSettings (Ldev/gitlive/firebase/firestore/FirebaseFirestoreSettings;Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/FirebaseFirestoreSettings;
735736
public static synthetic fun firestoreSettings$default (Ldev/gitlive/firebase/firestore/FirebaseFirestoreSettings;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ldev/gitlive/firebase/firestore/FirebaseFirestoreSettings;
736737
public static final fun getAndroid (Ldev/gitlive/firebase/firestore/CollectionReference;)Lcom/google/firebase/firestore/CollectionReference;

firebase-firestore/src/androidMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ public val FirebaseFirestore.android: AndroidFirebaseFirestore get() = AndroidFi
3636
public actual val Firebase.firestore: FirebaseFirestore get() =
3737
FirebaseFirestore(AndroidFirebaseFirestore.getInstance())
3838

39-
public actual fun Firebase.firestore(app: FirebaseApp): FirebaseFirestore =
40-
FirebaseFirestore(AndroidFirebaseFirestore.getInstance(app.android))
39+
public actual fun Firebase.firestore(app: FirebaseApp, databaseId: String?): FirebaseFirestore =
40+
FirebaseFirestore(databaseId?.let { AndroidFirebaseFirestore.getInstance(app.android, databaseId) } ?: AndroidFirebaseFirestore.getInstance(app.android))
4141

4242
public val LocalCacheSettings.android: AndroidLocalCacheSettings get() = when (this) {
4343
is LocalCacheSettings.Persistent -> androidPersistentCacheSettings {

firebase-firestore/src/androidMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeFirebaseFirestoreWrapper.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import dev.gitlive.firebase.firestore.android
88
import kotlinx.coroutines.runBlocking
99
import kotlinx.coroutines.tasks.await
1010

11-
internal actual class NativeFirebaseFirestoreWrapper actual constructor(actual val native: NativeFirebaseFirestore) {
11+
internal actual class NativeFirebaseFirestoreWrapper actual constructor(actual val native: NativeFirebaseFirestore, actual val databaseId: String?) {
1212

1313
actual fun collection(collectionPath: String) = native.collection(collectionPath)
1414

firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import kotlin.jvm.JvmName
3232
public expect val Firebase.firestore: FirebaseFirestore
3333

3434
/** Returns the [FirebaseFirestore] instance of a given [FirebaseApp]. */
35-
public expect fun Firebase.firestore(app: FirebaseApp): FirebaseFirestore
35+
public expect fun Firebase.firestore(app: FirebaseApp, databaseId: String? = null): FirebaseFirestore
3636

3737
internal expect class NativeFirebaseFirestore
3838

firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeFirebaseFirestoreWrapper.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@ import dev.gitlive.firebase.firestore.NativeQuery
77
import dev.gitlive.firebase.firestore.NativeTransaction
88
import dev.gitlive.firebase.firestore.NativeWriteBatch
99

10-
internal expect class NativeFirebaseFirestoreWrapper internal constructor(native: NativeFirebaseFirestore) {
10+
internal expect class NativeFirebaseFirestoreWrapper internal constructor(native: NativeFirebaseFirestore, databaseId: String? = null) {
1111
val native: NativeFirebaseFirestore
12+
val databaseId: String?
1213

1314
fun collection(collectionPath: String): NativeCollectionReference
1415
fun collectionGroup(collectionId: String): NativeQuery

firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ public val FirebaseFirestore.ios: FIRFirestore get() = FIRFirestore.firestore()
2525
public actual val Firebase.firestore: FirebaseFirestore get() =
2626
FirebaseFirestore(FIRFirestore.firestore())
2727

28-
public actual fun Firebase.firestore(app: FirebaseApp): FirebaseFirestore = FirebaseFirestore(
29-
FIRFirestore.firestoreForApp(app.ios as objcnames.classes.FIRApp),
28+
public actual fun Firebase.firestore(app: FirebaseApp, databaseId: String?): FirebaseFirestore = FirebaseFirestore(
29+
databaseId?.let { FIRFirestore.firestoreForApp(app.ios as objcnames.classes.FIRApp, it) } ?: FIRFirestore.firestoreForApp(app.ios as objcnames.classes.FIRApp),
3030
)
3131

3232
public val LocalCacheSettings.ios: FIRLocalCacheSettingsProtocol get() = when (this) {

firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeFirebaseFirestoreWrapper.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import dev.gitlive.firebase.firestore.awaitResult
99
import kotlinx.coroutines.runBlocking
1010

1111
@Suppress("UNCHECKED_CAST")
12-
internal actual class NativeFirebaseFirestoreWrapper internal actual constructor(actual val native: NativeFirebaseFirestore) {
12+
internal actual class NativeFirebaseFirestoreWrapper internal actual constructor(actual val native: NativeFirebaseFirestore, actual val databaseId: String?) {
1313

1414
actual fun collection(collectionPath: String) = native.collectionWithPath(collectionPath)
1515

firebase-firestore/src/jsMain/kotlin/dev/gitlive/firebase/firestore/externals/firestore.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public external fun getDocsFromCache(query: Query): Promise<QuerySnapshot>
8181

8282
public external fun getDocsFromServer(query: Query): Promise<QuerySnapshot>
8383

84-
public external fun getFirestore(app: FirebaseApp? = definedExternally): Firestore
84+
public external fun getFirestore(app: FirebaseApp? = definedExternally, databaseId: String? = definedExternally): Firestore
8585

8686
public external fun increment(n: Int): FieldValue
8787

firebase-firestore/src/jsMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,10 @@ import dev.gitlive.firebase.firestore.externals.WriteBatch as JsWriteBatch
3333
import dev.gitlive.firebase.firestore.externals.documentId as jsDocumentId
3434

3535
public actual val Firebase.firestore: FirebaseFirestore get() =
36-
rethrow { FirebaseFirestore(NativeFirebaseFirestoreWrapper(getApp())) }
36+
rethrow { FirebaseFirestore(NativeFirebaseFirestoreWrapper(getApp(), null)) }
3737

38-
public actual fun Firebase.firestore(app: FirebaseApp): FirebaseFirestore =
39-
rethrow { FirebaseFirestore(NativeFirebaseFirestoreWrapper(app.js)) }
38+
public actual fun Firebase.firestore(app: FirebaseApp, databaseId: String?): FirebaseFirestore =
39+
rethrow { FirebaseFirestore(NativeFirebaseFirestoreWrapper(app.js, databaseId)) }
4040

4141
internal actual data class NativeFirebaseFirestore(val js: JsFirestore)
4242

firebase-firestore/src/jsMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeFirebaseFirestoreWrapper.kt

+8-5
Original file line numberDiff line numberDiff line change
@@ -23,27 +23,30 @@ import kotlinx.coroutines.promise
2323

2424
internal actual class NativeFirebaseFirestoreWrapper internal constructor(
2525
private val createNative: NativeFirebaseFirestoreWrapper.(FirebaseFirestoreSettings?) -> NativeFirebaseFirestore,
26+
actual val databaseId: String?,
2627
) {
2728

28-
internal actual constructor(native: NativeFirebaseFirestore) : this(
29+
internal actual constructor(native: NativeFirebaseFirestore, databaseId: String?) : this(
2930
{ settings ->
3031
settings?.let {
31-
NativeFirebaseFirestore(initializeFirestore(native.js.app, settings))
32+
NativeFirebaseFirestore(initializeFirestore(native.js.app, settings, databaseId))
3233
} ?: native
3334
},
35+
databaseId,
3436
)
35-
internal constructor(app: FirebaseApp) : this(
37+
internal constructor(app: FirebaseApp, databaseId: String?) : this(
3638
{ settings ->
3739
NativeFirebaseFirestore(
3840
settings?.let {
39-
initializeFirestore(app, it.js).also {
41+
initializeFirestore(app, it.js, databaseId).also {
4042
emulatorSettings?.run {
4143
connectFirestoreEmulator(it, host, port)
4244
}
4345
}
44-
} ?: getFirestore(app),
46+
} ?: getFirestore(app, databaseId),
4547
)
4648
},
49+
databaseId,
4750
)
4851

4952
private data class EmulatorSettings(val host: String, val port: Int)

0 commit comments

Comments
 (0)