diff options
3 files changed, 33 insertions, 2 deletions
diff --git a/Frameworks/PostgresKit/Source/FLXPostgresKitPrivateAPI.h b/Frameworks/PostgresKit/Source/FLXPostgresKitPrivateAPI.h index d78ac063..1a564b91 100644 --- a/Frameworks/PostgresKit/Source/FLXPostgresKitPrivateAPI.h +++ b/Frameworks/PostgresKit/Source/FLXPostgresKitPrivateAPI.h @@ -37,7 +37,8 @@ @interface FLXPostgresTimeInterval () -- (id)initWithInterval:(const PGinterval *)interval; ++ (id)intervalWithPGInterval:(PGinterval *)interval; +- (id)initWithInterval:(PGinterval *)interval; @end diff --git a/Frameworks/PostgresKit/Source/FLXPostgresTimeInterval.m b/Frameworks/PostgresKit/Source/FLXPostgresTimeInterval.m index 7faaad41..5acd7581 100644 --- a/Frameworks/PostgresKit/Source/FLXPostgresTimeInterval.m +++ b/Frameworks/PostgresKit/Source/FLXPostgresTimeInterval.m @@ -43,7 +43,12 @@ #pragma mark - -- (id)initWithInterval:(const PGinterval *)interval ++ (id)intervalWithPGInterval:(PGinterval *)interval +{ + return [[[FLXPostgresTimeInterval alloc] initWithInterval:interval] autorelease]; +} + +- (id)initWithInterval:(PGinterval *)interval { if ((self = [super init])) { if (interval) { diff --git a/Frameworks/PostgresKit/Source/FLXPostgresTypeDateTimeHandler.m b/Frameworks/PostgresKit/Source/FLXPostgresTypeDateTimeHandler.m index b28868cc..2dd4227c 100644 --- a/Frameworks/PostgresKit/Source/FLXPostgresTypeDateTimeHandler.m +++ b/Frameworks/PostgresKit/Source/FLXPostgresTypeDateTimeHandler.m @@ -26,6 +26,8 @@ #import "FLXPostgresConnection.h" #import "FLXPostgresConnectionTypeHandling.h" #import "FLXPostgresTimeTZ.h" +#import "FLXPostgresTimeInterval.h" +#import "FLXPostgresKitPrivateAPI.h" static FLXPostgresOid FLXPostgresTypeDateTimeTypes[] = { @@ -35,12 +37,15 @@ static FLXPostgresOid FLXPostgresTypeDateTimeTypes[] = FLXPostgresOidAbsTime, FLXPostgresOidTimestamp, FLXPostgresOidTimestampTZ, + FLXPostgresOidInterval, 0 }; @interface FLXPostgresTypeDateTimeHandler () - (NSDate *)_dateFromResult:(const PGresult *)result atRow:(NSUInteger)row column:(NSUInteger)column; +- (FLXPostgresTimeInterval *)_timeIntervalFromResult:(const PGresult *)result atRow:(NSUInteger)row column:(NSUInteger)column; + - (id)_timeFromResult:(const PGresult *)result atRow:(NSUInteger)row column:(NSUInteger)column type:(FLXPostgresOid)type; - (id)_timestmpFromResult:(const PGresult *)result atRow:(NSUInteger)row column:(NSUInteger)column type:(FLXPostgresOid)type; @@ -83,6 +88,8 @@ static FLXPostgresOid FLXPostgresTypeDateTimeTypes[] = case FLXPostgresOidTimestamp: case FLXPostgresOidTimestampTZ: return [self _timestmpFromResult:result atRow:row column:column type:type]; + case FLXPostgresOidInterval: + return [self _timeIntervalFromResult:result atRow:row column:column]; default: return nil; } @@ -116,6 +123,24 @@ static FLXPostgresOid FLXPostgresTypeDateTimeTypes[] = } /** + * Converts a time interval value to a FLXPostgresTimeInterval instance. + * + * @param result The result to extract the value from. + * @param row The row to extract the value from. + * @param column The column to extract the value from. + * + * @return The FLXPostgresTimeInterval representation. + */ +- (FLXPostgresTimeInterval *)_timeIntervalFromResult:(const PGresult *)result atRow:(NSUInteger)row column:(NSUInteger)column +{ + PGinterval interval; + + if (!PQgetf(result, row, "%interval", column, &interval)) return nil; + + return [FLXPostgresTimeInterval intervalWithPGInterval:&interval]; +} + +/** * Returns a native object created from a time value. * * @note The date part should be ignored as it's set to a default value. |