diff --git a/ChangeLog b/ChangeLog index d327285..f4e3355 100644 --- a/ChangeLog +++ b/ChangeLog @@ -53,6 +53,35 @@ o subclass joinExpression to avoid building join expression (it's now build in -tableListWithRootEntity o sublass -tableListWithRootEntity to add joins in it. + * EOAccess/EOSQLQualifier.m + o fix in EOOrQualifier -sqlStringForSQLExpression: + use sqlExpression -sqlStringForDisjoinedQualifiers: + (problem was missing () around expression) + * EOControl/EOAndQualifier.m: + o implemented -_addBindingsToDictionary: + o implemented -qualifierWithBindings:requiresAllVariables: + o implemented -validateKeysWithRootClassDescription: + * EOControl/EOKeyValueQualifier.m: + o implemented -validateKeysWithRootClassDescription: + o implemented -initWithKeyValueUnarchiver: + o removed duplicate -initWithKeyValueUnarchiver: and + -encodeWithKeyValueArchiver + o implemented -_addBindingsToDictionary: + o implemented - qualifierWithBindings:requiresAllVariables: + * EOControl/EOOrQualifier.m: + o implemented -_addBindingsToDictionary: + o implemented -qualifierWithBindings:requiresAllVariables: + o implemented -validateKeysWithRootClassDescription: + * EOControl/EONotQualifier.m: + o implemented -_addBindingsToDictionary: + o implemented -validateKeysWithRootClassDescription: + o implemented -qualifierWithBindings:requiresAllVariables: + * EOControl/EOQualifier.m: + o implemented _validateKey:withRootClassDescription: + o implemented -validateKeysWithRootClassDescription: + o implemented -bindingKeys + o implemented -keyPathForBindingKey: + o added EOQualifierVariableSubstitutionException; 2003-10-24 David Ayers diff --git a/EOAccess/EOSQLQualifier.m b/EOAccess/EOSQLQualifier.m index 0a12c99..8c4dec5 100644 --- a/EOAccess/EOSQLQualifier.m +++ b/EOAccess/EOSQLQualifier.m @@ -105,6 +105,7 @@ RCS_ID("$Id$") - (NSString *)sqlStringForSQLExpression: (EOSQLExpression *)sqlExpression { //OK? + //Ayers: Review (This looks correct, time to cleanup.) return [sqlExpression sqlStringForConjoinedQualifiers: _qualifiers]; /* @@ -176,6 +177,11 @@ RCS_ID("$Id$") - (NSString *)sqlStringForSQLExpression: (EOSQLExpression *)sqlExpression { + //OK? + //Ayers: Review (This looks correct, time to cleanup.) + return [sqlExpression sqlStringForDisjoinedQualifiers: _qualifiers]; + +/* NSEnumerator *qualifiersEnum; EOQualifier *qualifier; NSMutableString *sqlString = nil; @@ -197,6 +203,7 @@ RCS_ID("$Id$") } return sqlString; +*/ } - (EOQualifier *)schemaBasedQualifierWithRootEntity: (EOEntity *)entity diff --git a/EOControl/EOAndQualifier.m b/EOControl/EOAndQualifier.m index 54576b8..947dbe3 100644 --- a/EOControl/EOAndQualifier.m +++ b/EOControl/EOAndQualifier.m @@ -155,23 +155,52 @@ RCS_ID("$Id$") return [self notImplemented: _cmd]; //TODO } -- (void) _addBindingsToDictionary: (id)param0 +- (void) _addBindingsToDictionary: (NSMutableDictionary*)dictionary { - [self notImplemented: _cmd]; //TODO + int i=0; + int count=[_qualifiers count]; + for(i=0;i 0) + for(i=0; i 0) + { + if ([newQualifiers count] == 1) + { + resultQualifier=[newQualifiers lastObject]; + } + else + { + resultQualifier + =[[self class] qualifierWithQualifierArray:newQualifiers]; + } + } + return resultQualifier; } - (id) initWithKeyValueUnarchiver: (id)param0 @@ -184,9 +213,17 @@ RCS_ID("$Id$") [self notImplemented: _cmd]; //TODO } -- (id) validateKeysWithRootClassDescription: (id)param0 +- (NSException *) validateKeysWithRootClassDescription:(EOClassDescription*)classDescription { - return [self notImplemented: _cmd]; //TODO + //Ayers: Review + int i = 0; + int count = [_qualifiers count]; + for(i=0; i #include #include +#include #else #include #endif @@ -69,6 +70,12 @@ RCS_ID("$Id$") - (NSComparisonResult)compare: (id)other; @end +@interface EOQualifier (Privat) +- (void) _addBindingsToDictionary: (NSMutableDictionary*)dictionary; +- (NSException *)_validateKey: (NSString*)key + withRootClassDescription: (EOClassDescription *)classDescription; +@end + @implementation EOKeyValueQualifier /** @@ -254,38 +261,39 @@ RCS_ID("$Id$") } -- (id) validateKeysWithRootClassDescription: (id)param0 +- (NSException *)validateKeysWithRootClassDescription:(EOClassDescription*)classDescription { - return [self notImplemented: _cmd]; //TODO -} - -- (id) initWithKeyValueUnarchiver: (id)param0 -{ - return [self notImplemented: _cmd]; //TODO -} - -- (void) encodeWithKeyValueArchiver: (id)param0 -{ - [self notImplemented: _cmd]; //TODO -} - -- (void) _addBindingsToDictionary: (id)param0 -{ - [self notImplemented: _cmd]; //TODO + return [self _validateKey:_key + withRootClassDescription:classDescription]; } - (EOQualifier *) qualifierWithBindings: (NSDictionary*)bindings requiresAllVariables: (BOOL)requiresAllVariables { + EOQualifier* qualifier=nil; + EOFLOGObjectLevelArgs(@"EOQualifier", @"bindings=%@", bindings); - if ([bindings count] > 0) + if ([_value isKindOfClass:[EOQualifierVariable class]]) { - NSEmitTODO(); - return [self notImplemented: _cmd]; //TODO - } - else - return self; + id value=[bindings valueForKeyPath:[(EOQualifierVariable*)_value key]]; + if (value) + qualifier=[EOKeyValueQualifier qualifierWithKey:_key + operatorSelector:_selector + value:value]; + else if (requiresAllVariables) + { + [NSException raise: EOQualifierVariableSubstitutionException + format: @"%@ -- %@ 0x%x: Value for '%@' not found in binding resolution", + NSStringFromSelector(_cmd), + NSStringFromClass([self class]), + self, + _key]; + }; + } + else + qualifier=self; + return qualifier; } - (EOQualifier *) qualifierMigratedFromEntity: (id)param0 @@ -294,6 +302,17 @@ RCS_ID("$Id$") return [self notImplemented: _cmd]; //TODO } +@end + +@implementation EOKeyValueQualifier (Privat) +- (void) _addBindingsToDictionary: (NSMutableDictionary*)dictionary +{ + if ([_value isKindOfClass:[EOQualifierVariable class]]) + [dictionary setObject:[(EOQualifierVariable*)_value key] + forKey:_key]; +} + + @end @implementation EOKeyValueQualifier (EOKeyValueArchiving) @@ -318,9 +337,15 @@ RCS_ID("$Id$") return self; } -- (void) encodeWithKeyValueArchiver: (EOKeyValueUnarchiver*)archiver +- (void) encodeWithKeyValueArchiver: (EOKeyValueArchiver*)archiver { - [self notImplemented: _cmd]; + NSString* selectorName=NSStringFromSelector(_selector); + [archiver encodeObject:_key + forKey:@"key"]; + [archiver encodeObject:selectorName + forKey:@"selectorName"]; + [archiver encodeObject:_value + forKey:@"value"]; } @end diff --git a/EOControl/EONotQualifier.m b/EOControl/EONotQualifier.m index 21e2319..5fb784c 100644 --- a/EOControl/EONotQualifier.m +++ b/EOControl/EONotQualifier.m @@ -49,6 +49,9 @@ RCS_ID("$Id$") #include +@interface EOQualifier (Privat) +- (void) _addBindingsToDictionary: (NSMutableDictionary*)dictionary; +@end @implementation EONotQualifier @@ -92,4 +95,28 @@ RCS_ID("$Id$") return ([_qualifier evaluateWithObject: object] ? NO : YES); } +- (NSException *) validateKeysWithRootClassDescription:(EOClassDescription*)classDescription +{ + return [_qualifier validateKeysWithRootClassDescription:classDescription]; +} + +- (EOQualifier *) qualifierWithBindings: (NSDictionary *)bindings + requiresAllVariables: (BOOL)requiresAllVariables +{ + EOQualifier* resultQualifier + = [_qualifier qualifierWithBindings: bindings + requiresAllVariables: requiresAllVariables]; + if (resultQualifier==_qualifier) + resultQualifier=self; + else if (resultQualifier) + resultQualifier=[[self class]qualifierWithQualifier:resultQualifier]; + return resultQualifier; +} + +- (void) _addBindingsToDictionary: (NSMutableDictionary*)dictionary +{ + [_qualifier _addBindingsToDictionary:dictionary]; +} + + @end diff --git a/EOControl/EOOrQualifier.m b/EOControl/EOOrQualifier.m index 315045f..dbc62c0 100644 --- a/EOControl/EOOrQualifier.m +++ b/EOControl/EOOrQualifier.m @@ -152,23 +152,43 @@ RCS_ID("$Id$") return [self notImplemented: _cmd]; //TODO } -- (void) _addBindingsToDictionary: (id)param0 +- (void) _addBindingsToDictionary: (NSMutableDictionary*)dictionary { - [self notImplemented: _cmd]; //TODO + int i=0; + int count=[_qualifiers count]; + for(i=0;i 0) + for(i=0;i0) + { + if ([newQualifiers count]==1) + resultQualifier=[newQualifiers lastObject]; + else + resultQualifier=[[self class]qualifierWithQualifierArray:newQualifiers]; + }; + return resultQualifier; } - (id) initWithKeyValueUnarchiver: (id)param0 @@ -181,9 +201,14 @@ RCS_ID("$Id$") [self notImplemented: _cmd]; //TODO } -- (id) validateKeysWithRootClassDescription: (id)param0 +- (NSException *) validateKeysWithRootClassDescription:(EOClassDescription*)classDescription { - return [self notImplemented: _cmd]; //TODO + int i=0; + int count=[_qualifiers count]; + for(i=0;i #include #include +#include #include +NSString *EOQualifierVariableSubstitutionException=@"EOQualifierVariableSubstitutionException"; + + @implementation NSNumber (EOQualifierExtras) - (id)initWithString: (NSString *)string @@ -88,6 +92,12 @@ RCS_ID("$Id$") } @end +@interface EOQualifier (Privat) +- (void) _addBindingsToDictionary: (NSMutableDictionary*)dictionary; +- (id) _qualifierMigratedToSubEntity: (id)param0 + fromParentEntity: (id)param1; +@end + @implementation EOQualifier /** @@ -676,9 +686,52 @@ static Class whichQualifier(const char **cFormat, const char **s) return [EOOrQualifier qualifierWithQualifierArray: array]; } -- (NSException *)validateKeysWithRootClassDescription: (EOClassDescription *)classDesc +- (NSException *)_validateKey:(NSString*)key + withRootClassDescription: (EOClassDescription *)classDescription { - return [self notImplemented: _cmd]; //TODO + if (!key) + [NSException raise: NSInvalidArgumentException + format: @"%@ -- %@ 0x%x: nil key", + NSStringFromSelector(_cmd), + NSStringFromClass([self class]), + self]; + else + { + NSArray* keyParts = [key componentsSeparatedByString:@"."]; + int keyPartsCount=[keyParts count]; + int i = 0; + BOOL stop=NO; + for(i=0;i