Skip to content

Commit 4fa10c3

Browse files
authored
fix(database, iOS): remove unnecessary order modifier checks in query construction (#18134)
* fix(database, iOS): remove unnecessary order modifier checks in query construction * update test
1 parent 0fa2818 commit 4fa10c3

2 files changed

Lines changed: 16 additions & 11 deletions

File tree

packages/firebase_database/firebase_database/ios/firebase_database/Sources/firebase_database/FLTFirebaseDatabasePlugin.swift

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,6 @@ public class FLTFirebaseDatabasePlugin: NSObject, FlutterPlugin, FLTFirebasePlug
389389
let reference = database.reference(withPath: request.path)
390390

391391
var query: DatabaseQuery = reference
392-
var hasOrderModifier = false
393392
for modifier in request.modifiers {
394393
guard let type = modifier["type"] as? String else { continue }
395394

@@ -400,17 +399,13 @@ public class FLTFirebaseDatabasePlugin: NSObject, FlutterPlugin, FLTFirebasePlug
400399
case "orderByChild":
401400
if let path = modifier["path"] as? String {
402401
query = query.queryOrdered(byChild: path)
403-
hasOrderModifier = true
404402
}
405403
case "orderByKey":
406404
query = query.queryOrderedByKey()
407-
hasOrderModifier = true
408405
case "orderByValue":
409406
query = query.queryOrderedByValue()
410-
hasOrderModifier = true
411407
case "orderByPriority":
412408
query = query.queryOrderedByPriority()
413-
hasOrderModifier = true
414409
default:
415410
break
416411
}
@@ -422,17 +417,13 @@ public class FLTFirebaseDatabasePlugin: NSObject, FlutterPlugin, FLTFirebasePlug
422417
let key = modifier["key"] as? String
423418
switch name {
424419
case "startAt":
425-
if !hasOrderModifier {
426-
query = query.queryLimited(toFirst: 0)
427-
} else if let key {
420+
if let key {
428421
query = query.queryStarting(atValue: value, childKey: key)
429422
} else {
430423
query = query.queryStarting(atValue: value)
431424
}
432425
case "startAfter":
433-
if !hasOrderModifier {
434-
query = query.queryLimited(toFirst: 0)
435-
} else if let key {
426+
if let key {
436427
query = query.queryStarting(afterValue: value, childKey: key)
437428
} else {
438429
query = query.queryStarting(afterValue: value)

tests/integration_test/firebase_database/query_e2e.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,20 @@ void setupQueryTests() {
5252
},
5353
);
5454

55+
test(
56+
'onValue with startAt(value, key) and no orderBy should not crash',
57+
() async {
58+
await ref.set({
59+
't1': {'timestamp': 1, 'value': 'old'},
60+
't2': {'timestamp': 1000, 'value': 'current'},
61+
});
62+
63+
final event = await ref.startAt(1000, key: 't2').onValue.first;
64+
65+
expect(event.type, DatabaseEventType.value);
66+
},
67+
);
68+
5569
test('starts at the correct value', () async {
5670
await ref.set({
5771
'a': 1,

0 commit comments

Comments
 (0)