mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-11-05 08:49:21 +00:00
fix(addressbook(dav)): improve handling of addressbook-query
This commit is contained in:
1 parent
3f93e6ebc4
commit
7faab9117a
12 files changed
+744
-209
No files matched your search
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user