Use NSString instances for representing change numbers, rather than NSNumber
This commit is contained in:
parent
1e92fe0395
commit
dec64722c8
|
@ -43,8 +43,8 @@
|
||||||
- (BOOL) synchroniseCache;
|
- (BOOL) synchroniseCache;
|
||||||
- (void) updateVersionsForMessageWithKey: (NSString *) messageKey
|
- (void) updateVersionsForMessageWithKey: (NSString *) messageKey
|
||||||
withChangeKey: (NSData *) newChangeKey;
|
withChangeKey: (NSData *) newChangeKey;
|
||||||
- (NSNumber *) lastModifiedFromMessageChangeNumber: (NSNumber *) changeNum;
|
- (NSNumber *) lastModifiedFromMessageChangeNumber: (NSString *) changeNumber;
|
||||||
- (NSNumber *) changeNumberForMessageWithKey: (NSString *) messageKey;
|
- (NSString *) changeNumberForMessageWithKey: (NSString *) messageKey;
|
||||||
- (NSData *) changeKeyForMessageWithKey: (NSString *) messageKey;
|
- (NSData *) changeKeyForMessageWithKey: (NSString *) messageKey;
|
||||||
- (NSData *) predecessorChangeListForMessageWithKey: (NSString *) messageKey;
|
- (NSData *) predecessorChangeListForMessageWithKey: (NSString *) messageKey;
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#import <Foundation/NSDictionary.h>
|
#import <Foundation/NSDictionary.h>
|
||||||
#import <Foundation/NSException.h>
|
#import <Foundation/NSException.h>
|
||||||
#import <NGExtensions/NSObject+Logs.h>
|
#import <NGExtensions/NSObject+Logs.h>
|
||||||
|
#import <NGExtensions/NSObject+Values.h>
|
||||||
#import <EOControl/EOQualifier.h>
|
#import <EOControl/EOQualifier.h>
|
||||||
#import <EOControl/EOFetchSpecification.h>
|
#import <EOControl/EOFetchSpecification.h>
|
||||||
#import <EOControl/EOSortOrdering.h>
|
#import <EOControl/EOSortOrdering.h>
|
||||||
|
@ -328,9 +329,8 @@ static Class NSNumberK;
|
||||||
BOOL rc = YES, foundChange = NO;
|
BOOL rc = YES, foundChange = NO;
|
||||||
uint64_t newChangeNum;
|
uint64_t newChangeNum;
|
||||||
NSData *changeKey;
|
NSData *changeKey;
|
||||||
NSString *cName;
|
NSString *cName, *changeNumber;
|
||||||
NSNumber *ti, *changeNumber, *lastModificationDate, *cVersion,
|
NSNumber *ti, *lastModificationDate, *cVersion, *cLastModified, *cDeleted;
|
||||||
*cLastModified, *cDeleted;
|
|
||||||
EOFetchSpecification *fs;
|
EOFetchSpecification *fs;
|
||||||
EOQualifier *searchQualifier, *fetchQualifier;
|
EOQualifier *searchQualifier, *fetchQualifier;
|
||||||
NSUInteger count, max;
|
NSUInteger count, max;
|
||||||
|
@ -342,6 +342,11 @@ static Class NSNumberK;
|
||||||
static NSArray *fields = nil;
|
static NSArray *fields = nil;
|
||||||
static EOSortOrdering *sortOrdering = nil;
|
static EOSortOrdering *sortOrdering = nil;
|
||||||
|
|
||||||
|
/* NOTE: we are using NSString instance for "changeNumber" because
|
||||||
|
NSNumber proved to give very bad performances when used as NSDictionary
|
||||||
|
keys with GNUstep 1.22.1. The bug seems to be solved with 1.24 but many
|
||||||
|
distros still ship an older version. */
|
||||||
|
|
||||||
if (!fields)
|
if (!fields)
|
||||||
fields = [[NSArray alloc]
|
fields = [[NSArray alloc]
|
||||||
initWithObjects: @"c_name", @"c_version", @"c_lastmodified",
|
initWithObjects: @"c_name", @"c_version", @"c_lastmodified",
|
||||||
|
@ -429,7 +434,7 @@ static Class NSNumberK;
|
||||||
foundChange = YES;
|
foundChange = YES;
|
||||||
|
|
||||||
newChangeNum = [[self context] getNewChangeNumber];
|
newChangeNum = [[self context] getNewChangeNumber];
|
||||||
changeNumber = [NSNumber numberWithUnsignedLongLong: newChangeNum];
|
changeNumber = [NSString stringWithUnsignedLongLong: newChangeNum];
|
||||||
|
|
||||||
[messageEntry setObject: cLastModified forKey: @"c_lastmodified"];
|
[messageEntry setObject: cLastModified forKey: @"c_lastmodified"];
|
||||||
[messageEntry setObject: cVersion forKey: @"c_version"];
|
[messageEntry setObject: cVersion forKey: @"c_version"];
|
||||||
|
@ -485,21 +490,21 @@ static Class NSNumberK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSNumber *) lastModifiedFromMessageChangeNumber: (NSNumber *) changeNum
|
- (NSNumber *) lastModifiedFromMessageChangeNumber: (NSString *) changeNumber
|
||||||
{
|
{
|
||||||
NSDictionary *mapping;
|
NSDictionary *mapping;
|
||||||
NSNumber *modseq;
|
NSNumber *modseq;
|
||||||
|
|
||||||
mapping = [[versionsMessage properties] objectForKey: @"VersionMapping"];
|
mapping = [[versionsMessage properties] objectForKey: @"VersionMapping"];
|
||||||
modseq = [mapping objectForKey: changeNum];
|
modseq = [mapping objectForKey: changeNumber];
|
||||||
|
|
||||||
return modseq;
|
return modseq;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSNumber *) changeNumberForMessageWithKey: (NSString *) messageKey
|
- (NSString *) changeNumberForMessageWithKey: (NSString *) messageKey
|
||||||
{
|
{
|
||||||
NSDictionary *messages;
|
NSDictionary *messages;
|
||||||
NSNumber *changeNumber;
|
NSString *changeNumber;
|
||||||
|
|
||||||
messages = [[versionsMessage properties] objectForKey: @"Messages"];
|
messages = [[versionsMessage properties] objectForKey: @"Messages"];
|
||||||
changeNumber = [[messages objectForKey: messageKey]
|
changeNumber = [[messages objectForKey: messageKey]
|
||||||
|
@ -574,8 +579,8 @@ static Class NSNumberK;
|
||||||
inTableType: (uint8_t) tableType
|
inTableType: (uint8_t) tableType
|
||||||
{
|
{
|
||||||
NSArray *deletedKeys, *deletedCNames, *records;
|
NSArray *deletedKeys, *deletedCNames, *records;
|
||||||
NSNumber *changeNumNbr, *lastModified;
|
NSNumber *lastModified;
|
||||||
NSString *cName;
|
NSString *cName, *changeNumber;
|
||||||
NSDictionary *versionProperties, *messageEntry;
|
NSDictionary *versionProperties, *messageEntry;
|
||||||
NSMutableDictionary *messages;
|
NSMutableDictionary *messages;
|
||||||
uint64_t maxChangeNum = changeNum, currentChangeNum;
|
uint64_t maxChangeNum = changeNum, currentChangeNum;
|
||||||
|
@ -589,8 +594,8 @@ static Class NSNumberK;
|
||||||
{
|
{
|
||||||
deletedKeys = [NSMutableArray array];
|
deletedKeys = [NSMutableArray array];
|
||||||
|
|
||||||
changeNumNbr = [NSNumber numberWithUnsignedLongLong: changeNum];
|
changeNumber = [NSString stringWithUnsignedLongLong: changeNum];
|
||||||
lastModified = [self lastModifiedFromMessageChangeNumber: changeNumNbr];
|
lastModified = [self lastModifiedFromMessageChangeNumber: changeNumber];
|
||||||
if (lastModified)
|
if (lastModified)
|
||||||
{
|
{
|
||||||
versionProperties = [versionsMessage properties];
|
versionProperties = [versionsMessage properties];
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#import <Foundation/NSValue.h>
|
#import <Foundation/NSValue.h>
|
||||||
#import <NGObjWeb/SoSecurityManager.h>
|
#import <NGObjWeb/SoSecurityManager.h>
|
||||||
#import <NGExtensions/NSObject+Logs.h>
|
#import <NGExtensions/NSObject+Logs.h>
|
||||||
|
#import <NGExtensions/NSObject+Values.h>
|
||||||
#import <SOGo/SOGoContentObject.h>
|
#import <SOGo/SOGoContentObject.h>
|
||||||
#import <SOGo/SOGoPermissions.h>
|
#import <SOGo/SOGoPermissions.h>
|
||||||
#import <SOGo/SOGoUser.h>
|
#import <SOGo/SOGoUser.h>
|
||||||
|
@ -178,7 +179,7 @@
|
||||||
- (uint64_t) objectVersion
|
- (uint64_t) objectVersion
|
||||||
{
|
{
|
||||||
uint64_t version = ULLONG_MAX;
|
uint64_t version = ULLONG_MAX;
|
||||||
NSNumber *changeNumber;
|
NSString *changeNumber;
|
||||||
|
|
||||||
if (!isNew)
|
if (!isNew)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue