@@ -847,39 +847,30 @@ class FirebaseDatabasePlugin :
847847
848848 // Apply query modifiers if any
849849 var query: com.google.firebase.database.Query = reference
850- var hasOrderModifier = false
850+ // Note: no hasOrderModifier needed — Android SDK defaults to PriorityIndex
851+ // when no orderBy is specified, so cursors work without an explicit orderBy.
851852
852853 for (modifier in request.modifiers) {
853854 when (modifier[" type" ] as String ) {
854855 " orderBy" -> {
855856 when (modifier[" name" ] as String ) {
856857 " orderByChild" -> {
857858 query = query.orderByChild(modifier[" path" ] as String )
858- hasOrderModifier = true
859859 }
860860 " orderByKey" -> {
861861 query = query.orderByKey()
862- hasOrderModifier = true
863862 }
864863 " orderByValue" -> {
865864 query = query.orderByValue()
866- hasOrderModifier = true
867865 }
868866 " orderByPriority" -> {
869867 query = query.orderByPriority()
870- hasOrderModifier = true
871868 }
872869 }
873870 }
874871 " cursor" -> {
875872 when (modifier[" name" ] as String ) {
876873 " startAt" -> {
877- if (! hasOrderModifier) {
878- // Firebase Database requires an order modifier before startAt
879- // For observe, we can't return null, so we'll create a query that returns no data
880- query = query.limitToFirst(0 )
881- break
882- }
883874 val value = modifier[" value" ]
884875 val key = modifier[" key" ] as String?
885876 query = when (value) {
@@ -889,12 +880,6 @@ class FirebaseDatabasePlugin :
889880 }
890881 }
891882 " startAfter" -> {
892- if (! hasOrderModifier) {
893- // Firebase Database requires an order modifier before startAfter
894- // For observe, we can't return null, so we'll create a query that returns no data
895- query = query.limitToFirst(0 )
896- break
897- }
898883 val value = modifier[" value" ]
899884 val key = modifier[" key" ] as String?
900885 query = when (value) {
@@ -904,33 +889,21 @@ class FirebaseDatabasePlugin :
904889 }
905890 }
906891 " endAt" -> {
907- if (! hasOrderModifier) {
908- // Firebase Database requires an order modifier before endAt
909- // For observe, we return all values when no order modifier is applied
910- // This matches the expected test behavior
911- } else {
912- val value = modifier[" value" ]
913- val key = modifier[" key" ] as String?
914- query = when (value) {
915- is Boolean -> if (key == null ) query.endAt(value) else query.endAt(value, key)
916- is Number -> if (key == null ) query.endAt(value.toDouble()) else query.endAt(value.toDouble(), key)
917- else -> if (key == null ) query.endAt(value.toString()) else query.endAt(value.toString(), key)
918- }
892+ val value = modifier[" value" ]
893+ val key = modifier[" key" ] as String?
894+ query = when (value) {
895+ is Boolean -> if (key == null ) query.endAt(value) else query.endAt(value, key)
896+ is Number -> if (key == null ) query.endAt(value.toDouble()) else query.endAt(value.toDouble(), key)
897+ else -> if (key == null ) query.endAt(value.toString()) else query.endAt(value.toString(), key)
919898 }
920899 }
921900 " endBefore" -> {
922- if (! hasOrderModifier) {
923- // Firebase Database requires an order modifier before endBefore
924- // For observe, we return all values when no order modifier is applied
925- // This matches the expected test behavior
926- } else {
927- val value = modifier[" value" ]
928- val key = modifier[" key" ] as String?
929- query = when (value) {
930- is Boolean -> if (key == null ) query.endBefore(value) else query.endBefore(value, key)
931- is Number -> if (key == null ) query.endBefore(value.toDouble()) else query.endBefore(value.toDouble(), key)
932- else -> if (key == null ) query.endBefore(value.toString()) else query.endBefore(value.toString(), key)
933- }
901+ val value = modifier[" value" ]
902+ val key = modifier[" key" ] as String?
903+ query = when (value) {
904+ is Boolean -> if (key == null ) query.endBefore(value) else query.endBefore(value, key)
905+ is Number -> if (key == null ) query.endBefore(value.toDouble()) else query.endBefore(value.toDouble(), key)
906+ else -> if (key == null ) query.endBefore(value.toString()) else query.endBefore(value.toString(), key)
934907 }
935908 }
936909 }
@@ -977,39 +950,30 @@ class FirebaseDatabasePlugin :
977950
978951 // Apply query modifiers if any
979952 var query: com.google.firebase.database.Query = reference
980- var hasOrderModifier = false
953+ // Note: no hasOrderModifier needed — Android SDK defaults to PriorityIndex
954+ // when no orderBy is specified, so cursors work without an explicit orderBy.
981955
982956 for (modifier in request.modifiers) {
983957 when (modifier[" type" ] as String ) {
984958 " orderBy" -> {
985959 when (modifier[" name" ] as String ) {
986960 " orderByChild" -> {
987961 query = query.orderByChild(modifier[" path" ] as String )
988- hasOrderModifier = true
989962 }
990963 " orderByKey" -> {
991964 query = query.orderByKey()
992- hasOrderModifier = true
993965 }
994966 " orderByValue" -> {
995967 query = query.orderByValue()
996- hasOrderModifier = true
997968 }
998969 " orderByPriority" -> {
999970 query = query.orderByPriority()
1000- hasOrderModifier = true
1001971 }
1002972 }
1003973 }
1004974 " cursor" -> {
1005975 when (modifier[" name" ] as String ) {
1006976 " startAt" -> {
1007- if (! hasOrderModifier) {
1008- // Firebase Database requires an order modifier before startAt
1009- // For keepSync, we can't return null, so we'll create a query that returns no data
1010- query = query.limitToFirst(0 )
1011- break
1012- }
1013977 val value = modifier[" value" ]
1014978 val key = modifier[" key" ] as String?
1015979 query = when (value) {
@@ -1019,12 +983,6 @@ class FirebaseDatabasePlugin :
1019983 }
1020984 }
1021985 " startAfter" -> {
1022- if (! hasOrderModifier) {
1023- // Firebase Database requires an order modifier before startAfter
1024- // For keepSync, we can't return null, so we'll create a query that returns no data
1025- query = query.limitToFirst(0 )
1026- break
1027- }
1028986 val value = modifier[" value" ]
1029987 val key = modifier[" key" ] as String?
1030988 query = when (value) {
@@ -1034,33 +992,21 @@ class FirebaseDatabasePlugin :
1034992 }
1035993 }
1036994 " endAt" -> {
1037- if (! hasOrderModifier) {
1038- // Firebase Database requires an order modifier before endAt
1039- // For keepSync, we return all values when no order modifier is applied
1040- // This matches the expected test behavior
1041- } else {
1042- val value = modifier[" value" ]
1043- val key = modifier[" key" ] as String?
1044- query = when (value) {
1045- is Boolean -> if (key == null ) query.endAt(value) else query.endAt(value, key)
1046- is Number -> if (key == null ) query.endAt(value.toDouble()) else query.endAt(value.toDouble(), key)
1047- else -> if (key == null ) query.endAt(value.toString()) else query.endAt(value.toString(), key)
1048- }
995+ val value = modifier[" value" ]
996+ val key = modifier[" key" ] as String?
997+ query = when (value) {
998+ is Boolean -> if (key == null ) query.endAt(value) else query.endAt(value, key)
999+ is Number -> if (key == null ) query.endAt(value.toDouble()) else query.endAt(value.toDouble(), key)
1000+ else -> if (key == null ) query.endAt(value.toString()) else query.endAt(value.toString(), key)
10491001 }
10501002 }
10511003 " endBefore" -> {
1052- if (! hasOrderModifier) {
1053- // Firebase Database requires an order modifier before endBefore
1054- // For keepSync, we return all values when no order modifier is applied
1055- // This matches the expected test behavior
1056- } else {
1057- val value = modifier[" value" ]
1058- val key = modifier[" key" ] as String?
1059- query = when (value) {
1060- is Boolean -> if (key == null ) query.endBefore(value) else query.endBefore(value, key)
1061- is Number -> if (key == null ) query.endBefore(value.toDouble()) else query.endBefore(value.toDouble(), key)
1062- else -> if (key == null ) query.endBefore(value.toString()) else query.endBefore(value.toString(), key)
1063- }
1004+ val value = modifier[" value" ]
1005+ val key = modifier[" key" ] as String?
1006+ query = when (value) {
1007+ is Boolean -> if (key == null ) query.endBefore(value) else query.endBefore(value, key)
1008+ is Number -> if (key == null ) query.endBefore(value.toDouble()) else query.endBefore(value.toDouble(), key)
1009+ else -> if (key == null ) query.endBefore(value.toString()) else query.endBefore(value.toString(), key)
10641010 }
10651011 }
10661012 }
@@ -1095,38 +1041,30 @@ class FirebaseDatabasePlugin :
10951041
10961042 // Apply query modifiers if any
10971043 var query: com.google.firebase.database.Query = reference
1098- var hasOrderModifier = false
1044+ // Note: no hasOrderModifier needed — Android SDK defaults to PriorityIndex
1045+ // when no orderBy is specified, so cursors work without an explicit orderBy.
10991046
11001047 for (modifier in request.modifiers) {
11011048 when (modifier[" type" ] as String ) {
11021049 " orderBy" -> {
11031050 when (modifier[" name" ] as String ) {
11041051 " orderByChild" -> {
11051052 query = query.orderByChild(modifier[" path" ] as String )
1106- hasOrderModifier = true
11071053 }
11081054 " orderByKey" -> {
11091055 query = query.orderByKey()
1110- hasOrderModifier = true
11111056 }
11121057 " orderByValue" -> {
11131058 query = query.orderByValue()
1114- hasOrderModifier = true
11151059 }
11161060 " orderByPriority" -> {
11171061 query = query.orderByPriority()
1118- hasOrderModifier = true
11191062 }
11201063 }
11211064 }
11221065 " cursor" -> {
11231066 when (modifier[" name" ] as String ) {
11241067 " startAt" -> {
1125- if (! hasOrderModifier) {
1126- // Firebase Database requires an order modifier before startAt
1127- callback(KotlinResult .success(mapOf (" snapshot" to null )))
1128- return
1129- }
11301068 val value = modifier[" value" ]
11311069 val key = modifier[" key" ] as String?
11321070 query = when (value) {
@@ -1136,11 +1074,6 @@ class FirebaseDatabasePlugin :
11361074 }
11371075 }
11381076 " startAfter" -> {
1139- if (! hasOrderModifier) {
1140- // Firebase Database requires an order modifier before startAfter
1141- callback(KotlinResult .success(mapOf (" snapshot" to null )))
1142- return
1143- }
11441077 val value = modifier[" value" ]
11451078 val key = modifier[" key" ] as String?
11461079 query = when (value) {
@@ -1150,33 +1083,21 @@ class FirebaseDatabasePlugin :
11501083 }
11511084 }
11521085 " endAt" -> {
1153- if (! hasOrderModifier) {
1154- // Firebase Database requires an order modifier before endAt
1155- // For get, we return all values when no order modifier is applied
1156- // This matches the expected test behavior
1157- } else {
1158- val value = modifier[" value" ]
1159- val key = modifier[" key" ] as String?
1160- query = when (value) {
1161- is Boolean -> if (key == null ) query.endAt(value) else query.endAt(value, key)
1162- is Number -> if (key == null ) query.endAt(value.toDouble()) else query.endAt(value.toDouble(), key)
1163- else -> if (key == null ) query.endAt(value.toString()) else query.endAt(value.toString(), key)
1164- }
1086+ val value = modifier[" value" ]
1087+ val key = modifier[" key" ] as String?
1088+ query = when (value) {
1089+ is Boolean -> if (key == null ) query.endAt(value) else query.endAt(value, key)
1090+ is Number -> if (key == null ) query.endAt(value.toDouble()) else query.endAt(value.toDouble(), key)
1091+ else -> if (key == null ) query.endAt(value.toString()) else query.endAt(value.toString(), key)
11651092 }
11661093 }
11671094 " endBefore" -> {
1168- if (! hasOrderModifier) {
1169- // Firebase Database requires an order modifier before endBefore
1170- // For get, we return all values when no order modifier is applied
1171- // This matches the expected test behavior
1172- } else {
1173- val value = modifier[" value" ]
1174- val key = modifier[" key" ] as String?
1175- query = when (value) {
1176- is Boolean -> if (key == null ) query.endBefore(value) else query.endBefore(value, key)
1177- is Number -> if (key == null ) query.endBefore(value.toDouble()) else query.endBefore(value.toDouble(), key)
1178- else -> if (key == null ) query.endBefore(value.toString()) else query.endBefore(value.toString(), key)
1179- }
1095+ val value = modifier[" value" ]
1096+ val key = modifier[" key" ] as String?
1097+ query = when (value) {
1098+ is Boolean -> if (key == null ) query.endBefore(value) else query.endBefore(value, key)
1099+ is Number -> if (key == null ) query.endBefore(value.toDouble()) else query.endBefore(value.toDouble(), key)
1100+ else -> if (key == null ) query.endBefore(value.toString()) else query.endBefore(value.toString(), key)
11801101 }
11811102 }
11821103 }
0 commit comments