Implement getTableStructure command.
Reviewed By: lblasa Differential Revision: D48191484 fbshipit-source-id: 6838590f4e10b4613074e9e9d112a62d4688f739
This commit is contained in:
committed by
Facebook GitHub Bot
parent
ce85f44a33
commit
453b8f7b96
@@ -30,5 +30,7 @@
|
|||||||
@property(nonatomic, copy, readonly) NSString* table;
|
@property(nonatomic, copy, readonly) NSString* table;
|
||||||
|
|
||||||
- (instancetype)initWithDatabaseId:(NSInteger)databaseId table:(NSString*)table;
|
- (instancetype)initWithDatabaseId:(NSInteger)databaseId table:(NSString*)table;
|
||||||
|
+ (DatabaseGetTableStructureRequest*)getTableStructureRequestFromDictionary:
|
||||||
|
(NSDictionary*)dictionary;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -38,4 +38,15 @@
|
|||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
+ (DatabaseGetTableStructureRequest*)getTableStructureRequestFromDictionary:
|
||||||
|
(NSDictionary*)params {
|
||||||
|
int databaseId = [params[@"databaseId"] integerValue];
|
||||||
|
NSString* table = params[@"table"];
|
||||||
|
if (databaseId <= 0 || !table) {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
return [[DatabaseGetTableStructureRequest alloc] initWithDatabaseId:databaseId
|
||||||
|
table:table];
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -8,12 +8,14 @@
|
|||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
@protocol DatabaseDescriptor;
|
@protocol DatabaseDescriptor;
|
||||||
|
@class DatabaseGetTableStructureRequest;
|
||||||
|
@class DatabaseGetTableStructureResponse;
|
||||||
|
|
||||||
@protocol DatabaseDriver<NSObject>
|
@protocol DatabaseDriver<NSObject>
|
||||||
@property(nonatomic, strong, readonly) id<DatabaseDescriptor>
|
|
||||||
databaseDescriptor;
|
|
||||||
|
|
||||||
- (NSArray<id<DatabaseDescriptor>>*)getDatabases;
|
- (NSArray<id<DatabaseDescriptor>>*)getDatabases;
|
||||||
- (NSArray<NSString*>*)getTableNames:(id<DatabaseDescriptor>)databaseDescriptor;
|
- (NSArray<NSString*>*)getTableNames:(id<DatabaseDescriptor>)databaseDescriptor;
|
||||||
|
- (DatabaseGetTableStructureResponse*)
|
||||||
|
getTableStructureWithDatabaseDescriptor:
|
||||||
|
(id<DatabaseDescriptor>)databaseDescriptor
|
||||||
|
forTable:(NSString*)tableName;
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -77,19 +77,58 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
NSDictionary* result = [ObjectMapper
|
id result = [ObjectMapper
|
||||||
databaseListToDictionary:self.databaseDescriptorHolderSet];
|
databaseListToFlipperArray:self.databaseDescriptorHolderSet];
|
||||||
[responder success:result];
|
[responder success:result];
|
||||||
}];
|
}];
|
||||||
|
|
||||||
[self.connection
|
[self.connection
|
||||||
receive:@"getTableData"
|
receive:@"getTableData"
|
||||||
withBlock:^(NSDictionary* params, id<FlipperResponder> responder){
|
withBlock:^(NSDictionary* params, id<FlipperResponder> responder){
|
||||||
|
|
||||||
}];
|
}];
|
||||||
|
|
||||||
[self.connection
|
[self.connection
|
||||||
receive:@"getTableStructure"
|
receive:@"getTableStructure"
|
||||||
withBlock:^(NSDictionary* params, id<FlipperResponder> responder) {
|
withBlock:^(NSDictionary* params, id<FlipperResponder> responder) {
|
||||||
|
DatabaseGetTableStructureRequest* request =
|
||||||
|
[DatabaseGetTableStructureRequest
|
||||||
|
getTableStructureRequestFromDictionary: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 {
|
||||||
|
DatabaseGetTableStructureResponse* tableStructure =
|
||||||
|
[descriptorHolder.databaseDriver
|
||||||
|
getTableStructureWithDatabaseDescriptor:
|
||||||
|
descriptorHolder.databaseDescriptor
|
||||||
|
forTable:request.table];
|
||||||
|
NSDictionary* response = [ObjectMapper
|
||||||
|
databaseGetTableStructureResponseToDictionary:tableStructure];
|
||||||
|
[responder success:response];
|
||||||
|
} @catch (NSException* exception) {
|
||||||
|
NSDictionary* errorResponse = [ObjectMapper
|
||||||
|
errorWithCode:DatabasesErrorCodesSqlExecutionException
|
||||||
|
message:[kDatabasesErrorCodesSqlExecutionExceptionMessage
|
||||||
|
stringByAppendingString:exception.reason]];
|
||||||
|
[responder error:errorResponse];
|
||||||
|
}
|
||||||
}];
|
}];
|
||||||
|
|
||||||
[self.connection
|
[self.connection
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#import "MockDatabaseDriver.h"
|
||||||
|
#import "DatabaseGetTableStructure.h"
|
||||||
|
#import "MockDatabaseDescriptor.h"
|
||||||
|
|
||||||
|
@implementation MockDatabaseDriver
|
||||||
|
|
||||||
|
- (NSArray<id<DatabaseDescriptor>>*)getDatabases {
|
||||||
|
MockDatabaseDescriptor* mockDescriptor =
|
||||||
|
[[MockDatabaseDescriptor alloc] init];
|
||||||
|
return @[ mockDescriptor ];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSArray<NSString*>*)getTableNames:
|
||||||
|
(id<DatabaseDescriptor>)databaseDescriptor {
|
||||||
|
return @[ @"MockTable1", @"MockTable2" ];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (DatabaseGetTableStructureResponse*)
|
||||||
|
getTableStructureWithDatabaseDescriptor:
|
||||||
|
(id<DatabaseDescriptor>)databaseDescriptor
|
||||||
|
forTable:(NSString*)tableName {
|
||||||
|
NSMutableArray<NSString*>* structureColumns =
|
||||||
|
[NSMutableArray arrayWithObjects:@"id", @"name", @"age", nil];
|
||||||
|
NSMutableArray<NSArray<NSString*>*>* structureValues =
|
||||||
|
[NSMutableArray arrayWithObjects:@[ @"1", @"John", @"25" ],
|
||||||
|
@[ @"2", @"Jane", @"30" ],
|
||||||
|
nil];
|
||||||
|
NSMutableArray<NSString*>* indexesColumns = [NSMutableArray
|
||||||
|
arrayWithObjects:@"index_name", @"unique", @"indexed_column_name", nil];
|
||||||
|
NSMutableArray<NSArray<NSString*>*>* indexesValues = [NSMutableArray
|
||||||
|
arrayWithObjects:@[ @"index_name1", @"false", @"id,name" ],
|
||||||
|
@[ @"index_name2", @"true", @"age" ],
|
||||||
|
nil];
|
||||||
|
|
||||||
|
return [[DatabaseGetTableStructureResponse alloc]
|
||||||
|
initWithStructureColumns:[structureColumns copy]
|
||||||
|
structureValues:[structureValues copy]
|
||||||
|
indexesColumns:[indexesColumns copy]
|
||||||
|
indexesValues:[indexesValues copy]];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
||||||
*
|
|
||||||
* This source code is licensed under the MIT license found in the
|
|
||||||
* LICENSE file in the root directory of this source tree.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#import "MockDatabaseDriver.h"
|
|
||||||
#import "MockDatabaseDescriptor.h"
|
|
||||||
|
|
||||||
@implementation MockDatabaseDriver
|
|
||||||
|
|
||||||
- (NSArray<id<DatabaseDescriptor>>*)getDatabases {
|
|
||||||
MockDatabaseDescriptor* mockDescriptor =
|
|
||||||
[[MockDatabaseDescriptor alloc] init];
|
|
||||||
return @[ mockDescriptor ];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSArray<NSString*>*)getTableNames:
|
|
||||||
(id<DatabaseDescriptor>)databaseDescriptor {
|
|
||||||
return @[ @"MockTable1", @"MockTable2" ];
|
|
||||||
}
|
|
||||||
|
|
||||||
@synthesize databaseDescriptor;
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
@interface ObjectMapper : NSObject
|
@interface ObjectMapper : NSObject
|
||||||
|
|
||||||
+ (NSDictionary*)databaseListToDictionary:
|
+ (NSMutableArray*)databaseListToFlipperArray:
|
||||||
(NSMutableSet<DatabaseDescriptorHolder*>*)databaseDescriptorHolderSet;
|
(NSMutableSet<DatabaseDescriptorHolder*>*)databaseDescriptorHolderSet;
|
||||||
+ (NSDictionary*)databaseGetTableDataResponseToDictionary:
|
+ (NSDictionary*)databaseGetTableDataResponseToDictionary:
|
||||||
(DatabaseGetTableDataResponse*)response;
|
(DatabaseGetTableDataResponse*)response;
|
||||||
|
|||||||
@@ -15,9 +15,9 @@
|
|||||||
|
|
||||||
@implementation ObjectMapper
|
@implementation ObjectMapper
|
||||||
|
|
||||||
+ (NSDictionary*)databaseListToDictionary:
|
+ (NSMutableArray*)databaseListToFlipperArray:
|
||||||
(NSMutableSet<DatabaseDescriptorHolder*>*)databaseDescriptorHolderSet {
|
(NSMutableSet<DatabaseDescriptorHolder*>*)databaseDescriptorHolderSet {
|
||||||
NSMutableDictionary* result = [NSMutableDictionary new];
|
NSMutableArray* result = [NSMutableArray new];
|
||||||
|
|
||||||
for (DatabaseDescriptorHolder* holder in databaseDescriptorHolderSet) {
|
for (DatabaseDescriptorHolder* holder in databaseDescriptorHolderSet) {
|
||||||
NSArray<NSString*>* tables =
|
NSArray<NSString*>* tables =
|
||||||
@@ -25,12 +25,13 @@
|
|||||||
NSArray<NSString*>* sortedTableNames =
|
NSArray<NSString*>* sortedTableNames =
|
||||||
[tables sortedArrayUsingSelector:@selector(compare:)];
|
[tables sortedArrayUsingSelector:@selector(compare:)];
|
||||||
NSString* idString = [NSString stringWithFormat:@"%ld", holder.identifier];
|
NSString* idString = [NSString stringWithFormat:@"%ld", holder.identifier];
|
||||||
|
|
||||||
NSDictionary* databaseInfo = @{
|
NSDictionary* databaseInfo = @{
|
||||||
@"id" : idString,
|
@"id" : idString,
|
||||||
@"name" : holder.databaseDescriptor.name,
|
@"name" : holder.databaseDescriptor.name,
|
||||||
@"tables" : sortedTableNames
|
@"tables" : sortedTableNames
|
||||||
};
|
};
|
||||||
[result setObject:databaseInfo forKey:idString];
|
[result addObject:databaseInfo];
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@@ -47,7 +48,12 @@
|
|||||||
|
|
||||||
+ (NSDictionary*)databaseGetTableStructureResponseToDictionary:
|
+ (NSDictionary*)databaseGetTableStructureResponseToDictionary:
|
||||||
(DatabaseGetTableStructureResponse*)response {
|
(DatabaseGetTableStructureResponse*)response {
|
||||||
return @{};
|
return @{
|
||||||
|
@"structureColumns" : response.structureColumns,
|
||||||
|
@"structureValues" : response.structureValues,
|
||||||
|
@"indexesColumns" : response.indexesColumns,
|
||||||
|
@"indexesValues" : response.indexesValues
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (NSDictionary*)databaseGetTableInfoResponseToDictionary:
|
+ (NSDictionary*)databaseGetTableInfoResponseToDictionary:
|
||||||
|
|||||||
Reference in New Issue
Block a user