Skip to content

Commit 43c3a11

Browse files
authored
limit and in query (#52)
1 parent e902480 commit 43c3a11

File tree

5 files changed

+55
-33
lines changed
  • firebase-common/src/jsMain/kotlin/dev/gitlive/firebase
  • firebase-firestore/src

5 files changed

+55
-33
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,8 @@ external object firebase {
177177
open class Query {
178178
fun get(options: Any? = definedExternally): Promise<QuerySnapshot>
179179
fun where(field: Any, opStr: String, value: Any?): Query
180-
fun onSnapshot(next: (snapshot: QuerySnapshot) -> Unit, error: (error: Error) -> Unit): ()->Unit
180+
fun onSnapshot(next: (snapshot: QuerySnapshot) -> Unit, error: (error: Error) -> Unit): () -> Unit
181+
fun limit(limit: Double): Query
181182
}
182183

183184
open class CollectionReference : Query {

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

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -275,8 +275,7 @@ actual open class Query(open val android: com.google.firebase.firestore.Query) {
275275

276276
actual suspend fun get() = QuerySnapshot(android.get().await())
277277

278-
internal actual fun _where(field: String, equalTo: Any?) = Query(android.whereEqualTo(field, equalTo))
279-
internal actual fun _where(path: FieldPath, equalTo: Any?) = Query(android.whereEqualTo(path, equalTo))
278+
actual fun limit(limit: Number) = Query(android.limit(limit.toLong()))
280279

281280
actual val snapshots get() = callbackFlow {
282281
val listener = android.addSnapshotListener { snapshot, exception ->
@@ -286,6 +285,9 @@ actual open class Query(open val android: com.google.firebase.firestore.Query) {
286285
awaitClose { listener.remove() }
287286
}
288287

288+
internal actual fun _where(field: String, equalTo: Any?) = Query(android.whereEqualTo(field, equalTo))
289+
internal actual fun _where(path: FieldPath, equalTo: Any?) = Query(android.whereEqualTo(path, equalTo))
290+
289291
internal actual fun _where(field: String, lessThan: Any?, greaterThan: Any?, arrayContains: Any?) = Query(
290292
(lessThan?.let { android.whereLessThan(field, it) } ?: android).let { android2 ->
291293
(greaterThan?.let { android2.whereGreaterThan(field, it) } ?: android2).let { android3 ->
@@ -302,11 +304,16 @@ actual open class Query(open val android: com.google.firebase.firestore.Query) {
302304
}
303305
)
304306

305-
internal actual fun _where(field: String, arrayContainsAny: List<Any>) = Query(
306-
android.whereArrayContainsAny(field, arrayContainsAny)
307+
internal actual fun _where(field: String, inArray: List<Any>?, arrayContainsAny: List<Any>?) = Query(
308+
(inArray?.let { android.whereIn(field, it) } ?: android).let { android2 ->
309+
arrayContainsAny?.let { android2.whereArrayContainsAny(field, it) } ?: android2
310+
}
307311
)
308-
internal actual fun _where(path: FieldPath, arrayContainsAny: List<Any>) = Query(
309-
android.whereArrayContainsAny(path, arrayContainsAny)
312+
313+
internal actual fun _where(path: FieldPath, inArray: List<Any>?, arrayContainsAny: List<Any>?) = Query(
314+
(inArray?.let { android.whereIn(path, it) } ?: android).let { android2 ->
315+
arrayContainsAny?.let { android2.whereArrayContainsAny(path, it) } ?: android2
316+
}
310317
)
311318
}
312319

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,22 +57,23 @@ expect class Transaction {
5757
//)
5858

5959
expect open class Query {
60+
fun limit(limit: Number): Query
61+
val snapshots: Flow<QuerySnapshot>
62+
suspend fun get(): QuerySnapshot
6063
internal fun _where(field: String, equalTo: Any?): Query
6164
internal fun _where(path: FieldPath, equalTo: Any?): Query
6265
internal fun _where(field: String, lessThan: Any? = null, greaterThan: Any? = null, arrayContains: Any? = null): Query
6366
internal fun _where(path: FieldPath, lessThan: Any? = null, greaterThan: Any? = null, arrayContains: Any? = null): Query
64-
internal fun _where(field: String, arrayContainsAny: List<Any>): Query
65-
internal fun _where(path: FieldPath, arrayContainsAny: List<Any>): Query
66-
val snapshots: Flow<QuerySnapshot>
67-
suspend fun get(): QuerySnapshot
67+
internal fun _where(field: String, inArray: List<Any>? = null, arrayContainsAny: List<Any>? = null): Query
68+
internal fun _where(path: FieldPath, inArray: List<Any>? = null, arrayContainsAny: List<Any>? = null): Query
6869
}
6970

7071
fun Query.where(field: String, equalTo: Any?) = _where(field, equalTo)
7172
fun Query.where(path: FieldPath, equalTo: Any?) = _where(path, equalTo)
7273
fun Query.where(field: String, lessThan: Any? = null, greaterThan: Any? = null, arrayContains: Any? = null) = _where(field, lessThan, greaterThan, arrayContains)
7374
fun Query.where(path: FieldPath, lessThan: Any? = null, greaterThan: Any? = null, arrayContains: Any? = null) = _where(path, lessThan, greaterThan, arrayContains)
74-
fun Query.where(field: String, arrayContainsAny: List<Any>) = _where(field, arrayContainsAny)
75-
fun Query.where(path: FieldPath, arrayContainsAny: List<Any>) = _where(path, arrayContainsAny)
75+
fun Query.where(field: String, inArray: List<Any>? = null, arrayContainsAny: List<Any>? = null) = _where(field, inArray, arrayContainsAny)
76+
fun Query.where(path: FieldPath, inArray: List<Any>? = null, arrayContainsAny: List<Any>? = null) = _where(path, inArray, arrayContainsAny)
7677

7778

7879
expect class WriteBatch {

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

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -185,8 +185,7 @@ actual open class Query(open val ios: FIRQuery) {
185185

186186
actual suspend fun get() = QuerySnapshot(awaitResult { ios.getDocumentsWithCompletion(it) })
187187

188-
internal actual fun _where(field: String, equalTo: Any?) = Query(ios.queryWhereField(field, isEqualTo = equalTo!!))
189-
internal actual fun _where(path: FieldPath, equalTo: Any?) = Query(ios.queryWhereFieldPath(path, isEqualTo = equalTo!!))
188+
actual fun limit(limit: Number) = Query(ios.queryLimitedTo(limit.toInt()))
190189

191190
actual val snapshots get() = callbackFlow {
192191
val listener = ios.addSnapshotListener { snapshot, error ->
@@ -196,29 +195,36 @@ actual open class Query(open val ios: FIRQuery) {
196195
awaitClose { listener.remove() }
197196
}
198197

198+
internal actual fun _where(field: String, equalTo: Any?) = Query(ios.queryWhereField(field, isEqualTo = equalTo!!))
199+
internal actual fun _where(path: FieldPath, equalTo: Any?) = Query(ios.queryWhereFieldPath(path, isEqualTo = equalTo!!))
200+
199201
internal actual fun _where(field: String, lessThan: Any?, greaterThan: Any?, arrayContains: Any?) = Query(
200-
(lessThan?.let { ios.queryWhereField(field, isLessThan = it!!) } ?: ios).let { ios ->
201-
(greaterThan?.let { ios.queryWhereField(field, isGreaterThan = it!!) } ?: ios).let { ios ->
202-
arrayContains?.let { ios.queryWhereField(field, arrayContains = it!!) } ?: ios
202+
(lessThan?.let { ios.queryWhereField(field, isLessThan = it) } ?: ios).let { ios2 ->
203+
(greaterThan?.let { ios2.queryWhereField(field, isGreaterThan = it) } ?: ios2).let { ios3 ->
204+
arrayContains?.let { ios3.queryWhereField(field, arrayContains = it) } ?: ios3
203205
}
204206
}
205207
)
206208

207209
internal actual fun _where(path: FieldPath, lessThan: Any?, greaterThan: Any?, arrayContains: Any?) = Query(
208-
(lessThan?.let { ios.queryWhereFieldPath(path, isLessThan = it!!) } ?: ios).let { ios ->
209-
(greaterThan?.let { ios.queryWhereFieldPath(path, isGreaterThan = it!!) } ?: ios).let { ios ->
210-
arrayContains?.let { ios.queryWhereFieldPath(path, arrayContains = it!!) } ?: ios
210+
(lessThan?.let { ios.queryWhereFieldPath(path, isLessThan = it) } ?: ios).let { ios2 ->
211+
(greaterThan?.let { ios2.queryWhereFieldPath(path, isGreaterThan = it) } ?: ios2).let { ios3 ->
212+
arrayContains?.let { ios3.queryWhereFieldPath(path, arrayContains = it) } ?: ios3
211213
}
212214
}
213215
)
214216

215-
internal actual fun _where(field: String, arrayContainsAny: List<Any>) = Query(
216-
ios.queryWhereField(field, arrayContainsAny = arrayContainsAny)
217-
)
218-
internal actual fun _where(path: FieldPath, arrayContainsAny: List<Any>) = Query(
219-
ios.queryWhereFieldPath(path, arrayContainsAny = arrayContainsAny)
217+
internal actual fun _where(field: String, inArray: List<Any>?, arrayContainsAny: List<Any>?) = Query(
218+
(inArray?.let { ios.queryWhereField(field, `in` = it) } ?: ios).let { ios2 ->
219+
arrayContainsAny?.let { ios2.queryWhereField(field, arrayContainsAny = arrayContainsAny) } ?: ios2
220+
}
220221
)
221-
}
222+
223+
internal actual fun _where(path: FieldPath, inArray: List<Any>?, arrayContainsAny: List<Any>?) = Query(
224+
(inArray?.let { ios.queryWhereFieldPath(path, `in` = it) } ?: ios).let { ios2 ->
225+
arrayContainsAny?.let { ios2.queryWhereFieldPath(path, arrayContainsAny = arrayContainsAny) } ?: ios2
226+
}
227+
)}
222228
actual class CollectionReference(override val ios: FIRCollectionReference) : Query(ios) {
223229

224230
actual val path: String

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

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,8 @@ actual open class Query(open val js: firebase.firestore.Query) {
249249

250250
actual suspend fun get() = rethrow { QuerySnapshot(js.get().await()) }
251251

252+
actual fun limit(limit: Number) = Query(js.limit(limit.toDouble()))
253+
252254
internal actual fun _where(field: String, equalTo: Any?) = rethrow { Query(js.where(field, "==", equalTo)) }
253255
internal actual fun _where(path: FieldPath, equalTo: Any?) = rethrow { Query(js.where(path, "==", equalTo)) }
254256

@@ -272,12 +274,17 @@ actual open class Query(open val js: firebase.firestore.Query) {
272274
)
273275
}
274276

275-
internal actual fun _where(field: String, arrayContainsAny: List<Any>) = rethrow {
276-
Query(js.where(field, "array-contains-any", arrayContainsAny))
277-
}
278-
internal actual fun _where(path: FieldPath, arrayContainsAny: List<Any>) = rethrow {
279-
Query(js.where(path, "array-contains-any", arrayContainsAny))
280-
}
277+
internal actual fun _where(field: String, inArray: List<Any>?, arrayContainsAny: List<Any>?) = Query(
278+
(inArray?.let { js.where(field, "in", it) } ?: js).let { js2 ->
279+
arrayContainsAny?.let { js2.where(field, "array-contains-any", it) } ?: js2
280+
}
281+
)
282+
283+
internal actual fun _where(path: FieldPath, inArray: List<Any>?, arrayContainsAny: List<Any>?) = Query(
284+
(inArray?.let { js.where(path, "in", it) } ?: js).let { js2 ->
285+
arrayContainsAny?.let { js2.where(path, "array-contains-any", it) } ?: js2
286+
}
287+
)
281288

282289
actual val snapshots get() = callbackFlow {
283290
val unsubscribe = rethrow {

0 commit comments

Comments
 (0)