fix(addressbook(dav)): improve handling of addressbook-query

This commit is contained in:
Francis Lachapelle committed 2022-02-28 17:07:39 -05:00
1 parent 3f93e6ebc4
commit 7faab9117a
12 files changed
+744 -209

No files matched your search

+5 -58
View File
@@ -1,7 +1,7 @@
/*
Copyright (C) 2004-2007 SKYRIX Software AG
Copyright (C) 2007 Helge Hess
Copyright (c) 2008-2019 Inverse inc.
Copyright (c) 2008-2022 Inverse inc.
This file is part of SOGo.
@@ -26,9 +26,11 @@
#import <EOControl/EOFetchSpecification.h>
#import <EOControl/EOSortOrdering.h>
#import <EOControl/EOQualifier.h>
#import <GDLAccess/EOEntity.h>
#import <GDLAccess/EOAttribute.h>
#import <GDLAccess/EOSQLExpression.h>
#import <GDLAccess/EOSQLQualifier.h>
#import <GDLAccess/EOAdaptor.h>
#import <GDLAccess/EOAdaptorContext.h>
@@ -401,19 +403,9 @@ static GCSStringFormatter *stringFormatter = nil;
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: (EOKeyValueQualifier *)qualifier withAdaptor: adaptor];
else if ([qualifier isKindOfClass: [EONotQualifier class]])
[self _formatQualifierValue: (EOKeyValueQualifier *)[(id)qualifier qualifier] withAdaptor: adaptor];
else
[self errorWithFormat:@"unknown qualifier: %@", qualifier];
ms = [NSMutableString stringWithCapacity:32];
[qualifier _gcsAppendToString: ms];
[qualifier appendSQLToString: ms
withAdaptor: adaptor];
}
else
ms = nil;
@@ -421,51 +413,6 @@ 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: (EOKeyValueQualifier *)q withAdaptor: adaptor];
else if ([q isKindOfClass:[EONotQualifier class]])
[self _formatQualifierValue: (EOKeyValueQualifier *)[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];
if (attribute && [[qualifier value] isNotNull])
{
formattedValue = [adaptor formatValue: [qualifier value]
forAttribute: attribute];
[qualifier setValue: formattedValue];
[qualifier setFormatted: YES];
}
}
- (NSString *)_sqlForSortOrderings:(NSArray *)_so {
NSMutableString *sql;
unsigned i, count;