You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
4.1 KiB
137 lines
4.1 KiB
//
|
|
// PTTableListViewController.m
|
|
// PTDatabaseReader
|
|
//
|
|
// Created by Peng Tao on 15/11/23.
|
|
// Copyright © 2015年 Peng Tao. All rights reserved.
|
|
//
|
|
|
|
#import "FLEXTableListViewController.h"
|
|
|
|
#import "FLEXDatabaseManager.h"
|
|
#import "FLEXSQLiteDatabaseManager.h"
|
|
#import "FLEXRealmDatabaseManager.h"
|
|
|
|
#import "FLEXTableContentViewController.h"
|
|
|
|
@interface FLEXTableListViewController ()
|
|
{
|
|
id<FLEXDatabaseManager> _dbm;
|
|
NSString *_databasePath;
|
|
}
|
|
|
|
@property (nonatomic, strong) NSArray<NSString *> *tables;
|
|
|
|
+ (NSArray<NSString *> *)supportedSQLiteExtensions;
|
|
+ (NSArray<NSString *> *)supportedRealmExtensions;
|
|
|
|
@end
|
|
|
|
@implementation FLEXTableListViewController
|
|
|
|
- (instancetype)initWithPath:(NSString *)path
|
|
{
|
|
self = [super initWithStyle:UITableViewStyleGrouped];
|
|
if (self) {
|
|
_databasePath = [path copy];
|
|
_dbm = [self databaseManagerForFileAtPath:_databasePath];
|
|
[_dbm open];
|
|
[self getAllTables];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (id<FLEXDatabaseManager>)databaseManagerForFileAtPath:(NSString *)path
|
|
{
|
|
NSString *pathExtension = path.pathExtension.lowercaseString;
|
|
|
|
NSArray<NSString *> *sqliteExtensions = [FLEXTableListViewController supportedSQLiteExtensions];
|
|
if ([sqliteExtensions indexOfObject:pathExtension] != NSNotFound) {
|
|
return [[FLEXSQLiteDatabaseManager alloc] initWithPath:path];
|
|
}
|
|
|
|
NSArray<NSString *> *realmExtensions = [FLEXTableListViewController supportedRealmExtensions];
|
|
if (realmExtensions != nil && [realmExtensions indexOfObject:pathExtension] != NSNotFound) {
|
|
return [[FLEXRealmDatabaseManager alloc] initWithPath:path];
|
|
}
|
|
|
|
return nil;
|
|
}
|
|
|
|
- (void)getAllTables
|
|
{
|
|
NSArray<NSDictionary<NSString *, id> *> *resultArray = [_dbm queryAllTables];
|
|
NSMutableArray<NSString *> *array = [NSMutableArray array];
|
|
for (NSDictionary<NSString *, id> *dict in resultArray) {
|
|
NSString *columnName = (NSString *)dict[@"name"] ?: @"";
|
|
[array addObject:columnName];
|
|
}
|
|
self.tables = array;
|
|
}
|
|
|
|
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
|
|
{
|
|
return self.tables.count;
|
|
}
|
|
|
|
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
|
|
{
|
|
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"FLEXTableListViewControllerCell"];
|
|
if (!cell) {
|
|
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
|
|
reuseIdentifier:@"FLEXTableListViewControllerCell"];
|
|
}
|
|
cell.textLabel.text = self.tables[indexPath.row];
|
|
return cell;
|
|
}
|
|
|
|
|
|
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
|
|
{
|
|
FLEXTableContentViewController *contentViewController = [[FLEXTableContentViewController alloc] init];
|
|
|
|
contentViewController.contentsArray = [_dbm queryAllDataWithTableName:self.tables[indexPath.row]];
|
|
contentViewController.columnsArray = [_dbm queryAllColumnsWithTableName:self.tables[indexPath.row]];
|
|
|
|
contentViewController.title = self.tables[indexPath.row];
|
|
[self.navigationController pushViewController:contentViewController animated:YES];
|
|
}
|
|
|
|
|
|
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
|
|
{
|
|
return [NSString stringWithFormat:@"%lu tables", (unsigned long)self.tables.count];
|
|
}
|
|
|
|
+ (BOOL)supportsExtension:(NSString *)extension
|
|
{
|
|
extension = extension.lowercaseString;
|
|
|
|
NSArray<NSString *> *sqliteExtensions = [FLEXTableListViewController supportedSQLiteExtensions];
|
|
if (sqliteExtensions.count > 0 && [sqliteExtensions indexOfObject:extension] != NSNotFound) {
|
|
return YES;
|
|
}
|
|
|
|
NSArray<NSString *> *realmExtensions = [FLEXTableListViewController supportedRealmExtensions];
|
|
if (realmExtensions.count > 0 && [realmExtensions indexOfObject:extension] != NSNotFound) {
|
|
return YES;
|
|
}
|
|
|
|
return NO;
|
|
}
|
|
|
|
+ (NSArray<NSString *> *)supportedSQLiteExtensions
|
|
{
|
|
return @[@"db", @"sqlite", @"sqlite3"];
|
|
}
|
|
|
|
+ (NSArray<NSString *> *)supportedRealmExtensions
|
|
{
|
|
if (NSClassFromString(@"RLMRealm") == nil) {
|
|
return nil;
|
|
}
|
|
|
|
return @[@"realm"];
|
|
}
|
|
|
|
@end
|