[CalendarServer-changes] [13592] CalendarServer/trunk/twistedcaldav/directorybackedaddressbook.py
source_changes at macosforge.org
source_changes at macosforge.org
Sun Jun 1 19:53:49 PDT 2014
Revision: 13592
http://trac.calendarserver.org//changeset/13592
Author: gaya at apple.com
Date: 2014-06-01 19:53:49 -0700 (Sun, 01 Jun 2014)
Log Message:
-----------
limit records types used in gateway query
Modified Paths:
--------------
CalendarServer/trunk/twistedcaldav/directorybackedaddressbook.py
Modified: CalendarServer/trunk/twistedcaldav/directorybackedaddressbook.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directorybackedaddressbook.py 2014-06-02 02:47:48 UTC (rev 13591)
+++ CalendarServer/trunk/twistedcaldav/directorybackedaddressbook.py 2014-06-02 02:53:49 UTC (rev 13592)
@@ -187,6 +187,10 @@
if expression:
+ queryRecordType = None
+ if "KIND" not in propNames:
+ queryRecordType = vCardKindToRecordTypeMap.get(defaultKind)
+
# if CompoundExpression of MatchExpression: recordsWithFieldValue() else recordsMatchingType()
fields = []
if expression is not True:
@@ -205,13 +209,17 @@
if isinstance(match, MatchExpression):
if match.fieldName != FieldName.recordType:
fields.append(fieldForMatchExpression(match))
+ # else optimize: collect record type list for query
else:
+ # do all record types query
fields = []
break
elif isinstance(expression, MatchExpression):
operand = Operand.OR
if expression.fieldName != FieldName.recordType:
fields.append(fieldForMatchExpression(expression))
+ else:
+ recordType = expression.fieldValue
maxRecords = int(maxResults * 1.2)
@@ -223,12 +231,13 @@
allRecords = set()
if fields:
- records = yield self.directory.recordsMatchingFields(fields, operand)
+ records = yield self.directory.recordsMatchingFields(fields, operand, queryRecordType)
log.debug("doAddressBookDirectoryQuery: recordsMatchingFields({f}, {o}): #records={n}, records={records!r}",
f=fields, o=operand, n=len(records), records=records)
allRecords = set(records)
else:
- for recordType in set(self.directory.recordTypes()) & set(recordTypeToVCardKindMap.keys()):
+ recordTypes = set([queryRecordType]) if queryRecordType else set(self.directory.recordTypes()) & set(recordTypeToVCardKindMap.keys())
+ for recordType in recordTypes:
records = yield self.directory.recordsWithRecordType(recordType)
log.debug("doAddressBookDirectoryQuery: #records={n}, records={records!r}", n=len(records), records=records)
allRecords |= set(records)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20140601/adba9faa/attachment.html>
More information about the calendarserver-changes
mailing list