added files via upload

This commit is contained in:
Balackburn
2023-06-27 09:54:41 +02:00
commit 2ff6aac218
1420 changed files with 88898 additions and 0 deletions

View File

@@ -0,0 +1,165 @@
//
// 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"
#import "FLEXMutableListSection.h"
#import "NSArray+FLEX.h"
#import "FLEXAlert.h"
#import "FLEXMacros.h"
@interface FLEXTableListViewController ()
@property (nonatomic, readonly) id<FLEXDatabaseManager> dbm;
@property (nonatomic, readonly) NSString *path;
@property (nonatomic, readonly) FLEXMutableListSection<NSString *> *tables;
+ (NSArray<NSString *> *)supportedSQLiteExtensions;
+ (NSArray<NSString *> *)supportedRealmExtensions;
@end
@implementation FLEXTableListViewController
- (instancetype)initWithPath:(NSString *)path {
self = [super initWithStyle:UITableViewStyleGrouped];
if (self) {
_path = path.copy;
_dbm = [self databaseManagerForFileAtPath:path];
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.showsSearchBar = YES;
// Compose query button //
UIBarButtonItem *composeQuery = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemCompose
target:self
action:@selector(queryButtonPressed)
];
// Cannot run custom queries on realm databases
composeQuery.enabled = [self.dbm
respondsToSelector:@selector(executeStatement:)
];
[self addToolbarItems:@[composeQuery]];
}
- (NSArray<FLEXTableViewSection *> *)makeSections {
_tables = [FLEXMutableListSection list:[self.dbm queryAllTables]
cellConfiguration:^(__kindof UITableViewCell *cell, NSString *tableName, NSInteger row) {
cell.textLabel.text = tableName;
} filterMatcher:^BOOL(NSString *filterText, NSString *tableName) {
return [tableName localizedCaseInsensitiveContainsString:filterText];
}
];
self.tables.selectionHandler = ^(FLEXTableListViewController *host, NSString *tableName) {
NSArray *rows = [host.dbm queryAllDataInTable:tableName];
NSArray *columns = [host.dbm queryAllColumnsOfTable:tableName];
NSArray *rowIDs = nil;
if ([host.dbm respondsToSelector:@selector(queryRowIDsInTable:)]) {
rowIDs = [host.dbm queryRowIDsInTable:tableName];
}
UIViewController *resultsScreen = [FLEXTableContentViewController
columns:columns rows:rows rowIDs:rowIDs tableName:tableName database:host.dbm
];
[host.navigationController pushViewController:resultsScreen animated:YES];
};
return @[self.tables];
}
- (void)reloadData {
self.tables.customTitle = [NSString
stringWithFormat:@"Tables (%@)", @(self.tables.filteredList.count)
];
[super reloadData];
}
- (void)queryButtonPressed {
FLEXSQLiteDatabaseManager *database = self.dbm;
[FLEXAlert makeAlert:^(FLEXAlert *make) {
make.title(@"Execute an SQL query");
make.textField(nil);
make.button(@"Run").handler(^(NSArray<NSString *> *strings) {
FLEXSQLResult *result = [database executeStatement:strings[0]];
if (result.message) {
[FLEXAlert showAlert:@"Message" message:result.message from:self];
} else {
UIViewController *resultsScreen = [FLEXTableContentViewController
columns:result.columns rows:result.rows
];
[self.navigationController pushViewController:resultsScreen animated:YES];
}
});
make.button(@"Cancel").cancelStyle();
} showFrom:self];
}
- (id<FLEXDatabaseManager>)databaseManagerForFileAtPath:(NSString *)path {
NSString *pathExtension = path.pathExtension.lowercaseString;
NSArray<NSString *> *sqliteExtensions = FLEXTableListViewController.supportedSQLiteExtensions;
if ([sqliteExtensions indexOfObject:pathExtension] != NSNotFound) {
return [FLEXSQLiteDatabaseManager managerForDatabase:path];
}
NSArray<NSString *> *realmExtensions = FLEXTableListViewController.supportedRealmExtensions;
if (realmExtensions != nil && [realmExtensions indexOfObject:pathExtension] != NSNotFound) {
return [FLEXRealmDatabaseManager managerForDatabase:path];
}
return nil;
}
#pragma mark - FLEXTableListViewController
+ (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