libs-gdl2/EOControl/EOFetchSpecification.m

594 lines
17 KiB
Mathematica
Raw Normal View History

/**
EOFetchSpecification.m <title>EOFetchSpecification</title>
Copyright (C) 2000 Free Software Foundation, Inc.
Author: Mirko Viviani <mirko.viviani@rccr.cremona.it>
Date: February 2000
$Revision$
$Date$
<abstract></abstract>
This file is part of the GNUstep Database Library.
<license>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; see the file COPYING.LIB.
If not, write to the Free Software Foundation,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
</license>
**/
#include "config.h"
RCS_ID("$Id$")
#ifdef GNUSTEP
2003-03-30 David Ayers <d.ayers@inode.at> * *.h/m, *.h/m): Used #include instead of depricated #import. Avoid including entire library headers. Use export macro where applicable. * EOControl/GNUmakefile: Removed EOKeyValueCodingBase.m/h and EOUndoMananger.h. Added EOArrayDataSource.m/h, EODefines.h and EODepricated.h. * EOControl/EODefines.h: Updated for GDL2 & gnustep-make. * EOControl/EODebug.h: Updated. * EOControl/EODepricated.h: Updated for current state of GDL2. ([NSObject +flushClassKeyBindings]): Added declaration. ([EOClassDescription +setDelegate:]): Added declaration. ([EOClassDescription +delegate]): Added declaration. (EOUndoManager): Moved declaration of interface here. * EOControl/EOKeyValueCoding.m ([EOClassDescription +flushClassKeyBindings]): Added empty implementation. ([NSObject takeStoredValuesFromDictionary:]): Cache EONull instance and use it instead of isKindOfClass:. * EOControl/EOEditingContext.m ([EOEditingContext +initialize]): Tidied. ([EOEditingContest -deleteObject]): Use NSUndoManager instead of EOUndoManager. * EOControl/EOQualifier.m ([NSArray -filteredArrayUsingQualifier:]): Added minor optimization tweak. * EOControl/EOClassDescription.m: Removed inactive commented code. Added private declerations of EOAccess methods to avoid compiler warnings. ([EOClassDescription +initialize]): Tidied. ([EOClassDescription -classDescriptionForClass:]): Use GSObjCName() instead of objc runtime routines. * EOControl/EOFault.m: Exchanged direct usages of ObjC runtime routines with NS/GSObjCRuntime abstraction API. ([EOFault +superclass]): Ditto. ([EOFault +targetClassForFault:]): Ditto. ([EOFault -respondsToSelector:]): Ditto. ([EOFault +initialize]): Cache static class variable. ([EOFault +isKindOfClass]): Use static class variable. ([EOFault +handlerForFault:]): Ditto. ([EOFault +targetClassForFault:]): Ditto. ([EOFault -dealloc]): Ditto. * EOControl/EOGenericRecord.m: ([EOGenericRecord +initialize]): Tidied. * EOControl/EOKeyComparisonQualifier.m: Tidied documentation. * EOControl/EOKeyValueQualifier.m: Ditto. * EOControl/EONSAddOns.h/m: Added declarations to surpress compiler warnings. ([NSObject -eoCompareOnName:]): Adjusted casts to surpress compiler warnings. (GSUseStrictWO451Compatibility): Added function. (GDL2GlobalLock, GDL2GlobalRecursive): Ditto. * EOControl/EONull: Remove implementations for foundation libraries without key value coding and fully rely on NSNull. Added assertions in all intance methods as instances should never be created. ([EONull +allocWithZone:]) Corrected method name so it will actually be used. * EOControl/EOSortOrdering.m ([NSArray sortedArrayUsingKeyOrderArray:]): Tidied. ([NSMutableArray sortUsingKeyOrderArray:]): Ditto. ([EONull compareAscending:]): Sync with referencs implementation. ([EONull compareDescending:]): Ditto. ([EONull compareCaseInsensitiveAscending:]): Ditto. ([EONull compareCaseInsensitiveDescending:]): Ditto. * EOAccess/EOAdaptor.h: Added comment about API compatibility. * EOAccess/EOAdaptor.m ([EOAdaptor -contexts]): Return array of adaptor contexts rather tham GC-wrapper objects containing adaptor contexts. ([EOAdaptor -databaseEncoding]): Use GSEncodingName() instead of GetEncodingName(). * EOAccess/EODatabaseContext.m ([EODatabaseContext -_turnFault:gid:editingContext:isComplete:]): Use GSObjCClass() instead of trying to access isa by dereferencing from id with incorrect member. * EOAccess/EOModel.m ([EOModel -entityNames]): Sort returned array to insure comparable output. * EOAccess/EOSQLExpression.m ([EOSQLExpression sqlStringForArrayOfQualifiers:operation:]): Added cast to surpress compiler warning. * EOAccess/EOUtilities.m ([EOObjectStoreCoordinator setModelGroup:]): Ditto. * EOAccess/EORelationship.h ([EORelationship -docComment]): Added declaration. * EOAccess/GNUmakefile: Added EODefines.h and EODepricated.h. * Tools/*.m: Use RCS_ID macro. * Tools/EOAttribute+GSDoc.h: ([EOAttribute gsdocContentWithTagName:idPtr:]): Corrected Typo. * Tools/EOModel+GSDoc.h/m: ([EOModel gsdocContentSplittedByEntities:idPtr:]): Ditto. * Tools/EORelationship+GSDoc.m: ([EORelationship gsdocContentWithTagName:idPtr:]): Change variable type to supress compiler warnings. * Tools/eoutil.m (dump): Initialize variables to supress compiler warnings. * Tools/gsdoc-model.m: Include GSCategories.h to supress compiler warnings. (main): Added cast to supress compiler warning. Fixed typo in method invocation. 2003-03-25 Stephane Corthesy <stephane@sente.ch> * EOControl/EODefines.h: Added new file for export/win32 support. * EOControl/EODepricated.h: Added new file for depricated features. * EOControl/EOControl.h: Added EOArrayDataSource.h and EODefines.h. * EOControl/EOArrayDataSource.h/m: Added new files. Some methods (<NSCoding> and qualifier bindings) are empty stubs. * EOControl/EODebug.h: Use export macro instead of explicit extern for function and symbol declarations. * EOControl/EOGlobalID.h: Ditto. * EOControl/EONull.h: Ditto. * EOControl/EOObjectStore.h: Ditto. * EOControl/EOOrQualifier.m: Replaced autorelease by AUTORELEASE and fixed typo. * EOControl/EOQualifier.m ([NSArray -filteredArrayUsingQualifier:]): Implemented. * EOControl/EONSAddOns.m: Use volatile in some exception handlers (man longjmp for more info). * EOControl/EOSortOrdering.h/m ([EOSortOrdering -copyWithZone:]): Implemented <NSCopying>. ([EOSortOrdering -encodeWithKeyValueArchiver:]): Implemented. * EOAccess/EODefines.h: Added new file for export/win32 support. * EOAccess/EODepricated.h: Added new file for depricated features. * EOAccess/EOAccess.h: Added EODefines.h. * EOAccess/EOSQLExpression.h/m: Fixed typo for EOPrimaryKeyConstraintKey. * EOAccess/EOExpressionArray.h/m: Use volatile for variables usein in exception handlers. (man longjmp for more info) * EOAccess/EODatabase.h: Use export macro instead of explicit extern for function and symbol declarations. * EOAccess/EOEntity.h: Ditto. * EOAccess/EOModel.h: Ditto. * EOAccess/EOSchemaGeneration.h: Ditto. * EOAccess/EOSQLExpression.h: Ditto. * EOAccess/EOUtilities.h: Ditto. * Tools/eoutil.m (dump): Implemented use of -postinstall option. Corrected bug when getting adaptor's expression class. Renamed symbol EOPrimaryKeyContraintsKey into EOPrimaryKeyConstraintsKey. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gdl2/trunk@16298 72102866-910b-0410-8b05-ffd578937521
2003-03-31 00:24:15 +00:00
#include <Foundation/NSCoder.h>
#include <Foundation/NSDictionary.h>
#include <Foundation/NSValue.h>
#include <Foundation/NSDebug.h>
#else
#include <Foundation/Foundation.h>
#endif
#ifndef GNUSTEP
#include <GNUstepBase/GNUstep.h>
* EOAccess/EOAdaptor.m: Include GNUstep-specific headers for non-GNUstep systems. * EOAccess/EOAdaptorChannel.m: Ditto. * EOAccess/EOAdaptorContext.m: Ditto. * EOAccess/EOAttribute.m: Ditto. * EOAccess/EODatabaseChannel.m: Ditto. * EOAccess/EODatabaseDataSource.m: Ditto. * EOAccess/EOEntity.m: Ditto. * EOAccess/EOModel.m: Ditto. * EOAccess/EOModelGroup.m: Ditto. * EOAccess/EORelationship.m: Ditto. * EOAccess/EOSQLQualifier.m: Ditto. * EOAccess/EOUtilities.m: Ditto. * EOControl/EOAndQualifier.m: Ditto. * EOControl/EOClassDescription.m: Ditto. * EOControl/EODataSource.m: Ditto. * EOControl/EOEditingContext.m: Ditto. * EOControl/EOFault.m: Ditto. * EOControl/EOFaultHandler.m: Ditto. * EOControl/EOFetchSpecification.m: Ditto. * EOControl/EOKeyValueArchiver.m: Ditto. * EOControl/EOKeyValueQualifier.m: Ditto. * EOControl/EOMutableKnownKeyDictionary.m: Ditto. * EOControl/EONSAddOns.m: Ditto. * EOControl/EOObjectStore.m: Ditto. * EOControl/EOObjectStoreCoordinator.m: Ditto. * EOControl/EOObserver.m: Ditto. * EOControl/EOOrQualifier.m: Ditto. * EOControl/EOQualifier.m: Ditto. * EOControl/EOUndoManager.m: Ditto. * EOModeler/EOModelExtensions.m: Ditto. * EOAccess/EOModel.h/m (+/-[EOModel version]) Remove. ([EOModel init]): Handle version internally. ([EOModel encodeTableOfContentsIntoPropertyList:]): Ditto. ([EOModel encodeIntoPropertyList:]): Ditto. * EOAccess/EODatabaseContext.m ([EODatabaseContext dealloc]): Use NSCountHashTable instead of NSCountMapTable on hash table. * EOAccess/EOAttribute.m ([EOAttribute newValueForBytes:length:]): Added casts to avoid warnings. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gdl2/trunk@18500 72102866-910b-0410-8b05-ffd578937521
2004-01-29 13:23:22 +00:00
#include <GNUstepBase/GSCategories.h>
#endif
2003-03-30 David Ayers <d.ayers@inode.at> * *.h/m, *.h/m): Used #include instead of depricated #import. Avoid including entire library headers. Use export macro where applicable. * EOControl/GNUmakefile: Removed EOKeyValueCodingBase.m/h and EOUndoMananger.h. Added EOArrayDataSource.m/h, EODefines.h and EODepricated.h. * EOControl/EODefines.h: Updated for GDL2 & gnustep-make. * EOControl/EODebug.h: Updated. * EOControl/EODepricated.h: Updated for current state of GDL2. ([NSObject +flushClassKeyBindings]): Added declaration. ([EOClassDescription +setDelegate:]): Added declaration. ([EOClassDescription +delegate]): Added declaration. (EOUndoManager): Moved declaration of interface here. * EOControl/EOKeyValueCoding.m ([EOClassDescription +flushClassKeyBindings]): Added empty implementation. ([NSObject takeStoredValuesFromDictionary:]): Cache EONull instance and use it instead of isKindOfClass:. * EOControl/EOEditingContext.m ([EOEditingContext +initialize]): Tidied. ([EOEditingContest -deleteObject]): Use NSUndoManager instead of EOUndoManager. * EOControl/EOQualifier.m ([NSArray -filteredArrayUsingQualifier:]): Added minor optimization tweak. * EOControl/EOClassDescription.m: Removed inactive commented code. Added private declerations of EOAccess methods to avoid compiler warnings. ([EOClassDescription +initialize]): Tidied. ([EOClassDescription -classDescriptionForClass:]): Use GSObjCName() instead of objc runtime routines. * EOControl/EOFault.m: Exchanged direct usages of ObjC runtime routines with NS/GSObjCRuntime abstraction API. ([EOFault +superclass]): Ditto. ([EOFault +targetClassForFault:]): Ditto. ([EOFault -respondsToSelector:]): Ditto. ([EOFault +initialize]): Cache static class variable. ([EOFault +isKindOfClass]): Use static class variable. ([EOFault +handlerForFault:]): Ditto. ([EOFault +targetClassForFault:]): Ditto. ([EOFault -dealloc]): Ditto. * EOControl/EOGenericRecord.m: ([EOGenericRecord +initialize]): Tidied. * EOControl/EOKeyComparisonQualifier.m: Tidied documentation. * EOControl/EOKeyValueQualifier.m: Ditto. * EOControl/EONSAddOns.h/m: Added declarations to surpress compiler warnings. ([NSObject -eoCompareOnName:]): Adjusted casts to surpress compiler warnings. (GSUseStrictWO451Compatibility): Added function. (GDL2GlobalLock, GDL2GlobalRecursive): Ditto. * EOControl/EONull: Remove implementations for foundation libraries without key value coding and fully rely on NSNull. Added assertions in all intance methods as instances should never be created. ([EONull +allocWithZone:]) Corrected method name so it will actually be used. * EOControl/EOSortOrdering.m ([NSArray sortedArrayUsingKeyOrderArray:]): Tidied. ([NSMutableArray sortUsingKeyOrderArray:]): Ditto. ([EONull compareAscending:]): Sync with referencs implementation. ([EONull compareDescending:]): Ditto. ([EONull compareCaseInsensitiveAscending:]): Ditto. ([EONull compareCaseInsensitiveDescending:]): Ditto. * EOAccess/EOAdaptor.h: Added comment about API compatibility. * EOAccess/EOAdaptor.m ([EOAdaptor -contexts]): Return array of adaptor contexts rather tham GC-wrapper objects containing adaptor contexts. ([EOAdaptor -databaseEncoding]): Use GSEncodingName() instead of GetEncodingName(). * EOAccess/EODatabaseContext.m ([EODatabaseContext -_turnFault:gid:editingContext:isComplete:]): Use GSObjCClass() instead of trying to access isa by dereferencing from id with incorrect member. * EOAccess/EOModel.m ([EOModel -entityNames]): Sort returned array to insure comparable output. * EOAccess/EOSQLExpression.m ([EOSQLExpression sqlStringForArrayOfQualifiers:operation:]): Added cast to surpress compiler warning. * EOAccess/EOUtilities.m ([EOObjectStoreCoordinator setModelGroup:]): Ditto. * EOAccess/EORelationship.h ([EORelationship -docComment]): Added declaration. * EOAccess/GNUmakefile: Added EODefines.h and EODepricated.h. * Tools/*.m: Use RCS_ID macro. * Tools/EOAttribute+GSDoc.h: ([EOAttribute gsdocContentWithTagName:idPtr:]): Corrected Typo. * Tools/EOModel+GSDoc.h/m: ([EOModel gsdocContentSplittedByEntities:idPtr:]): Ditto. * Tools/EORelationship+GSDoc.m: ([EORelationship gsdocContentWithTagName:idPtr:]): Change variable type to supress compiler warnings. * Tools/eoutil.m (dump): Initialize variables to supress compiler warnings. * Tools/gsdoc-model.m: Include GSCategories.h to supress compiler warnings. (main): Added cast to supress compiler warning. Fixed typo in method invocation. 2003-03-25 Stephane Corthesy <stephane@sente.ch> * EOControl/EODefines.h: Added new file for export/win32 support. * EOControl/EODepricated.h: Added new file for depricated features. * EOControl/EOControl.h: Added EOArrayDataSource.h and EODefines.h. * EOControl/EOArrayDataSource.h/m: Added new files. Some methods (<NSCoding> and qualifier bindings) are empty stubs. * EOControl/EODebug.h: Use export macro instead of explicit extern for function and symbol declarations. * EOControl/EOGlobalID.h: Ditto. * EOControl/EONull.h: Ditto. * EOControl/EOObjectStore.h: Ditto. * EOControl/EOOrQualifier.m: Replaced autorelease by AUTORELEASE and fixed typo. * EOControl/EOQualifier.m ([NSArray -filteredArrayUsingQualifier:]): Implemented. * EOControl/EONSAddOns.m: Use volatile in some exception handlers (man longjmp for more info). * EOControl/EOSortOrdering.h/m ([EOSortOrdering -copyWithZone:]): Implemented <NSCopying>. ([EOSortOrdering -encodeWithKeyValueArchiver:]): Implemented. * EOAccess/EODefines.h: Added new file for export/win32 support. * EOAccess/EODepricated.h: Added new file for depricated features. * EOAccess/EOAccess.h: Added EODefines.h. * EOAccess/EOSQLExpression.h/m: Fixed typo for EOPrimaryKeyConstraintKey. * EOAccess/EOExpressionArray.h/m: Use volatile for variables usein in exception handlers. (man longjmp for more info) * EOAccess/EODatabase.h: Use export macro instead of explicit extern for function and symbol declarations. * EOAccess/EOEntity.h: Ditto. * EOAccess/EOModel.h: Ditto. * EOAccess/EOSchemaGeneration.h: Ditto. * EOAccess/EOSQLExpression.h: Ditto. * EOAccess/EOUtilities.h: Ditto. * Tools/eoutil.m (dump): Implemented use of -postinstall option. Corrected bug when getting adaptor's expression class. Renamed symbol EOPrimaryKeyContraintsKey into EOPrimaryKeyConstraintsKey. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gdl2/trunk@16298 72102866-910b-0410-8b05-ffd578937521
2003-03-31 00:24:15 +00:00
#include <EOControl/EOFetchSpecification.h>
#include <EOControl/EOKeyValueArchiver.h>
#include <EOControl/EOObserver.h>
#include <EOControl/EODebug.h>
#include <EOControl/EONSAddOns.h>
#include <EOControl/EOQualifier.h>
#include <EOControl/EODeprecated.h>
NSString *EOPrefetchingRelationshipHintKey = @"EOPrefetchingRelationshipHintKey";
NSString *EOFetchLimitHintKey = @"EOFetchLimitHintKey";
NSString *EOPromptAfterFetchLimitHintKey = @"EOPromptAfterFetchLimitHintKey";
@interface NSObject (EOAccess)
/* EOEntity.h */
- (EOFetchSpecification *)fetchSpecificationNamed: (NSString *)fetchSpecName;
/* EOModelGroup */
- (id)entityNamed:(NSString *)entityName;
+ (id)defaultGroup;
@end
@implementation EOFetchSpecification
2003-01-31 Manuel Guesdon <mguesdon@orange-concept.com> * EOAccess/EOAdaptorChannel.m: o replaced NSDebugMLLog by EOFLOGObjectLevel/EOFLOGObjectLevelArgs * EOAccess/EOAttribute.m: o replaced NSDebugMLLog by EOFLOGObjectLevel/EOFLOGObjectLevelArgs * EOAccess/EODatabaseChannel.m: o replaced NSDebugMLLog by EOFLOGObjectLevel/EOFLOGObjectLevelArgs o Move registration for EODatabaseChannelNeddedNotification from +load to +initialize. (David Ayers <d.ayers@inode.at>) * EOAccess/EODatabaseContext.m: o Move registration for EODatabaseChannelNeddedNotification from +load to +initialize. (David Ayers <d.ayers@inode.at>) * EOAccess/EOEntity.m: o in - (void) _setIsEdited, autorelease instead of destroy * EOAccess/EORelationship.m o -validateValue: don't raise not implemented exception o initialize variables in -foreignKeyInDestination * EOAccess/EOSQLExpression.m: o added NSAsserts o use anyRelationshipNamed: instead of relationshipNamed: to find hidden relationships * EOControl/EOClassDescription.m o -displayNameForKey: use -stringWithCapacity instead of +alloc -initWithCapacity (missing autorelease) o -validationExceptionWithFormat: initialize variables o -aggregateExceptionWithExceptions: initialize variables o -aggregateExceptionWithExceptions: autorelease copied value o -exceptionAddingEntriesToUserInfo: initialize variables o -exceptionAddingEntriesToUserInfo: autorelease copied userInfo o -snapshot autorelease copied value o -updateFromSnapshot: autorelease copied value * EOControl/EOFetchSpecification.h: o added +fetchSpecificationWithEntityName:qualifier:sortOrderings:usesDistinct:isDeep:hints: o added +fetchSpecificationWithEntityName:qualifier:sortOrderings:usesDistinct: * EOControl/EOFetchSpecification.m: o added +fetchSpecificationWithEntityName:qualifier:sortOrderings:usesDistinct:isDeep:hints: o added +fetchSpecificationWithEntityName:qualifier:sortOrderings:usesDistinct: o removed +fetchSpecificationNamed:entityNamed: (implemented in EOUtilities) o Insure that EODatabaseContext is initialized early. (David Ayers <d.ayers@inode.at>) * EOControl/EOGenericRecord.m o in -eoFormatSizeDictionary: handle /0 o in +eoCalculateAllSizeWith: don't de-fault objects o in +eoCalculateAllSizeWith: manage a local autorelease pool * EOControl/EOKeyValueCoding.h: o added -smartTakeValue:forKey: o -smartTakeValue:forKeyPath: o -storedValuesForKeyPaths: * EOControl/EOGlobalID.m: o Insure that EODatabaseContext is initialized early. (David Ayers <d.ayers@inode.at>) * EOControl/EOQualifier.m: o +operatorSelectorForString:]): Parse 'doesContain' instead of 'contains' (David Ayers <d.ayers@inode.at>) * EOControl/EODebug.m: o include NSDebug.h git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gdl2/trunk@15845 72102866-910b-0410-8b05-ffd578937521
2003-02-01 15:19:56 +00:00
+ (void)initialize
{
if (self == [EOFetchSpecification class])
{
Class cls = NSClassFromString(@"EODatabaseContext");
if (cls != Nil)
[cls class]; // Insure correct initialization.
2003-01-31 Manuel Guesdon <mguesdon@orange-concept.com> * EOAccess/EOAdaptorChannel.m: o replaced NSDebugMLLog by EOFLOGObjectLevel/EOFLOGObjectLevelArgs * EOAccess/EOAttribute.m: o replaced NSDebugMLLog by EOFLOGObjectLevel/EOFLOGObjectLevelArgs * EOAccess/EODatabaseChannel.m: o replaced NSDebugMLLog by EOFLOGObjectLevel/EOFLOGObjectLevelArgs o Move registration for EODatabaseChannelNeddedNotification from +load to +initialize. (David Ayers <d.ayers@inode.at>) * EOAccess/EODatabaseContext.m: o Move registration for EODatabaseChannelNeddedNotification from +load to +initialize. (David Ayers <d.ayers@inode.at>) * EOAccess/EOEntity.m: o in - (void) _setIsEdited, autorelease instead of destroy * EOAccess/EORelationship.m o -validateValue: don't raise not implemented exception o initialize variables in -foreignKeyInDestination * EOAccess/EOSQLExpression.m: o added NSAsserts o use anyRelationshipNamed: instead of relationshipNamed: to find hidden relationships * EOControl/EOClassDescription.m o -displayNameForKey: use -stringWithCapacity instead of +alloc -initWithCapacity (missing autorelease) o -validationExceptionWithFormat: initialize variables o -aggregateExceptionWithExceptions: initialize variables o -aggregateExceptionWithExceptions: autorelease copied value o -exceptionAddingEntriesToUserInfo: initialize variables o -exceptionAddingEntriesToUserInfo: autorelease copied userInfo o -snapshot autorelease copied value o -updateFromSnapshot: autorelease copied value * EOControl/EOFetchSpecification.h: o added +fetchSpecificationWithEntityName:qualifier:sortOrderings:usesDistinct:isDeep:hints: o added +fetchSpecificationWithEntityName:qualifier:sortOrderings:usesDistinct: * EOControl/EOFetchSpecification.m: o added +fetchSpecificationWithEntityName:qualifier:sortOrderings:usesDistinct:isDeep:hints: o added +fetchSpecificationWithEntityName:qualifier:sortOrderings:usesDistinct: o removed +fetchSpecificationNamed:entityNamed: (implemented in EOUtilities) o Insure that EODatabaseContext is initialized early. (David Ayers <d.ayers@inode.at>) * EOControl/EOGenericRecord.m o in -eoFormatSizeDictionary: handle /0 o in +eoCalculateAllSizeWith: don't de-fault objects o in +eoCalculateAllSizeWith: manage a local autorelease pool * EOControl/EOKeyValueCoding.h: o added -smartTakeValue:forKey: o -smartTakeValue:forKeyPath: o -storedValuesForKeyPaths: * EOControl/EOGlobalID.m: o Insure that EODatabaseContext is initialized early. (David Ayers <d.ayers@inode.at>) * EOControl/EOQualifier.m: o +operatorSelectorForString:]): Parse 'doesContain' instead of 'contains' (David Ayers <d.ayers@inode.at>) * EOControl/EODebug.m: o include NSDebug.h git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gdl2/trunk@15845 72102866-910b-0410-8b05-ffd578937521
2003-02-01 15:19:56 +00:00
}
}
+ (EOFetchSpecification *)fetchSpecification
{
return [[[self alloc] init] autorelease];
}
- (id) init
{
if ((self = [super init]))
{
_flags.isDeep = YES;
}
return self;
}
- (void)dealloc
{
#ifdef DEBUG
2003-06-26 Manuel Guesdon <mguesdon@orange-concept.com> * config.h.in: o added EMIT_TODO control * EOAccess/EOAccessFault.m: o commented debug logs * EOAccess/EODatabaseContext.m: o more information in asserts o asserts o fix in -relayPrimaryKey:object:entity: for nil 1:1 relationship value o add -forgetSnapshotForGlobalID call in -refaultObject:withGlobalID:editingContext: o add -forgetSnapshotForGlobalID database call in -forgetSnapshotForGlobalID: * EOAccess/EOEntity.m: o logs o fix in -awakeObject:fromInsertionInEditingContext: to avoid setting already present values o reverted code in -awakeObject:fromInsertionInEditingContext: My (old) tests show that we create 1: object not on mandatory property but on propagatesPrimaryKey one if someone has an example of EOF creating an object here without propagatesPrimaryKey, please send it to me. * EOAccess/EOModelGroup.m: o don't autorelease return model group in -globalModelGroup as it will crash. I haven't find why :-( o logs * EOAccess/EOSQLExpression.m: o fix bug in -assembleSelectStatementWithAttributes:lock:qualifier: fetchOrder:selectString:columnList:tableList: whereClause:joinClause:orderByClause:lockClause: by adding () around where and join clause o add detail in sqlStringForSelector:value: exception * EOAdaptors/Postgres95/PostPostgres95Channel.m: o add more information on exceptions * EOAdaptors/Postgres95/Postgres95SQLExpression.m: o fix escaping string in -formatValue:forAttribute: o fix bug in -assembleSelectStatementWithAttributes:lock:qualifier: fetchOrder:selectString:columnList:tableList: whereClause:joinClause:orderByClause:lockClause: by adding () around where and join clause * EOAdaptors/Postgres95/Postgres95Value.m: o Change log in +newValueForDateType:length:attribute: * EOControl/EOCheapArray.m o removed some logs * EOAccess/EOClassDescription.m: o fix in -validateForUpdate o logs * EOControl/Debug.h: o donditional define of NSEmitTODO() * EOControl/EODetailDataSource.h/.m: o added -setDetailKey: * EOControl/EOEditingContext.m o logs * EOControl/EOFetchSpecification.m o logs * EOControl/EOKeyValueCoding.m: o fix in computeSum, computeAverage * EOControl/EOQualifier.m o logs * EOControl/EOSortOrdering.m o use valueForKeyPath: instead of valueForKey: to allow sort on related objects * EOControl/EOUndoManager.h o protection of include git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gdl2/trunk@17037 72102866-910b-0410-8b05-ffd578937521
2003-06-26 08:20:30 +00:00
// NSDebugFLog(@"Dealloc EOFetchSpecification %p. ThreadID=%p",
// (void*)self,(void*)objc_thread_id());
#endif
DESTROY(_qualifier);
DESTROY(_sortOrderings);
DESTROY(_entityName);
DESTROY(_hints);
DESTROY(_prefetchingRelationshipKeys);
DESTROY(_rawAttributeKeys);
[super dealloc];
#ifdef DEBUG
2003-06-26 Manuel Guesdon <mguesdon@orange-concept.com> * config.h.in: o added EMIT_TODO control * EOAccess/EOAccessFault.m: o commented debug logs * EOAccess/EODatabaseContext.m: o more information in asserts o asserts o fix in -relayPrimaryKey:object:entity: for nil 1:1 relationship value o add -forgetSnapshotForGlobalID call in -refaultObject:withGlobalID:editingContext: o add -forgetSnapshotForGlobalID database call in -forgetSnapshotForGlobalID: * EOAccess/EOEntity.m: o logs o fix in -awakeObject:fromInsertionInEditingContext: to avoid setting already present values o reverted code in -awakeObject:fromInsertionInEditingContext: My (old) tests show that we create 1: object not on mandatory property but on propagatesPrimaryKey one if someone has an example of EOF creating an object here without propagatesPrimaryKey, please send it to me. * EOAccess/EOModelGroup.m: o don't autorelease return model group in -globalModelGroup as it will crash. I haven't find why :-( o logs * EOAccess/EOSQLExpression.m: o fix bug in -assembleSelectStatementWithAttributes:lock:qualifier: fetchOrder:selectString:columnList:tableList: whereClause:joinClause:orderByClause:lockClause: by adding () around where and join clause o add detail in sqlStringForSelector:value: exception * EOAdaptors/Postgres95/PostPostgres95Channel.m: o add more information on exceptions * EOAdaptors/Postgres95/Postgres95SQLExpression.m: o fix escaping string in -formatValue:forAttribute: o fix bug in -assembleSelectStatementWithAttributes:lock:qualifier: fetchOrder:selectString:columnList:tableList: whereClause:joinClause:orderByClause:lockClause: by adding () around where and join clause * EOAdaptors/Postgres95/Postgres95Value.m: o Change log in +newValueForDateType:length:attribute: * EOControl/EOCheapArray.m o removed some logs * EOAccess/EOClassDescription.m: o fix in -validateForUpdate o logs * EOControl/Debug.h: o donditional define of NSEmitTODO() * EOControl/EODetailDataSource.h/.m: o added -setDetailKey: * EOControl/EOEditingContext.m o logs * EOControl/EOFetchSpecification.m o logs * EOControl/EOKeyValueCoding.m: o fix in computeSum, computeAverage * EOControl/EOQualifier.m o logs * EOControl/EOSortOrdering.m o use valueForKeyPath: instead of valueForKey: to allow sort on related objects * EOControl/EOUndoManager.h o protection of include git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gdl2/trunk@17037 72102866-910b-0410-8b05-ffd578937521
2003-06-26 08:20:30 +00:00
// NSDebugFLog(@"Stop Dealloc EOFetchSpecification %p. ThreadID=%p",
// (void*)self,(void*)objc_thread_id());
#endif
}
- (id) initWithEntityName: (NSString *)entityName
qualifier: (EOQualifier *)qualifier
sortOrderings: (NSArray *)sortOrderings
usesDistinct: (BOOL)usesDistinct
isDeep: (BOOL)isDeep
hints: (NSDictionary *)hints
{
if ((self = [self init]))
{
ASSIGN(_entityName, entityName);
ASSIGN(_qualifier, qualifier);
ASSIGN(_sortOrderings, sortOrderings);
[self setUsesDistinct: usesDistinct];
[self setIsDeep: isDeep];
[self setHints: hints];
}
return self;
}
- (EOFetchSpecification *)fetchSpecificationWithQualifierBindings: (NSDictionary *)bindings
{
EOQualifier *qualifier;
BOOL flag = [self requiresAllQualifierBindingVariables];
qualifier = [[self qualifier] qualifierWithBindings: bindings
requiresAllVariables: flag];
[self setQualifier: qualifier];
return self;
}
+ (EOFetchSpecification *)fetchSpecificationNamed: (NSString *)name
entityNamed: (NSString *)entityName
{
Class modelGroupClass = GSClassFromName("EOModelGroup");
if (modelGroupClass != Nil)
{
return [[[modelGroupClass defaultGroup] entityNamed: entityName]
fetchSpecificationNamed: name];
}
return nil;
}
2003-01-31 Manuel Guesdon <mguesdon@orange-concept.com> * EOAccess/EOAdaptorChannel.m: o replaced NSDebugMLLog by EOFLOGObjectLevel/EOFLOGObjectLevelArgs * EOAccess/EOAttribute.m: o replaced NSDebugMLLog by EOFLOGObjectLevel/EOFLOGObjectLevelArgs * EOAccess/EODatabaseChannel.m: o replaced NSDebugMLLog by EOFLOGObjectLevel/EOFLOGObjectLevelArgs o Move registration for EODatabaseChannelNeddedNotification from +load to +initialize. (David Ayers <d.ayers@inode.at>) * EOAccess/EODatabaseContext.m: o Move registration for EODatabaseChannelNeddedNotification from +load to +initialize. (David Ayers <d.ayers@inode.at>) * EOAccess/EOEntity.m: o in - (void) _setIsEdited, autorelease instead of destroy * EOAccess/EORelationship.m o -validateValue: don't raise not implemented exception o initialize variables in -foreignKeyInDestination * EOAccess/EOSQLExpression.m: o added NSAsserts o use anyRelationshipNamed: instead of relationshipNamed: to find hidden relationships * EOControl/EOClassDescription.m o -displayNameForKey: use -stringWithCapacity instead of +alloc -initWithCapacity (missing autorelease) o -validationExceptionWithFormat: initialize variables o -aggregateExceptionWithExceptions: initialize variables o -aggregateExceptionWithExceptions: autorelease copied value o -exceptionAddingEntriesToUserInfo: initialize variables o -exceptionAddingEntriesToUserInfo: autorelease copied userInfo o -snapshot autorelease copied value o -updateFromSnapshot: autorelease copied value * EOControl/EOFetchSpecification.h: o added +fetchSpecificationWithEntityName:qualifier:sortOrderings:usesDistinct:isDeep:hints: o added +fetchSpecificationWithEntityName:qualifier:sortOrderings:usesDistinct: * EOControl/EOFetchSpecification.m: o added +fetchSpecificationWithEntityName:qualifier:sortOrderings:usesDistinct:isDeep:hints: o added +fetchSpecificationWithEntityName:qualifier:sortOrderings:usesDistinct: o removed +fetchSpecificationNamed:entityNamed: (implemented in EOUtilities) o Insure that EODatabaseContext is initialized early. (David Ayers <d.ayers@inode.at>) * EOControl/EOGenericRecord.m o in -eoFormatSizeDictionary: handle /0 o in +eoCalculateAllSizeWith: don't de-fault objects o in +eoCalculateAllSizeWith: manage a local autorelease pool * EOControl/EOKeyValueCoding.h: o added -smartTakeValue:forKey: o -smartTakeValue:forKeyPath: o -storedValuesForKeyPaths: * EOControl/EOGlobalID.m: o Insure that EODatabaseContext is initialized early. (David Ayers <d.ayers@inode.at>) * EOControl/EOQualifier.m: o +operatorSelectorForString:]): Parse 'doesContain' instead of 'contains' (David Ayers <d.ayers@inode.at>) * EOControl/EODebug.m: o include NSDebug.h git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gdl2/trunk@15845 72102866-910b-0410-8b05-ffd578937521
2003-02-01 15:19:56 +00:00
+ (EOFetchSpecification *)fetchSpecificationWithEntityName: (NSString *)name
qualifier: (EOQualifier *)qualifier
sortOrderings: (NSArray *)sortOrderings
{
2003-01-31 Manuel Guesdon <mguesdon@orange-concept.com> * EOAccess/EOAdaptorChannel.m: o replaced NSDebugMLLog by EOFLOGObjectLevel/EOFLOGObjectLevelArgs * EOAccess/EOAttribute.m: o replaced NSDebugMLLog by EOFLOGObjectLevel/EOFLOGObjectLevelArgs * EOAccess/EODatabaseChannel.m: o replaced NSDebugMLLog by EOFLOGObjectLevel/EOFLOGObjectLevelArgs o Move registration for EODatabaseChannelNeddedNotification from +load to +initialize. (David Ayers <d.ayers@inode.at>) * EOAccess/EODatabaseContext.m: o Move registration for EODatabaseChannelNeddedNotification from +load to +initialize. (David Ayers <d.ayers@inode.at>) * EOAccess/EOEntity.m: o in - (void) _setIsEdited, autorelease instead of destroy * EOAccess/EORelationship.m o -validateValue: don't raise not implemented exception o initialize variables in -foreignKeyInDestination * EOAccess/EOSQLExpression.m: o added NSAsserts o use anyRelationshipNamed: instead of relationshipNamed: to find hidden relationships * EOControl/EOClassDescription.m o -displayNameForKey: use -stringWithCapacity instead of +alloc -initWithCapacity (missing autorelease) o -validationExceptionWithFormat: initialize variables o -aggregateExceptionWithExceptions: initialize variables o -aggregateExceptionWithExceptions: autorelease copied value o -exceptionAddingEntriesToUserInfo: initialize variables o -exceptionAddingEntriesToUserInfo: autorelease copied userInfo o -snapshot autorelease copied value o -updateFromSnapshot: autorelease copied value * EOControl/EOFetchSpecification.h: o added +fetchSpecificationWithEntityName:qualifier:sortOrderings:usesDistinct:isDeep:hints: o added +fetchSpecificationWithEntityName:qualifier:sortOrderings:usesDistinct: * EOControl/EOFetchSpecification.m: o added +fetchSpecificationWithEntityName:qualifier:sortOrderings:usesDistinct:isDeep:hints: o added +fetchSpecificationWithEntityName:qualifier:sortOrderings:usesDistinct: o removed +fetchSpecificationNamed:entityNamed: (implemented in EOUtilities) o Insure that EODatabaseContext is initialized early. (David Ayers <d.ayers@inode.at>) * EOControl/EOGenericRecord.m o in -eoFormatSizeDictionary: handle /0 o in +eoCalculateAllSizeWith: don't de-fault objects o in +eoCalculateAllSizeWith: manage a local autorelease pool * EOControl/EOKeyValueCoding.h: o added -smartTakeValue:forKey: o -smartTakeValue:forKeyPath: o -storedValuesForKeyPaths: * EOControl/EOGlobalID.m: o Insure that EODatabaseContext is initialized early. (David Ayers <d.ayers@inode.at>) * EOControl/EOQualifier.m: o +operatorSelectorForString:]): Parse 'doesContain' instead of 'contains' (David Ayers <d.ayers@inode.at>) * EOControl/EODebug.m: o include NSDebug.h git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gdl2/trunk@15845 72102866-910b-0410-8b05-ffd578937521
2003-02-01 15:19:56 +00:00
return [[[EOFetchSpecification alloc]
initWithEntityName: name
qualifier: qualifier
sortOrderings: sortOrderings
usesDistinct: NO
isDeep: YES
hints: nil] autorelease];
}
+ (EOFetchSpecification *)fetchSpecificationWithEntityName: (NSString *)name
qualifier: (EOQualifier *)qualifier
sortOrderings: (NSArray *)sortOrderings
2003-01-31 Manuel Guesdon <mguesdon@orange-concept.com> * EOAccess/EOAdaptorChannel.m: o replaced NSDebugMLLog by EOFLOGObjectLevel/EOFLOGObjectLevelArgs * EOAccess/EOAttribute.m: o replaced NSDebugMLLog by EOFLOGObjectLevel/EOFLOGObjectLevelArgs * EOAccess/EODatabaseChannel.m: o replaced NSDebugMLLog by EOFLOGObjectLevel/EOFLOGObjectLevelArgs o Move registration for EODatabaseChannelNeddedNotification from +load to +initialize. (David Ayers <d.ayers@inode.at>) * EOAccess/EODatabaseContext.m: o Move registration for EODatabaseChannelNeddedNotification from +load to +initialize. (David Ayers <d.ayers@inode.at>) * EOAccess/EOEntity.m: o in - (void) _setIsEdited, autorelease instead of destroy * EOAccess/EORelationship.m o -validateValue: don't raise not implemented exception o initialize variables in -foreignKeyInDestination * EOAccess/EOSQLExpression.m: o added NSAsserts o use anyRelationshipNamed: instead of relationshipNamed: to find hidden relationships * EOControl/EOClassDescription.m o -displayNameForKey: use -stringWithCapacity instead of +alloc -initWithCapacity (missing autorelease) o -validationExceptionWithFormat: initialize variables o -aggregateExceptionWithExceptions: initialize variables o -aggregateExceptionWithExceptions: autorelease copied value o -exceptionAddingEntriesToUserInfo: initialize variables o -exceptionAddingEntriesToUserInfo: autorelease copied userInfo o -snapshot autorelease copied value o -updateFromSnapshot: autorelease copied value * EOControl/EOFetchSpecification.h: o added +fetchSpecificationWithEntityName:qualifier:sortOrderings:usesDistinct:isDeep:hints: o added +fetchSpecificationWithEntityName:qualifier:sortOrderings:usesDistinct: * EOControl/EOFetchSpecification.m: o added +fetchSpecificationWithEntityName:qualifier:sortOrderings:usesDistinct:isDeep:hints: o added +fetchSpecificationWithEntityName:qualifier:sortOrderings:usesDistinct: o removed +fetchSpecificationNamed:entityNamed: (implemented in EOUtilities) o Insure that EODatabaseContext is initialized early. (David Ayers <d.ayers@inode.at>) * EOControl/EOGenericRecord.m o in -eoFormatSizeDictionary: handle /0 o in +eoCalculateAllSizeWith: don't de-fault objects o in +eoCalculateAllSizeWith: manage a local autorelease pool * EOControl/EOKeyValueCoding.h: o added -smartTakeValue:forKey: o -smartTakeValue:forKeyPath: o -storedValuesForKeyPaths: * EOControl/EOGlobalID.m: o Insure that EODatabaseContext is initialized early. (David Ayers <d.ayers@inode.at>) * EOControl/EOQualifier.m: o +operatorSelectorForString:]): Parse 'doesContain' instead of 'contains' (David Ayers <d.ayers@inode.at>) * EOControl/EODebug.m: o include NSDebug.h git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gdl2/trunk@15845 72102866-910b-0410-8b05-ffd578937521
2003-02-01 15:19:56 +00:00
usesDistinct: (BOOL)usesDistinct
isDeep: (BOOL)isDeep
hints: (NSDictionary *)hints
{
return [[[EOFetchSpecification alloc]
initWithEntityName: name
qualifier: qualifier
sortOrderings: sortOrderings
2003-01-31 Manuel Guesdon <mguesdon@orange-concept.com> * EOAccess/EOAdaptorChannel.m: o replaced NSDebugMLLog by EOFLOGObjectLevel/EOFLOGObjectLevelArgs * EOAccess/EOAttribute.m: o replaced NSDebugMLLog by EOFLOGObjectLevel/EOFLOGObjectLevelArgs * EOAccess/EODatabaseChannel.m: o replaced NSDebugMLLog by EOFLOGObjectLevel/EOFLOGObjectLevelArgs o Move registration for EODatabaseChannelNeddedNotification from +load to +initialize. (David Ayers <d.ayers@inode.at>) * EOAccess/EODatabaseContext.m: o Move registration for EODatabaseChannelNeddedNotification from +load to +initialize. (David Ayers <d.ayers@inode.at>) * EOAccess/EOEntity.m: o in - (void) _setIsEdited, autorelease instead of destroy * EOAccess/EORelationship.m o -validateValue: don't raise not implemented exception o initialize variables in -foreignKeyInDestination * EOAccess/EOSQLExpression.m: o added NSAsserts o use anyRelationshipNamed: instead of relationshipNamed: to find hidden relationships * EOControl/EOClassDescription.m o -displayNameForKey: use -stringWithCapacity instead of +alloc -initWithCapacity (missing autorelease) o -validationExceptionWithFormat: initialize variables o -aggregateExceptionWithExceptions: initialize variables o -aggregateExceptionWithExceptions: autorelease copied value o -exceptionAddingEntriesToUserInfo: initialize variables o -exceptionAddingEntriesToUserInfo: autorelease copied userInfo o -snapshot autorelease copied value o -updateFromSnapshot: autorelease copied value * EOControl/EOFetchSpecification.h: o added +fetchSpecificationWithEntityName:qualifier:sortOrderings:usesDistinct:isDeep:hints: o added +fetchSpecificationWithEntityName:qualifier:sortOrderings:usesDistinct: * EOControl/EOFetchSpecification.m: o added +fetchSpecificationWithEntityName:qualifier:sortOrderings:usesDistinct:isDeep:hints: o added +fetchSpecificationWithEntityName:qualifier:sortOrderings:usesDistinct: o removed +fetchSpecificationNamed:entityNamed: (implemented in EOUtilities) o Insure that EODatabaseContext is initialized early. (David Ayers <d.ayers@inode.at>) * EOControl/EOGenericRecord.m o in -eoFormatSizeDictionary: handle /0 o in +eoCalculateAllSizeWith: don't de-fault objects o in +eoCalculateAllSizeWith: manage a local autorelease pool * EOControl/EOKeyValueCoding.h: o added -smartTakeValue:forKey: o -smartTakeValue:forKeyPath: o -storedValuesForKeyPaths: * EOControl/EOGlobalID.m: o Insure that EODatabaseContext is initialized early. (David Ayers <d.ayers@inode.at>) * EOControl/EOQualifier.m: o +operatorSelectorForString:]): Parse 'doesContain' instead of 'contains' (David Ayers <d.ayers@inode.at>) * EOControl/EODebug.m: o include NSDebug.h git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gdl2/trunk@15845 72102866-910b-0410-8b05-ffd578937521
2003-02-01 15:19:56 +00:00
usesDistinct: usesDistinct
isDeep: isDeep
hints: hints] autorelease];
}
+ (EOFetchSpecification *)fetchSpecificationWithEntityName: (NSString *)name
qualifier: (EOQualifier *)qualifier
sortOrderings: (NSArray *)sortOrderings
usesDistinct: (BOOL)usesDistinct
{
return [[[EOFetchSpecification alloc]
initWithEntityName: name
qualifier: qualifier
sortOrderings: sortOrderings
usesDistinct: usesDistinct
isDeep: YES
hints: nil] autorelease];
}
- (id) copyWithZone: (NSZone *)zone
{
EOFetchSpecification *ret = [EOFetchSpecification allocWithZone:zone];
//order: hints, isdeep, usesDistinct,sortOrderings, qualifier,entityName
//and call nitWithEntityName:qualifier:sortOrderings:usesDistinct:isDeep:hints:
//after:
/* [fetch setLocksObjects:[_fetchSpecification locksObjects]];
[fetch setRefreshesRefetchedObjects:[_fetchSpecification refreshesRefetchedObjects]];
[fetch setPrefetchingRelationshipKeyPaths:[_fetchSpecification prefetchingRelationshipKeyPaths
[fetch setRawRowKeyPaths:[_fetchSpecification rawRowKeyPaths
setFetchLimit:fetchLimit
setPromptsAfterFetchLimit: promptsAfterFetchLimit
setRequiresAllQualifierBindingVariables:requiresAllQualifierBindingVariables
*/
//call setXX fn instead to have "willChange" ??
ret->_qualifier = [(id <NSCopying>)_qualifier copyWithZone: zone];
ret->_sortOrderings = [_sortOrderings copyWithZone: zone]; //mirko: ASSIGN(ret->_sortOrderings, _sortOrderings);
ret->_entityName = [_entityName copyWithZone: zone];
ret->_hints = [_hints copyWithZone: zone];
ret->_prefetchingRelationshipKeys = [_prefetchingRelationshipKeys copyWithZone: zone];
ret->_rawAttributeKeys = [_rawAttributeKeys copyWithZone: zone];
ret->_fetchLimit = _fetchLimit;
ret->_flags = _flags;
return ret;
}
- (void)encodeWithCoder: (NSCoder *)coder
{
[coder encodeObject: _qualifier];
[coder encodeObject: _sortOrderings];
[coder encodeObject: _entityName];
[coder encodeObject: _hints];
[coder encodeValueOfObjCType: @encode(unsigned int) at: &_fetchLimit];
[coder encodeObject: _prefetchingRelationshipKeys];
[coder encodeObject: _rawAttributeKeys];
[coder encodeValueOfObjCType: @encode(unsigned int) at: &_flags];
}
- (id)initWithCoder: (NSCoder *)coder
{
_qualifier = [[coder decodeObject] retain];
_sortOrderings = [[coder decodeObject] retain];
_entityName = [[coder decodeObject] retain];
_hints = [[coder decodeObject] retain];
[coder decodeValueOfObjCType: @encode(unsigned int) at: &_fetchLimit];
_prefetchingRelationshipKeys = [[coder decodeObject] retain];
_rawAttributeKeys = [[coder decodeObject] retain];
[coder decodeValueOfObjCType: @encode(unsigned int) at: &_flags];
return self;
}
- (id) initWithKeyValueUnarchiver: (EOKeyValueUnarchiver*)unarchiver
{
if ((self = [self init]))
{
ASSIGN(_hints, [unarchiver decodeObjectForKey: @"hints"]);
ASSIGN(_qualifier, [unarchiver decodeObjectForKey: @"qualifier"]);
ASSIGN(_sortOrderings, [unarchiver decodeObjectForKey: @"sortOrderings"]);
ASSIGN(_entityName, [unarchiver decodeObjectForKey: @"entityName"]);
ASSIGN(_prefetchingRelationshipKeys,
[unarchiver decodeObjectForKey: @"prefetchingRelationshipKeyPaths"]);
ASSIGN(_rawAttributeKeys, [unarchiver decodeObjectForKey: @"rawRowKeyPaths"]);
_fetchLimit = [unarchiver decodeIntForKey: @"fetchLimit"];
_flags.usesDistinct = [unarchiver decodeBoolForKey: @"usesDistinct"];
_flags.isDeep = [unarchiver decodeBoolForKey: @"isDeep"];
_flags.locksObjects = [unarchiver decodeBoolForKey: @"locksObjects"];
_flags.refreshesRefetchedObjects =
[unarchiver decodeBoolForKey: @"refreshesRefetchedObjects"];
_flags.promptsAfterFetchLimit =
[unarchiver decodeBoolForKey: @"promptsAfterFetchLimit"];
_flags.requiresAllQualifierBindingVariables =
[unarchiver decodeBoolForKey: @"requiresAllQualifierBindingVariables"];
}
return self;
}
- (void) encodeWithKeyValueArchiver: (EOKeyValueArchiver*)archiver
{
[archiver encodeObject:_hints
forKey:@"hints"];
[archiver encodeObject:_qualifier
forKey:@"qualifier"];
[archiver encodeObject:_sortOrderings
forKey:@"sortOrderings"];
[archiver encodeObject:_entityName
forKey:@"entityName"];
[archiver encodeObject:_sortOrderings
forKey:@"sortOrderings"];
[archiver encodeObject:_prefetchingRelationshipKeys
forKey:@"prefetchingRelationshipKeyPaths"];
[archiver encodeInt:_fetchLimit
forKey:@"fetchLimit"];
[archiver encodeBool:_flags.usesDistinct ? YES : NO
forKey:@"usesDistinct"];
[archiver encodeBool:_flags.isDeep ? YES : NO
forKey:@"isDeep"];
[archiver encodeBool:_flags.locksObjects ? YES : NO
forKey:@"locksObjects"];
[archiver encodeBool:_flags.refreshesRefetchedObjects ? YES : NO
forKey:@"refreshesRefetchedObjects"];
[archiver encodeBool:_flags.promptsAfterFetchLimit ? YES : NO
forKey:@"promptsAfterFetchLimit"];
[archiver encodeBool:_flags.refreshesRefetchedObjects ? YES : NO
forKey:@"refreshesRefetchedObjects"];
[archiver encodeBool:_flags.promptsAfterFetchLimit ? YES : NO
forKey:@"promptsAfterFetchLimit"];
[archiver encodeBool:_flags.requiresAllQualifierBindingVariables ? YES : NO
forKey:@"requiresAllQualifierBindingVariables"];
}
- (NSString*)description
{
NSMutableString *desc = [NSMutableString string];
[desc appendString: @"{\n"];
[desc appendString: [NSString stringWithFormat: @"hints = %@;\n",
[_hints description]]];
[desc appendString: [NSString stringWithFormat: @"qualifier = %@;\n",
_qualifier]];
[desc appendString: [NSString stringWithFormat: @"sortOrderings = %@;\n",
[_sortOrderings description]]];
[desc appendString: [NSString stringWithFormat: @"entityName = %@;\n",
_entityName]];
[desc appendString: [NSString stringWithFormat: @"prefetchingRelationshipKeyPaths = %@;\n",
[_prefetchingRelationshipKeys description]]];
[desc appendString: [NSString stringWithFormat: @"rawRowKeyPaths = %@;\n",
[_rawAttributeKeys description]]];
[desc appendString: [NSString stringWithFormat: @"fetchLimit = %d;\n",
_fetchLimit]];
[desc appendString: [NSString stringWithFormat: @"usesDistinct = %s;\n",
_flags.usesDistinct ? "YES" : "NO"]];
[desc appendString: [NSString stringWithFormat: @"isDeep = %s;\n",
_flags.isDeep ? "YES" : "NO"]];
[desc appendString: [NSString stringWithFormat: @"locksObjects = %s;\n",
_flags.locksObjects ? "YES" : "NO"]];
[desc appendString: [NSString stringWithFormat: @"refreshesRefetchedObjects = %s;\n",
_flags.refreshesRefetchedObjects ? "YES" : "NO"]];
[desc appendString: [NSString stringWithFormat: @"promptsAfterFetchLimit = %s;\n",
_flags.promptsAfterFetchLimit ? "YES" : "NO"]];
[desc appendString: [NSString stringWithFormat: @"requiresAllQualifierBindingVariables = %s;\n",
_flags.requiresAllQualifierBindingVariables ? "YES" : "NO"]];
[desc appendString: @"}"];
return desc;
}
- (void)setEntityName: (NSString *)entityName
{
[self willChange];
ASSIGN(_entityName, entityName);
}
- (NSString *)entityName
{
return _entityName;
}
- (void)setSortOrderings: (NSArray *)sortOrderings
{
ASSIGN(_sortOrderings, sortOrderings);
}
- (NSArray *)sortOrderings
{
return _sortOrderings;
}
- (void)setQualifier: (EOQualifier *)qualifier
{
[self willChange];
ASSIGN(_qualifier, qualifier);
}
- (EOQualifier *)qualifier
{
return _qualifier;
}
- (void)setUsesDistinct: (BOOL)flag
{
[self willChange];
_flags.usesDistinct = flag ? YES : NO;
}
- (BOOL)usesDistinct
{
return _flags.usesDistinct;
}
- (void)setIsDeep: (BOOL)isDeep
{
[self willChange];
_flags.isDeep = isDeep ? YES : NO;
}
- (BOOL)isDeep
{
return _flags.isDeep;
}
- (void)setLocksObjects: (BOOL)locksObjects
{
[self willChange];
_flags.locksObjects = locksObjects ? YES : NO;
}
- (BOOL)locksObjects
{
return _flags.locksObjects;
}
- (void)setRefreshesRefetchedObjects: (BOOL)refreshesRefetchedObjects
{
[self willChange];
_flags.refreshesRefetchedObjects = refreshesRefetchedObjects ? YES : NO;
}
- (BOOL)refreshesRefetchedObjects
{
return _flags.refreshesRefetchedObjects;
}
- (void)setFetchLimit: (unsigned)fetchLimit
{
[self willChange];
_fetchLimit = fetchLimit;
}
- (unsigned)fetchLimit
{
return _fetchLimit;
}
- (void)setPromptsAfterFetchLimit: (BOOL)promptsAfterFetchLimit
{
[self willChange];
_flags.promptsAfterFetchLimit = promptsAfterFetchLimit ? YES : NO;
}
- (BOOL)promptsAfterFetchLimit
{
return _flags.promptsAfterFetchLimit;
}
- (void)setRequiresAllQualifierBindingVariables: (BOOL)flag
{
_flags.requiresAllQualifierBindingVariables = flag ? YES : NO;
}
- (BOOL)requiresAllQualifierBindingVariables
{
return _flags.requiresAllQualifierBindingVariables;
}
- (void)setPrefetchingRelationshipKeyPaths: (NSArray *)prefetchingRelationshipKeys
{
[self willChange];
ASSIGN(_prefetchingRelationshipKeys, prefetchingRelationshipKeys);
}
- (NSArray *)prefetchingRelationshipKeyPaths
{
return _prefetchingRelationshipKeys;
}
- (void)setRawAttributeKeys: (NSArray *)rawAttributeKeys
{
ASSIGN(_rawAttributeKeys, rawAttributeKeys);
}
- (NSArray *)rawAttributeKeys
{
return _rawAttributeKeys;
}
- (void)setFetchesRawRows: (BOOL)fetchRawRows
{
if (fetchRawRows)
[self setRawRowKeyPaths: [NSArray array]];
else
[self setRawRowKeyPaths: nil];
}
- (BOOL)fetchesRawRows
{
if ([self rawRowKeyPaths])
return YES;
else
return NO;
}
- (void)setHints: (NSDictionary *)hints
{
//TODO: set fetchLimit,... from hints ???
[self willChange];
//even if nil: initWithDictionary:copyItems:
//thedict objectForKey:EOPrefetchingRelationshipHintKey
//EOFetchLimitHintKey
//EOPromptAfterFetchLimitHintKey
ASSIGN(_hints, hints);
}
- (NSDictionary *)_hints
{
return _hints;
}
- (NSDictionary *)hints
{
NSMutableDictionary *hints = (NSMutableDictionary *)_hints;
BOOL promptsAfterFetchLimit;
NSArray *prefetchingRelationshipKeyPaths;
unsigned fetchLimit;
fetchLimit = [self fetchLimit];
promptsAfterFetchLimit = [self promptsAfterFetchLimit];
prefetchingRelationshipKeyPaths = [self prefetchingRelationshipKeyPaths];
if (fetchLimit != 0 || promptsAfterFetchLimit
|| [prefetchingRelationshipKeyPaths count] > 0)
{
NSMutableDictionary *mutableHints = [NSMutableDictionary
dictionaryWithDictionary: hints];
hints = mutableHints;
if (fetchLimit != 0)
{
[mutableHints setObject: [NSNumber numberWithInt: fetchLimit]
forKey: EOFetchLimitHintKey];
}
if (promptsAfterFetchLimit)
{
[mutableHints setObject: [NSNumber numberWithBool:
promptsAfterFetchLimit]
forKey: EOPromptAfterFetchLimitHintKey];
}
if ([prefetchingRelationshipKeyPaths count] > 0)
{
[mutableHints setObject: prefetchingRelationshipKeyPaths
forKey: EOPrefetchingRelationshipHintKey];
}
}
return hints;
}
- (NSArray *)rawRowKeyPaths
{
return _rawAttributeKeys;
}
- (void)setRawRowKeyPaths: (NSArray *)rawRowKeyPaths
{
[self willChange];
ASSIGN(_rawAttributeKeys, rawRowKeyPaths);
}
@end
@implementation EOFetchSpecification (deprecated)
- (BOOL)allVariablesRequiredFromBindings
{
NSLog(@"DEPRECATED: Use requiresAllQualifierBindingVariables");
return [self requiresAllQualifierBindingVariables];
}
- (void)setAllVariablesRequiredFromBindings: (BOOL)flag
{
NSLog(@"DEPRECATED: Use setRequiresAllQualifierBindingVariables:");
[self setRequiresAllQualifierBindingVariables: flag];
}
@end