[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