#import #import "sqlite3.h" #ifndef __has_feature // Optional. #define __has_feature(x) 0 // Compatibility with non-clang compilers. #endif #ifndef NS_RETURNS_NOT_RETAINED #if __has_feature(attribute_ns_returns_not_retained) #define NS_RETURNS_NOT_RETAINED __attribute__((ns_returns_not_retained)) #else #define NS_RETURNS_NOT_RETAINED #endif #endif @class FMDatabase; @class FMStatement; @interface FMResultSet : NSObject { FMDatabase *parentDB; FMStatement *statement; NSString *query; NSMutableDictionary *columnNameToIndexMap; BOOL columnNamesSetup; } + (id)resultSetWithStatement:(FMStatement *)statement usingParentDatabase:(FMDatabase*)aDB; - (void)close; - (NSString *)query; - (void)setQuery:(NSString *)value; - (FMStatement *)statement; - (void)setStatement:(FMStatement *)value; - (void)setParentDB:(FMDatabase *)newDb; - (BOOL)next; - (BOOL)hasAnotherRow; - (int)columnIndexForName:(NSString*)columnName; - (NSString*)columnNameForIndex:(int)columnIdx; - (int)intForColumn:(NSString*)columnName; - (int)intForColumnIndex:(int)columnIdx; - (long)longForColumn:(NSString*)columnName; - (long)longForColumnIndex:(int)columnIdx; - (long long int)longLongIntForColumn:(NSString*)columnName; - (long long int)longLongIntForColumnIndex:(int)columnIdx; - (BOOL)boolForColumn:(NSString*)columnName; - (BOOL)boolForColumnIndex:(int)columnIdx; - (double)doubleForColumn:(NSString*)columnName; - (double)doubleForColumnIndex:(int)columnIdx; - (NSString*)stringForColumn:(NSString*)columnName; - (NSString*)stringForColumnIndex:(int)columnIdx; - (NSDate*)dateForColumn:(NSString*)columnName; - (NSDate*)dateForColumnIndex:(int)columnIdx; - (NSData*)dataForColumn:(NSString*)columnName; - (NSData*)dataForColumnIndex:(int)columnIdx; - (const unsigned char *)UTF8StringForColumnIndex:(int)columnIdx; - (const unsigned char *)UTF8StringForColumnName:(NSString*)columnName; // returns one of NSNumber, NSString, NSData, or NSNull - (id)objectForColumnIndex:(int)columnIdx; - (id)objectForColumnName:(NSString*)columnName; /* If you are going to use this data after you iterate over the next row, or after you close the result set, make sure to make a copy of the data first (or just use dataForColumn:/dataForColumnIndex:) If you don't, you're going to be in a world of hurt when you try and use the data. */ - (NSData*)dataNoCopyForColumn:(NSString*)columnName NS_RETURNS_NOT_RETAINED; - (NSData*)dataNoCopyForColumnIndex:(int)columnIdx NS_RETURNS_NOT_RETAINED; - (BOOL)columnIndexIsNull:(int)columnIdx; - (BOOL)columnIsNull:(NSString*)columnName; - (void)kvcMagic:(id)object; - (NSDictionary *)resultDict; @end