summaryrefslogtreecommitdiffstats
path: root/Classes/FMDatabaseAdditions.m
diff options
context:
space:
mode:
Diffstat (limited to 'Classes/FMDatabaseAdditions.m')
-rw-r--r--Classes/FMDatabaseAdditions.m114
1 files changed, 114 insertions, 0 deletions
diff --git a/Classes/FMDatabaseAdditions.m b/Classes/FMDatabaseAdditions.m
new file mode 100644
index 0000000..3ac45cb
--- /dev/null
+++ b/Classes/FMDatabaseAdditions.m
@@ -0,0 +1,114 @@
+//
+// FMDatabaseAdditions.m
+// fmkit
+//
+// Created by August Mueller on 10/30/05.
+// Copyright 2005 Flying Meat Inc.. All rights reserved.
+//
+
+#import "FMDatabase.h"
+#import "FMDatabaseAdditions.h"
+
+@implementation FMDatabase (FMDatabaseAdditions)
+
+#define RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(type, sel) \
+va_list args; \
+va_start(args, query); \
+FMResultSet *resultSet = [self executeQuery:query withArgumentsInArray:0x00 orVAList:args]; \
+va_end(args); \
+if (![resultSet next]) { return (type)0; } \
+type ret = [resultSet sel:0]; \
+[resultSet close]; \
+[resultSet setParentDB:nil]; \
+return ret;
+
+
+- (NSString*)stringForQuery:(NSString*)query, ... {
+ RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(NSString *, stringForColumnIndex);
+}
+
+- (int)intForQuery:(NSString*)query, ... {
+ RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(int, intForColumnIndex);
+}
+
+- (long)longForQuery:(NSString*)query, ... {
+ RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(long, longForColumnIndex);
+}
+
+- (BOOL)boolForQuery:(NSString*)query, ... {
+ RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(BOOL, boolForColumnIndex);
+}
+
+- (double)doubleForQuery:(NSString*)query, ... {
+ RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(double, doubleForColumnIndex);
+}
+
+- (NSData*)dataForQuery:(NSString*)query, ... {
+ RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(NSData *, dataForColumnIndex);
+}
+
+- (NSDate*)dateForQuery:(NSString*)query, ... {
+ RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(NSDate *, dateForColumnIndex);
+}
+
+
+//check if table exist in database (patch from OZLB)
+- (BOOL)tableExists:(NSString*)tableName {
+
+ BOOL returnBool;
+ //lower case table name
+ tableName = [tableName lowercaseString];
+ //search in sqlite_master table if table exists
+ FMResultSet *rs = [self executeQuery:@"select [sql] from sqlite_master where [type] = 'table' and lower(name) = ?", tableName];
+ //if at least one next exists, table exists
+ returnBool = [rs next];
+ //close and free object
+ [rs close];
+
+ return returnBool;
+}
+
+//get table with list of tables: result colums: type[STRING], name[STRING],tbl_name[STRING],rootpage[INTEGER],sql[STRING]
+//check if table exist in database (patch from OZLB)
+- (FMResultSet*)getSchema {
+
+ //result colums: type[STRING], name[STRING],tbl_name[STRING],rootpage[INTEGER],sql[STRING]
+ FMResultSet *rs = [self executeQuery:@"SELECT type, name, tbl_name, rootpage, sql FROM (SELECT * FROM sqlite_master UNION ALL SELECT * FROM sqlite_temp_master) WHERE type != 'meta' AND name NOT LIKE 'sqlite_%' ORDER BY tbl_name, type DESC, name"];
+
+ return rs;
+}
+
+//get table schema: result colums: cid[INTEGER], name,type [STRING], notnull[INTEGER], dflt_value[],pk[INTEGER]
+- (FMResultSet*)getTableSchema:(NSString*)tableName {
+
+ //result colums: cid[INTEGER], name,type [STRING], notnull[INTEGER], dflt_value[],pk[INTEGER]
+ FMResultSet *rs = [self executeQuery:[NSString stringWithFormat: @"PRAGMA table_info(%@)", tableName]];
+
+ return rs;
+}
+
+
+//check if column exist in table
+- (BOOL)columnExists:(NSString*)tableName columnName:(NSString*)columnName {
+
+ BOOL returnBool = NO;
+ //lower case table name
+ tableName = [tableName lowercaseString];
+ //lower case column name
+ columnName = [columnName lowercaseString];
+ //get table schema
+ FMResultSet *rs = [self getTableSchema: tableName];
+ //check if column is present in table schema
+ while ([rs next]) {
+ if ([[[rs stringForColumn:@"name"] lowercaseString] isEqualToString: columnName]) {
+ returnBool = YES;
+ break;
+ }
+ }
+ //close and free object
+ [rs close];
+
+ return returnBool;
+}
+
+@end