diff --git a/Code/RocksDB.h b/Code/RocksDB.h index 7b4dd8e..8f154af 100644 --- a/Code/RocksDB.h +++ b/Code/RocksDB.h @@ -56,7 +56,8 @@ NS_ASSUME_NONNULL_BEGIN that currently exist in the DB. */ + (nullable instancetype)databaseAtPath:(NSString *)path - andDBOptions:(nullable void (^)(RocksDBOptions *options))options; + andDBOptions:(nullable void (^)(RocksDBOptions *options))options + error:(NSError**)error; /** Intializes a DB instance and opens the defined Column Families. @@ -81,8 +82,9 @@ NS_ASSUME_NONNULL_BEGIN that currently exist in the DB. */ + (nullable instancetype)databaseAtPath:(NSString *)path - columnFamilies:(RocksDBColumnFamilyDescriptor *)descriptor - andDatabaseOptions:(nullable void (^)(RocksDBDatabaseOptions *options))options; + columnFamilies:(RocksDBColumnFamilyDescriptor *)descriptor + andDatabaseOptions:(nullable void (^)(RocksDBDatabaseOptions *options))options + error:(NSError**)error; #if !(defined(ROCKSDB_LITE) && defined(TARGET_OS_IPHONE)) diff --git a/Code/RocksDB.mm b/Code/RocksDB.mm index fe8ad29..3214df5 100644 --- a/Code/RocksDB.mm +++ b/Code/RocksDB.mm @@ -75,7 +75,7 @@ @implementation RocksDB #pragma mark - Lifecycle -+ (instancetype)databaseAtPath:(NSString *)path andDBOptions:(void (^)(RocksDBOptions *))optionsBlock ++ (instancetype)databaseAtPath:(NSString *)path andDBOptions:(void (^)(RocksDBOptions *))optionsBlock error:(NSError**)error { RocksDB *rocks = [[RocksDB alloc] initWithPath:path]; @@ -83,7 +83,7 @@ + (instancetype)databaseAtPath:(NSString *)path andDBOptions:(void (^)(RocksDBOp optionsBlock(rocks.options); } - if ([rocks openDatabaseReadOnly:NO] == NO) { + if ([rocks openDatabaseReadOnly:NO error:error] == NO) { return nil; } return rocks; @@ -91,7 +91,8 @@ + (instancetype)databaseAtPath:(NSString *)path andDBOptions:(void (^)(RocksDBOp + (instancetype)databaseAtPath:(NSString *)path columnFamilies:(RocksDBColumnFamilyDescriptor *)descriptor - andDatabaseOptions:(void (^)(RocksDBDatabaseOptions *options))optionsBlock + andDatabaseOptions:(void (^)(RocksDBDatabaseOptions *options))optionsBlock + error:(NSError**)error { RocksDB *rocks = [[RocksDB alloc] initWithPath:path]; @@ -101,7 +102,7 @@ + (instancetype)databaseAtPath:(NSString *)path } rocks.options.databaseOptions = dbOptions; - if ([rocks openColumnFamilies:descriptor readOnly:NO] == NO) { + if ([rocks openColumnFamilies:descriptor readOnly:NO error:error] == NO) { return nil; } return rocks; @@ -186,7 +187,7 @@ - (BOOL)isClosed { #pragma mark - Open -- (BOOL)openDatabaseReadOnly:(BOOL)readOnly +- (BOOL)openDatabaseReadOnly:(BOOL)readOnly error:(NSError**)error { rocksdb::Status status; if (readOnly) { @@ -196,7 +197,9 @@ - (BOOL)openDatabaseReadOnly:(BOOL)readOnly } if (!status.ok()) { - NSLog(@"Error opening database: %@", [RocksDBError errorWithRocksStatus:status]); + NSError *statusError = [RocksDBError errorWithRocksStatus:status]; + *error = statusError; + NSLog(@"Error opening database: %@", statusError); [self close]; return NO; } @@ -205,7 +208,7 @@ - (BOOL)openDatabaseReadOnly:(BOOL)readOnly return YES; } -- (BOOL)openColumnFamilies:(RocksDBColumnFamilyDescriptor *)descriptor readOnly:(BOOL)readOnly +- (BOOL)openColumnFamilies:(RocksDBColumnFamilyDescriptor *)descriptor readOnly:(BOOL)readOnly error:(NSError**)error { rocksdb::Status status; std::vector *columnFamilies = descriptor.columnFamilies; @@ -227,7 +230,9 @@ - (BOOL)openColumnFamilies:(RocksDBColumnFamilyDescriptor *)descriptor readOnly: if (!status.ok()) { - NSLog(@"Error opening database: %@", [RocksDBError errorWithRocksStatus:status]); + NSError *statusError = [RocksDBError errorWithRocksStatus:status]; + *error = statusError; + NSLog(@"Error opening database: %@", statusError); [self close]; return NO; }