181 lines
5.2 KiB
Objective-C
Executable File
181 lines
5.2 KiB
Objective-C
Executable File
//
|
|
// FMDatabase+QSKit.m
|
|
// RSDatabase
|
|
//
|
|
// Created by Brent Simmons on 3/3/14.
|
|
// Copyright (c) 2014 Ranchero Software, LLC. All rights reserved.
|
|
//
|
|
|
|
#import "FMDatabase+RSExtras.h"
|
|
#import "NSString+RSDatabase.h"
|
|
|
|
|
|
#define LOG_SQL 0
|
|
|
|
static void logSQL(NSString *sql) {
|
|
#if LOG_SQL
|
|
NSLog(@"sql: %@", sql);
|
|
#endif
|
|
}
|
|
|
|
|
|
@implementation FMDatabase (RSExtras)
|
|
|
|
|
|
#pragma mark - Deleting
|
|
|
|
- (BOOL)rs_deleteRowsWhereKey:(NSString *)key inValues:(NSArray *)values tableName:(NSString *)tableName {
|
|
|
|
if ([values count] < 1) {
|
|
return YES;
|
|
}
|
|
|
|
NSString *placeholders = [NSString rs_SQLValueListWithPlaceholders:values.count];
|
|
NSString *sql = [NSString stringWithFormat:@"delete from %@ where %@ in %@", tableName, key, placeholders];
|
|
logSQL(sql);
|
|
|
|
return [self executeUpdate:sql withArgumentsInArray:values];
|
|
}
|
|
|
|
|
|
- (BOOL)rs_deleteRowsWhereKey:(NSString *)key equalsValue:(id)value tableName:(NSString *)tableName {
|
|
|
|
NSString *sql = [NSString stringWithFormat:@"delete from %@ where %@ = ?", tableName, key];
|
|
logSQL(sql);
|
|
return [self executeUpdate:sql, value];
|
|
}
|
|
|
|
|
|
#pragma mark - Selecting
|
|
|
|
- (FMResultSet *)rs_selectRowsWhereKey:(NSString *)key inValues:(NSArray *)values tableName:(NSString *)tableName {
|
|
|
|
NSMutableString *sql = [NSMutableString stringWithFormat:@"select * from %@ where %@ in ", tableName, key];
|
|
NSString *placeholders = [NSString rs_SQLValueListWithPlaceholders:values.count];
|
|
[sql appendString:placeholders];
|
|
logSQL(sql);
|
|
|
|
return [self executeQuery:sql withArgumentsInArray:values];
|
|
}
|
|
|
|
|
|
- (FMResultSet *)rs_selectRowsWhereKey:(NSString *)key equalsValue:(id)value tableName:(NSString *)tableName {
|
|
|
|
NSString *sql = [NSMutableString stringWithFormat:@"select * from %@ where %@ = ?", tableName, key];
|
|
logSQL(sql);
|
|
return [self executeQuery:sql, value];
|
|
}
|
|
|
|
|
|
- (FMResultSet *)rs_selectSingleRowWhereKey:(NSString *)key equalsValue:(id)value tableName:(NSString *)tableName {
|
|
|
|
NSString *sql = [NSMutableString stringWithFormat:@"select * from %@ where %@ = ? limit 1", tableName, key];
|
|
logSQL(sql);
|
|
return [self executeQuery:sql, value];
|
|
}
|
|
|
|
|
|
- (FMResultSet *)rs_selectAllRows:(NSString *)tableName {
|
|
|
|
NSString *sql = [NSString stringWithFormat:@"select * from %@", tableName];
|
|
logSQL(sql);
|
|
return [self executeQuery:sql];
|
|
}
|
|
|
|
|
|
- (FMResultSet *)rs_selectColumnWithKey:(NSString *)key tableName:(NSString *)tableName {
|
|
|
|
NSString *sql = [NSString stringWithFormat:@"select %@ from %@", key, tableName];
|
|
logSQL(sql);
|
|
return [self executeQuery:sql];
|
|
}
|
|
|
|
|
|
- (BOOL)rs_rowExistsWithValue:(id)value forKey:(NSString *)key tableName:(NSString *)tableName {
|
|
|
|
NSString *sql = [NSString stringWithFormat:@"select 1 from %@ where %@ = ? limit 1;", tableName, key];
|
|
logSQL(sql);
|
|
FMResultSet *rs = [self executeQuery:sql, value];
|
|
|
|
return [rs next];
|
|
}
|
|
|
|
|
|
- (BOOL)rs_tableIsEmpty:(NSString *)tableName {
|
|
|
|
NSString *sql = [NSString stringWithFormat:@"select 1 from %@ limit 1;", tableName];
|
|
logSQL(sql);
|
|
FMResultSet *rs = [self executeQuery:sql];
|
|
|
|
BOOL isEmpty = YES;
|
|
while ([rs next]) {
|
|
isEmpty = NO;
|
|
}
|
|
return isEmpty;
|
|
}
|
|
|
|
|
|
#pragma mark - Updating
|
|
|
|
- (BOOL)rs_updateRowsWithDictionary:(NSDictionary *)d whereKey:(NSString *)key equalsValue:(id)value tableName:(NSString *)tableName {
|
|
|
|
return [self rs_updateRowsWithDictionary:d whereKey:key inValues:@[value] tableName:tableName];
|
|
}
|
|
|
|
|
|
- (BOOL)rs_updateRowsWithDictionary:(NSDictionary *)d whereKey:(NSString *)key inValues:(NSArray *)keyValues tableName:(NSString *)tableName {
|
|
|
|
NSMutableArray *keys = [NSMutableArray new];
|
|
NSMutableArray *values = [NSMutableArray new];
|
|
|
|
[d enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
|
|
[keys addObject:key];
|
|
[values addObject:obj];
|
|
}];
|
|
|
|
NSString *keyPlaceholders = [NSString rs_SQLKeyPlaceholderPairsWithKeys:keys];
|
|
NSString *keyValuesPlaceholder = [NSString rs_SQLValueListWithPlaceholders:keyValues.count];
|
|
NSString *sql = [NSString stringWithFormat:@"update %@ set %@ where %@ in %@", tableName, keyPlaceholders, key, keyValuesPlaceholder];
|
|
|
|
NSMutableArray *parameters = values;
|
|
[parameters addObjectsFromArray:keyValues];
|
|
logSQL(sql);
|
|
|
|
return [self executeUpdate:sql withArgumentsInArray:parameters];
|
|
}
|
|
|
|
|
|
- (BOOL)rs_updateRowsWithValue:(id)value valueKey:(NSString *)valueKey whereKey:(NSString *)key inValues:(NSArray *)keyValues tableName:(NSString *)tableName {
|
|
|
|
NSDictionary *d = @{valueKey: value};
|
|
return [self rs_updateRowsWithDictionary:d whereKey:key inValues:keyValues tableName:tableName];
|
|
}
|
|
|
|
|
|
#pragma mark - Saving
|
|
|
|
- (BOOL)rs_insertRowWithDictionary:(NSDictionary *)d insertType:(RSDatabaseInsertType)insertType tableName:(NSString *)tableName {
|
|
|
|
NSArray *keys = d.allKeys;
|
|
NSArray *values = [d objectsForKeys:keys notFoundMarker:[NSNull null]];
|
|
|
|
NSString *sqlKeysList = [NSString rs_SQLKeysListWithArray:keys];
|
|
NSString *placeholders = [NSString rs_SQLValueListWithPlaceholders:values.count];
|
|
|
|
NSString *sqlBeginning = @"insert into ";
|
|
if (insertType == RSDatabaseInsertOrReplace) {
|
|
sqlBeginning = @"insert or replace into ";
|
|
}
|
|
else if (insertType == RSDatabaseInsertOrIgnore) {
|
|
sqlBeginning = @"insert or ignore into ";
|
|
}
|
|
|
|
NSString *sql = [NSString stringWithFormat:@"%@ %@ %@ values %@", sqlBeginning, tableName, sqlKeysList, placeholders];
|
|
logSQL(sql);
|
|
|
|
return [self executeUpdate:sql withArgumentsInArray:values];
|
|
}
|
|
|
|
@end
|
|
|