Signal-iOS/SignalServiceKit/src/Storage/YapDatabaseTransaction+OWS.m
2019-06-19 11:08:02 -04:00

56 lines
1.7 KiB
Objective-C

//
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
//
#import "YapDatabaseTransaction+OWS.h"
#import <SignalServiceKit/OWSPrimaryStorage.h>
#import <SignalServiceKit/SignalServiceKit-Swift.h>
NS_ASSUME_NONNULL_BEGIN
@implementation YapDatabaseReadTransaction (OWS)
#pragma mark - Extensions
- (nullable id)safe_extension:(NSString *)extensionName clazz:(Class)clazz
{
id _Nullable result = [self extension:extensionName];
if (![result isKindOfClass:clazz]) {
[OWSPrimaryStorage incrementVersionOfDatabaseExtension:extensionName];
if (SSKFeatureFlags.strictYDBExtensions) {
OWSFail(@"Couldn't load database extension: %@.", extensionName);
} else {
LogStackTrace();
OWSFailDebug(@"Couldn't load database extension: %@.", extensionName);
}
return nil;
}
return result;
}
- (nullable YapDatabaseViewTransaction *)safeViewTransaction:(NSString *)extensionName
{
return [self safe_extension:extensionName clazz:[YapDatabaseViewTransaction class]];
}
- (nullable YapDatabaseAutoViewTransaction *)safeAutoViewTransaction:(NSString *)extensionName
{
return [self safe_extension:extensionName clazz:[YapDatabaseAutoViewTransaction class]];
}
- (nullable YapDatabaseSecondaryIndexTransaction *)safeSecondaryIndexTransaction:(NSString *)extensionName
{
return [self safe_extension:extensionName clazz:[YapDatabaseSecondaryIndexTransaction class]];
}
- (nullable YapDatabaseFullTextSearchTransaction *)safeFullTextSearchTransaction:(NSString *)extensionName
{
return [self safe_extension:extensionName clazz:[YapDatabaseFullTextSearchTransaction class]];
}
@end
NS_ASSUME_NONNULL_END