mirror of
https://github.com/CocoaLumberjack/CocoaLumberjack.git
synced 2026-06-06 20:18:32 +00:00
115 lines
3.9 KiB
Objective-C
115 lines
3.9 KiB
Objective-C
//
|
|
// 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
|