Skip to content

Firestore: support for specifying databaseId #698

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion firebase-firestore/api/android/firebase-firestore.api
Original file line number Diff line number Diff line change
Expand Up @@ -730,7 +730,8 @@ public final class dev/gitlive/firebase/firestore/_encodersKt {
}

public final class dev/gitlive/firebase/firestore/android {
public static final fun firestore (Ldev/gitlive/firebase/Firebase;Ldev/gitlive/firebase/FirebaseApp;)Ldev/gitlive/firebase/firestore/FirebaseFirestore;
public static final fun firestore (Ldev/gitlive/firebase/Firebase;Ldev/gitlive/firebase/FirebaseApp;Ljava/lang/String;)Ldev/gitlive/firebase/firestore/FirebaseFirestore;
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;
public static final fun firestoreSettings (Ldev/gitlive/firebase/firestore/FirebaseFirestoreSettings;Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/FirebaseFirestoreSettings;
public static synthetic fun firestoreSettings$default (Ldev/gitlive/firebase/firestore/FirebaseFirestoreSettings;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ldev/gitlive/firebase/firestore/FirebaseFirestoreSettings;
public static final fun getAndroid (Ldev/gitlive/firebase/firestore/CollectionReference;)Lcom/google/firebase/firestore/CollectionReference;
Expand Down
3 changes: 2 additions & 1 deletion firebase-firestore/api/jvm/firebase-firestore.api
Original file line number Diff line number Diff line change
Expand Up @@ -730,7 +730,8 @@ public final class dev/gitlive/firebase/firestore/_encodersKt {
}

public final class dev/gitlive/firebase/firestore/android {
public static final fun firestore (Ldev/gitlive/firebase/Firebase;Ldev/gitlive/firebase/FirebaseApp;)Ldev/gitlive/firebase/firestore/FirebaseFirestore;
public static final fun firestore (Ldev/gitlive/firebase/Firebase;Ldev/gitlive/firebase/FirebaseApp;Ljava/lang/String;)Ldev/gitlive/firebase/firestore/FirebaseFirestore;
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;
public static final fun firestoreSettings (Ldev/gitlive/firebase/firestore/FirebaseFirestoreSettings;Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/FirebaseFirestoreSettings;
public static synthetic fun firestoreSettings$default (Ldev/gitlive/firebase/firestore/FirebaseFirestoreSettings;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ldev/gitlive/firebase/firestore/FirebaseFirestoreSettings;
public static final fun getAndroid (Ldev/gitlive/firebase/firestore/CollectionReference;)Lcom/google/firebase/firestore/CollectionReference;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ public val FirebaseFirestore.android: AndroidFirebaseFirestore get() = AndroidFi
public actual val Firebase.firestore: FirebaseFirestore get() =
FirebaseFirestore(AndroidFirebaseFirestore.getInstance())

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

public val LocalCacheSettings.android: AndroidLocalCacheSettings get() = when (this) {
is LocalCacheSettings.Persistent -> androidPersistentCacheSettings {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import dev.gitlive.firebase.firestore.android
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.tasks.await

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

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ import kotlin.jvm.JvmName
public expect val Firebase.firestore: FirebaseFirestore

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

internal expect class NativeFirebaseFirestore

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@ import dev.gitlive.firebase.firestore.NativeQuery
import dev.gitlive.firebase.firestore.NativeTransaction
import dev.gitlive.firebase.firestore.NativeWriteBatch

internal expect class NativeFirebaseFirestoreWrapper internal constructor(native: NativeFirebaseFirestore) {
internal expect class NativeFirebaseFirestoreWrapper internal constructor(native: NativeFirebaseFirestore, databaseId: String? = null) {
val native: NativeFirebaseFirestore
val databaseId: String?

fun collection(collectionPath: String): NativeCollectionReference
fun collectionGroup(collectionId: String): NativeQuery
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ public val FirebaseFirestore.ios: FIRFirestore get() = FIRFirestore.firestore()
public actual val Firebase.firestore: FirebaseFirestore get() =
FirebaseFirestore(FIRFirestore.firestore())

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

public val LocalCacheSettings.ios: FIRLocalCacheSettingsProtocol get() = when (this) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import dev.gitlive.firebase.firestore.awaitResult
import kotlinx.coroutines.runBlocking

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

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public external fun getDocsFromCache(query: Query): Promise<QuerySnapshot>

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

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

public external fun increment(n: Int): FieldValue

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,10 @@ import dev.gitlive.firebase.firestore.externals.WriteBatch as JsWriteBatch
import dev.gitlive.firebase.firestore.externals.documentId as jsDocumentId

public actual val Firebase.firestore: FirebaseFirestore get() =
rethrow { FirebaseFirestore(NativeFirebaseFirestoreWrapper(getApp())) }
rethrow { FirebaseFirestore(NativeFirebaseFirestoreWrapper(getApp(), null)) }

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

internal actual data class NativeFirebaseFirestore(val js: JsFirestore)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,27 +23,30 @@ import kotlinx.coroutines.promise

internal actual class NativeFirebaseFirestoreWrapper internal constructor(
private val createNative: NativeFirebaseFirestoreWrapper.(FirebaseFirestoreSettings?) -> NativeFirebaseFirestore,
actual val databaseId: String?,
) {

internal actual constructor(native: NativeFirebaseFirestore) : this(
internal actual constructor(native: NativeFirebaseFirestore, databaseId: String?) : this(
{ settings ->
settings?.let {
NativeFirebaseFirestore(initializeFirestore(native.js.app, settings))
NativeFirebaseFirestore(initializeFirestore(native.js.app, settings, databaseId))
} ?: native
},
databaseId,
)
internal constructor(app: FirebaseApp) : this(
internal constructor(app: FirebaseApp, databaseId: String?) : this(
{ settings ->
NativeFirebaseFirestore(
settings?.let {
initializeFirestore(app, it.js).also {
initializeFirestore(app, it.js, databaseId).also {
emulatorSettings?.run {
connectFirestoreEmulator(it, host, port)
}
}
} ?: getFirestore(app),
} ?: getFirestore(app, databaseId),
)
},
databaseId,
)

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