diff --git a/SOPE/GDLContentStore/EOQualifier+GCS.h b/SOPE/GDLContentStore/EOQualifier+GCS.h index 27fae8d72..3b2c8f6ca 100644 --- a/SOPE/GDLContentStore/EOQualifier+GCS.h +++ b/SOPE/GDLContentStore/EOQualifier+GCS.h @@ -28,7 +28,7 @@ @interface EOQualifier(GCS) -- (void)_gcsAppendToString:(NSMutableString *)_ms; +- (void) _gcsAppendToString: (NSMutableString *) _ms; @end diff --git a/SOPE/GDLContentStore/EOQualifier+GCS.m b/SOPE/GDLContentStore/EOQualifier+GCS.m index d0aec9a50..6158bc73e 100644 --- a/SOPE/GDLContentStore/EOQualifier+GCS.m +++ b/SOPE/GDLContentStore/EOQualifier+GCS.m @@ -32,8 +32,8 @@ @implementation EOQualifier(GCS) -- (void)_appendAndQualifier:(EOAndQualifier *)_q - toString:(NSMutableString *)_ms +- (void) _appendAndQualifier: (EOAndQualifier *) _q + toString: (NSMutableString *) _ms { // TODO: move to EOQualifier category NSArray *qs; @@ -46,12 +46,12 @@ for (i = 0; i < count; i++) { if (i != 0) [_ms appendString:@" AND "]; if (count > 1) [_ms appendString:@"("]; - [[qs objectAtIndex:i] _gcsAppendToString:_ms]; + [[qs objectAtIndex:i] _gcsAppendToString: _ms]; if (count > 1) [_ms appendString:@")"]; } } -- (void)_appendOrQualifier:(EOAndQualifier *)_q - toString:(NSMutableString *)_ms +- (void)_appendOrQualifier: (EOAndQualifier *) _q + toString: (NSMutableString *) _ms { // TODO: move to EOQualifier category NSArray *qs; @@ -64,21 +64,21 @@ for (i = 0; i < count; i++) { if (i != 0) [_ms appendString:@" OR "]; if (count > 1) [_ms appendString:@"("]; - [[qs objectAtIndex:i] _gcsAppendToString:_ms]; + [[qs objectAtIndex:i] _gcsAppendToString: _ms]; if (count > 1) [_ms appendString:@")"]; } } -- (void)_appendNotQualifier:(EONotQualifier *)_q - toString:(NSMutableString *)_ms +- (void)_appendNotQualifier: (EONotQualifier *)_q + toString:(NSMutableString *) _ms { [_ms appendString:@" NOT ("]; - [[_q qualifier] _gcsAppendToString:_ms]; + [[_q qualifier] _gcsAppendToString: _ms]; [_ms appendString:@")"]; } -- (void)_appendKeyValueQualifier:(EOKeyValueQualifier *)_q - toString:(NSMutableString *)_ms +- (void) _appendKeyValueQualifier: (EOKeyValueQualifier *) _q + toString: (NSMutableString *) _ms { id val; NSString *qKey, *qOperator, *qValue, *qFormat; @@ -115,10 +115,13 @@ qOperator = @"="; } - if ([val isKindOfClass:[NSNumber class]]) + if ([val isKindOfClass: [NSNumber class]]) qValue = [val stringValue]; - else if ([val isKindOfClass:[NSString class]]) { - qValue = [NSString stringWithFormat: @"'%@'", [val stringByReplacingString: @"'" withString: @"\\'"]]; + else if ([val isKindOfClass: [NSString class]]) { + if ([val hasPrefix: @"'"]) + qValue = val; + else + qValue = [NSString stringWithFormat: @"'%@'", val]; } else { qValue = @"NULL"; @@ -151,23 +154,31 @@ [_ms appendFormat: qFormat, qKey, qOperator, qValue]; } -- (void)_appendQualifier:(EOQualifier *)_q toString:(NSMutableString *)_ms { +- (void) _appendQualifier: (EOQualifier *) _q + toString: (NSMutableString *) _ms +{ if (_q == nil) return; - if ([_q isKindOfClass:[EOAndQualifier class]]) - [self _appendAndQualifier:(id)_q toString:_ms]; - else if ([_q isKindOfClass:[EOOrQualifier class]]) - [self _appendOrQualifier:(id)_q toString:_ms]; - else if ([_q isKindOfClass:[EOKeyValueQualifier class]]) - [self _appendKeyValueQualifier:(id)_q toString:_ms]; - else if ([_q isKindOfClass:[EONotQualifier class]]) - [self _appendNotQualifier:(id)_q toString:_ms]; + if ([_q isKindOfClass: [EOAndQualifier class]]) + [self _appendAndQualifier: (id)_q + toString: _ms]; + else if ([_q isKindOfClass: [EOOrQualifier class]]) + [self _appendOrQualifier: (id)_q + toString:_ms]; + else if ([_q isKindOfClass: [EOKeyValueQualifier class]]) + [self _appendKeyValueQualifier: (id)_q + toString:_ms]; + else if ([_q isKindOfClass: [EONotQualifier class]]) + [self _appendNotQualifier: (id)_q + toString:_ms]; else [self errorWithFormat:@"unknown qualifier: %@", _q]; } -- (void)_gcsAppendToString:(NSMutableString *)_ms { - [self _appendQualifier:self toString:_ms]; +- (void) _gcsAppendToString: (NSMutableString *) _ms +{ + [self _appendQualifier: self + toString: _ms]; } @end /* EOQualifier(GCS) */ diff --git a/SOPE/GDLContentStore/GCSFolder.m b/SOPE/GDLContentStore/GCSFolder.m index ed35c383e..d2959ac3b 100644 --- a/SOPE/GDLContentStore/GCSFolder.m +++ b/SOPE/GDLContentStore/GCSFolder.m @@ -380,10 +380,31 @@ static GCSStringFormatter *stringFormatter = nil; - (NSString *) _sqlForQualifier: (EOQualifier *) qualifier { + static EOAdaptor *adaptor = nil; NSMutableString *ms; if (qualifier) { + if (!adaptor) + { + EOAdaptorContext *adaptorCtx; + EOAdaptorChannel *channel; + channel = [self acquireStoreChannel]; + adaptorCtx = [channel adaptorContext]; + adaptor = [adaptorCtx adaptor]; + } + + if ([qualifier isKindOfClass: [EOAndQualifier class]]) + [self _findQualifiers: (id)qualifier withAdaptor: adaptor]; + else if ([qualifier isKindOfClass:[EOOrQualifier class]]) + [self _findQualifiers: (id)qualifier withAdaptor: adaptor]; + else if ([qualifier isKindOfClass:[EOKeyValueQualifier class]]) + [self _formatQualifierValue: (id)qualifier withAdaptor: adaptor]; + else if ([qualifier isKindOfClass:[EONotQualifier class]]) + [self _formatQualifierValue: [(id)qualifier qualifier] withAdaptor: adaptor]; + else + [self errorWithFormat:@"unknown qualifier: %@", qualifier]; + ms = [NSMutableString stringWithCapacity:32]; [qualifier _gcsAppendToString: ms]; } @@ -393,6 +414,47 @@ static GCSStringFormatter *stringFormatter = nil; return ms; } +- (void) _findQualifiers: (id) qualifier + withAdaptor: (EOAdaptor *) adaptor +{ + NSArray *qs; + unsigned i, count; + + if (qualifier == nil) return; + + qs = [qualifier qualifiers]; + if ((count = [qs count]) == 0) + return; + + for (i = 0; i < count; i++) { + id q = [qs objectAtIndex: i]; + if ([q isKindOfClass: [EOAndQualifier class]]) + [self _findQualifiers: q withAdaptor: adaptor]; + else if ([q isKindOfClass:[EOOrQualifier class]]) + [self _findQualifiers: q withAdaptor: adaptor]; + else if ([q isKindOfClass:[EOKeyValueQualifier class]]) + [self _formatQualifierValue: q withAdaptor: adaptor]; + else if ([q isKindOfClass:[EONotQualifier class]]) + [self _formatQualifierValue: [q qualifier] withAdaptor: adaptor]; + else + [self errorWithFormat:@"unknown qualifier: %@", q]; + } +} + +- (void) _formatQualifierValue: (EOKeyValueQualifier *) qualifier + withAdaptor: (EOAdaptor *) adaptor +{ + NSString *field; + EOAttribute *attribute; + NSString *formattedValue; + + field = [qualifier key]; + attribute = [self _attributeForColumn: field]; + formattedValue = [adaptor formatValue: [qualifier value] + forAttribute: attribute]; + [qualifier setValue: formattedValue]; +} + - (NSString *)_sqlForSortOrderings:(NSArray *)_so { NSMutableString *sql; unsigned i, count;