diff --git a/YapDatabase/Extensions/AutoView/YapDatabaseAutoViewTransaction.m b/YapDatabase/Extensions/AutoView/YapDatabaseAutoViewTransaction.m index ea0540c29..eef1ee905 100644 --- a/YapDatabase/Extensions/AutoView/YapDatabaseAutoViewTransaction.m +++ b/YapDatabase/Extensions/AutoView/YapDatabaseAutoViewTransaction.m @@ -555,10 +555,14 @@ - (void)insertRowid:(int64_t)rowid [databaseTransaction getCollectionKey:&another object:&anotherObject forRowid:anotherRowid]; - - return sortingBlock(databaseTransaction, group, - collectionKey.collection, collectionKey.key, object, - another.collection, another.key, anotherObject); + + if (object && anotherObject) { + return sortingBlock(databaseTransaction, group, + collectionKey.collection, collectionKey.key, object, + another.collection, another.key, anotherObject); + } else { + return NSOrderedAscending; + } } else if (sorting->blockType == YapDatabaseBlockTypeWithMetadata) { @@ -588,9 +592,13 @@ - (void)insertRowid:(int64_t)rowid metadata:&anotherMetadata forRowid:anotherRowid]; - return sortingBlock(databaseTransaction, group, - collectionKey.collection, collectionKey.key, object, metadata, - another.collection, another.key, anotherObject, anotherMetadata); + if (object && anotherObject) { + return sortingBlock(databaseTransaction, group, + collectionKey.collection, collectionKey.key, object, metadata, + another.collection, another.key, anotherObject, anotherMetadata); + } else { + return NSOrderedAscending; + } } #pragma clang diagnostic pop diff --git a/YapDatabase/Extensions/RTreeIndex/YapDatabaseRTreeIndexTransaction.m b/YapDatabase/Extensions/RTreeIndex/YapDatabaseRTreeIndexTransaction.m index 0788ee462..d3998e550 100644 --- a/YapDatabase/Extensions/RTreeIndex/YapDatabaseRTreeIndexTransaction.m +++ b/YapDatabase/Extensions/RTreeIndex/YapDatabaseRTreeIndexTransaction.m @@ -1158,7 +1158,9 @@ - (BOOL)enumerateKeysAndObjectsMatchingQuery:(YapDatabaseQuery *)query id object = nil; [self->databaseTransaction getCollectionKey:&ck object:&object forRowid:rowid]; - block(ck.collection, ck.key, object, stop); + if (ck && object) { + block(ck.collection, ck.key, object, stop); + } }]; return result; @@ -1178,7 +1180,9 @@ - (BOOL)enumerateRowsMatchingQuery:(YapDatabaseQuery *)query id metadata = nil; [self->databaseTransaction getCollectionKey:&ck object:&object metadata:&metadata forRowid:rowid]; - block(ck.collection, ck.key, object, metadata, stop); + if (ck && object) { + block(ck.collection, ck.key, object, metadata, stop); + } }]; return result; diff --git a/YapDatabase/Extensions/SecondaryIndex/YapDatabaseSecondaryIndexTransaction.m b/YapDatabase/Extensions/SecondaryIndex/YapDatabaseSecondaryIndexTransaction.m index 2c98215ab..8b8ea3c5e 100644 --- a/YapDatabase/Extensions/SecondaryIndex/YapDatabaseSecondaryIndexTransaction.m +++ b/YapDatabase/Extensions/SecondaryIndex/YapDatabaseSecondaryIndexTransaction.m @@ -1287,7 +1287,9 @@ - (BOOL)enumerateKeysAndObjectsMatchingQuery:(YapDatabaseQuery *)query id object = nil; [self->databaseTransaction getCollectionKey:&ck object:&object forRowid:rowid]; - block(ck.collection, ck.key, object, stop); + if (ck && object) { + block(ck.collection, ck.key, object, stop); + } }]; return result; diff --git a/YapDatabase/Extensions/View/YapDatabaseViewTransaction.m b/YapDatabase/Extensions/View/YapDatabaseViewTransaction.m index b7ab5de6c..33c41209e 100644 --- a/YapDatabase/Extensions/View/YapDatabaseViewTransaction.m +++ b/YapDatabase/Extensions/View/YapDatabaseViewTransaction.m @@ -1308,6 +1308,13 @@ - (void)insertRowid:(int64_t)rowid collectionKey:(YapCollectionKey *)collectionK NSString *pageKey = pageMetadata->pageKey; YapDatabaseViewPage *page = [self pageForPageKey:pageKey]; + + NSAssert(page != nil, @"Missing page in group(%@)", group); + + if (!page) { + YDBLogError(@"Missing page in group(%@)! Error inserting key(%@) collection(%@) in group(%@) at index(%lu) with page(%@) pageOffset(%lu)", group); + return; + } YDBLogVerbose(@"Inserting key(%@) collection(%@) in group(%@) at index(%lu) with page(%@) pageOffset(%lu)", collectionKey.key, collectionKey.collection, group, diff --git a/YapDatabase/YapDatabaseTransaction.m b/YapDatabase/YapDatabaseTransaction.m index db55f28f7..fb65edcf5 100644 --- a/YapDatabase/YapDatabaseTransaction.m +++ b/YapDatabase/YapDatabaseTransaction.m @@ -2634,7 +2634,9 @@ - (void)enumerateRowsForKeys:(NSArray *)keys [connection->metadataCache setObject:[YapNull null] forKey:cacheKey]; } - block(keyIndex, object, metadata, &stop); + if (object) { + block(keyIndex, object, metadata, &stop); + } [keyIndexDict removeObjectForKey:key]; @@ -2963,7 +2965,9 @@ - (void)_enumerateKeysAndObjectsInCollection:(NSString *)collection } } - block(rowid, key, object, &stop); + if (object) { + block(rowid, key, object, &stop); + } if (stop || mutation.isMutated) break; } @@ -3077,7 +3081,9 @@ - (void)_enumerateKeysAndObjectsInCollections:(NSArray *)collections } } - block(rowid, collection, key, object, &stop); + if (object) { + block(rowid, collection, key, object, &stop); + } if (stop || mutation.isMutated) break; } @@ -3193,7 +3199,9 @@ - (void)_enumerateKeysAndObjectsInAllCollectionsUsingBlock: } } - block(rowid, collection, key, object, &stop); + if (object) { + block(rowid, collection, key, object, &stop); + } if (stop || mutation.isMutated) break; } @@ -3729,7 +3737,9 @@ - (void)_enumerateRowsInCollection:(NSString *)collection } } - block(rowid, key, object, metadata, &stop); + if (object) { + block(rowid, key, object, metadata, &stop); + } if (stop || mutation.isMutated) break; } @@ -3882,7 +3892,9 @@ - (void)_enumerateRowsInCollections:(NSArray *)collections } } - block(rowid, collection, key, object, metadata, &stop); + if (object) { + block(rowid, collection, key, object, metadata, &stop); + } if (stop || mutation.isMutated) break; } @@ -4027,7 +4039,9 @@ - (void)_enumerateRowsInAllCollectionsUsingBlock: } } - block(rowid, collection, key, object, metadata, &stop); + if (object) { + block(rowid, collection, key, object, metadata, &stop); + } if (stop || mutation.isMutated) break; }