diff --git a/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/Commands/DatabaseGetTableInfo.h b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/Commands/DatabaseGetTableInfo.h index 2163854a5..9103c40be 100644 --- a/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/Commands/DatabaseGetTableInfo.h +++ b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/Commands/DatabaseGetTableInfo.h @@ -21,5 +21,7 @@ @property(nonatomic, copy, readonly) NSString* table; - (instancetype)initWithDatabaseId:(NSInteger)databaseId table:(NSString*)table; ++ (DatabaseGetTableInfoRequest*)getTableInfoRequestFromDictionary: + (NSDictionary*)dictionary; @end diff --git a/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/Commands/DatabaseGetTableInfo.m b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/Commands/DatabaseGetTableInfo.m index b86fd8b7f..e7e7b9629 100644 --- a/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/Commands/DatabaseGetTableInfo.m +++ b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/Commands/DatabaseGetTableInfo.m @@ -31,4 +31,16 @@ return self; } ++ (DatabaseGetTableInfoRequest*)getTableInfoRequestFromDictionary: + (NSDictionary*)dictionary { + NSNumber* databaseId = @([dictionary[@"databaseId"] integerValue]); + NSString* table = dictionary[@"table"]; + if (databaseId == nil || table == nil) { + return nil; + } + return [[DatabaseGetTableInfoRequest alloc] + initWithDatabaseId:databaseId.intValue + table:table]; +} + @end diff --git a/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/DatabaseDriver.h b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/DatabaseDriver.h index 929ed29a2..a275162d0 100644 --- a/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/DatabaseDriver.h +++ b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/DatabaseDriver.h @@ -8,7 +8,7 @@ #import @protocol DatabaseDescriptor; -@class DatabaseGetTableStructureRequest; +@class DatabaseGetTableInfoResponse; @class DatabaseGetTableStructureResponse; @protocol DatabaseDriver @@ -18,4 +18,8 @@ getTableStructureWithDatabaseDescriptor: (id)databaseDescriptor forTable:(NSString*)tableName; +- (DatabaseGetTableInfoResponse*) + getTableInfoWithDatabaseDescriptor: + (id)databaseDescriptor + forTable:(NSString*)tableName; @end diff --git a/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/DatabasesManager.m b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/DatabasesManager.m index 13a11b53b..9cfd0f1c6 100644 --- a/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/DatabasesManager.m +++ b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/DatabasesManager.m @@ -14,6 +14,7 @@ #import "DatabaseDescriptorHolder.h" #import "DatabaseDriver.h" #import "DatabaseErrorCodes.h" +#import "DatabaseGetTableInfo.h" #import "DatabaseGetTableStructure.h" #import "ObjectMapper.h" @@ -132,8 +133,43 @@ }]; [self.connection - receive:@"getTableStructure" - withBlock:^(NSDictionary* params, id responder){ + receive:@"getTableInfo" + withBlock:^(NSDictionary* params, id responder) { + DatabaseGetTableInfoRequest* request = [DatabaseGetTableInfoRequest + getTableInfoRequestFromDictionary:params]; + if (!request) { + NSDictionary* errorResponse = [ObjectMapper + errorWithCode:DatabasesErrorCodesInvalidRequest + message:kDatabasesErrorCodesInvalidRequestMessage]; + [responder error:errorResponse]; + return; + } + DatabaseDescriptorHolder* descriptorHolder = + self.databaseDescriptorHolders[@(request.databaseId)]; + if (!descriptorHolder) { + NSDictionary* errorResponse = [ObjectMapper + errorWithCode:DatabasesErrorCodesDatabaseInvalid + message:kDatabasesErrorCodesDatabaseInvalidMessage]; + [responder error:errorResponse]; + return; + } + + @try { + DatabaseGetTableInfoResponse* tableInfo = + [descriptorHolder.databaseDriver + getTableInfoWithDatabaseDescriptor:descriptorHolder + .databaseDescriptor + forTable:request.table]; + NSDictionary* response = + [ObjectMapper databaseGetTableInfoResponseToDictionary:tableInfo]; + [responder success:response]; + } @catch (NSException* exception) { + NSDictionary* errorResponse = [ObjectMapper + errorWithCode:DatabasesErrorCodesSqlExecutionException + message:[kDatabasesErrorCodesSqlExecutionExceptionMessage + stringByAppendingString:exception.reason]]; + [responder error:errorResponse]; + } }]; [self.connection diff --git a/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/Mock/MockDatabaseDriver.m b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/Mock/MockDatabaseDriver.m index 3d8fb69ae..712409888 100644 --- a/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/Mock/MockDatabaseDriver.m +++ b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/Mock/MockDatabaseDriver.m @@ -6,6 +6,7 @@ */ #import "MockDatabaseDriver.h" +#import "DatabaseGetTableInfo.h" #import "DatabaseGetTableStructure.h" #import "MockDatabaseDescriptor.h" @@ -46,4 +47,12 @@ indexesValues:[indexesValues copy]]; } +- (DatabaseGetTableInfoResponse*) + getTableInfoWithDatabaseDescriptor: + (id)databaseDescriptor + forTable:(NSString*)tableName { + return [[DatabaseGetTableInfoResponse alloc] + initWithDefinition:@"This is mocked table definition"]; +} + @end diff --git a/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/ObjectMapper.m b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/ObjectMapper.m index f63c8f99e..faf30e24b 100644 --- a/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/ObjectMapper.m +++ b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/ObjectMapper.m @@ -58,7 +58,9 @@ + (NSDictionary*)databaseGetTableInfoResponseToDictionary: (DatabaseGetTableInfoResponse*)response { - return @{}; + return @{ + @"definition" : response.definition, + }; } + (NSDictionary*)databaseExecuteSqlResponseToDictionary: