[CalendarServer-changes] [6646] CalendarServer/trunk

source_changes at macosforge.org source_changes at macosforge.org
Wed Nov 17 11:25:42 PST 2010


Revision: 6646
          http://trac.macosforge.org/projects/calendarserver/changeset/6646
Author:   cdaboo at apple.com
Date:     2010-11-17 11:25:39 -0800 (Wed, 17 Nov 2010)
Log Message:
-----------
Some minor improvements to PUT SQL usage.

Modified Paths:
--------------
    CalendarServer/trunk/twistedcaldav/method/put_common.py
    CalendarServer/trunk/txdav/base/propertystore/sql.py
    CalendarServer/trunk/txdav/common/datastore/sql.py

Modified: CalendarServer/trunk/twistedcaldav/method/put_common.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/method/put_common.py	2010-11-17 16:21:03 UTC (rev 6645)
+++ CalendarServer/trunk/twistedcaldav/method/put_common.py	2010-11-17 19:25:39 UTC (rev 6646)
@@ -888,16 +888,6 @@
 
                 self.request.addResponseFilter(_removeEtag, atEnd=True)
 
-            # Remember the resource's content-type.
-            if self.destinationcal:
-                content_type = self.request.headers.getHeader("content-type")
-                if self.internal_request or content_type is None:
-                    content_type = MimeType("text", "calendar",
-                                            params={"charset":"utf-8"})
-                self.destination.writeDeadProperty(
-                    davxml.GETContentType.fromString(generateContentType(content_type))
-                )
-
             # Do quota check on destination
             yield self.doDestinationQuotaCheck()
     

Modified: CalendarServer/trunk/txdav/base/propertystore/sql.py
===================================================================
--- CalendarServer/trunk/txdav/base/propertystore/sql.py	2010-11-17 16:21:03 UTC (rev 6645)
+++ CalendarServer/trunk/txdav/base/propertystore/sql.py	2010-11-17 19:25:39 UTC (rev 6646)
@@ -39,21 +39,23 @@
 
     @classmethod
     @inlineCallbacks
-    def load(cls, defaultuser, txn, resourceID):
+    def load(cls, defaultuser, txn, resourceID, created=False):
         self = cls.__new__(cls)
         super(PropertyStore, self).__init__(defaultuser)
         self._txn = txn
         self._resourceID = resourceID
         self._cached = {}
-        rows = yield self._txn.execSQL(
-            """
-            select NAME, VIEWER_UID, VALUE from RESOURCE_PROPERTY
-            where RESOURCE_ID = %s
-            """,
-            [self._resourceID]
-        )
-        for name, uid, value in rows:
-            self._cached[(name, uid)] = value
+        if not created:
+            # Cache existing properties
+            rows = yield self._txn.execSQL(
+                """
+                select NAME, VIEWER_UID, VALUE from RESOURCE_PROPERTY
+                where RESOURCE_ID = %s
+                """,
+                [self._resourceID]
+            )
+            for name, uid, value in rows:
+                self._cached[(name, uid)] = value
         returnValue(self)
 
     @classmethod

Modified: CalendarServer/trunk/txdav/common/datastore/sql.py
===================================================================
--- CalendarServer/trunk/txdav/common/datastore/sql.py	2010-11-17 16:21:03 UTC (rev 6645)
+++ CalendarServer/trunk/txdav/common/datastore/sql.py	2010-11-17 19:25:39 UTC (rev 6646)
@@ -794,7 +794,7 @@
             child._created = created
             child._modified = modified
             child._syncTokenRevision = revisions[resource_id]
-            child._loadPropertyStore(propertyStores.get(resource_id, None))
+            yield child._loadPropertyStore(propertyStores.get(resource_id, None))
             results.append(child)
         
         returnValue(results)
@@ -1275,27 +1275,24 @@
     @inlineCallbacks
     def _changeRevision(self, action, name):
 
-        nextrevision = yield self._txn.execSQL("""
-            select nextval('%(sequence)s')
-            """ % self._revisionsTable
-        )
-
         if action == "delete":
-            yield self._txn.execSQL("""
+            self._syncTokenRevision = (yield self._txn.execSQL("""
                 update %(name)s
-                set (%(column_REVISION)s, %(column_DELETED)s) = (%%s, TRUE)
+                set (%(column_REVISION)s, %(column_DELETED)s) = (nextval('%(sequence)s'), TRUE)
                 where %(column_RESOURCE_ID)s = %%s and %(column_RESOURCE_NAME)s = %%s
+                returning %(column_REVISION)s
                 """ % self._revisionsTable,
-                [nextrevision, self._resourceID, name]
-            )
+                [self._resourceID, name]
+            ))[0][0]
         elif action == "update":
-            yield self._txn.execSQL("""
+            self._syncTokenRevision = (yield self._txn.execSQL("""
                 update %(name)s
-                set (%(column_REVISION)s) = (%%s)
+                set (%(column_REVISION)s) = (nextval('%(sequence)s'))
                 where %(column_RESOURCE_ID)s = %%s and %(column_RESOURCE_NAME)s = %%s
+                returning %(column_REVISION)s
                 """ % self._revisionsTable,
-                [nextrevision, self._resourceID, name]
-            )
+                [self._resourceID, name]
+            ))[0][0]
         elif action == "insert":
             # Note that an "insert" may happen for a resource that previously existed and then
             # was deleted. In that case an entry in the REVISIONS table still exists so we have to
@@ -1308,25 +1305,24 @@
                 [self._resourceID, name, ]
             )) )
             if found:
-                yield self._txn.execSQL("""
+                self._syncTokenRevision = (yield self._txn.execSQL("""
                     update %(name)s
-                    set (%(column_REVISION)s, %(column_DELETED)s) = (%%s, FALSE)
+                    set (%(column_REVISION)s, %(column_DELETED)s) = (nextval('%(sequence)s'), FALSE)
                     where %(column_RESOURCE_ID)s = %%s and %(column_RESOURCE_NAME)s = %%s
+                    returning %(column_REVISION)s
                     """ % self._revisionsTable,
-                    [nextrevision, self._resourceID, name]
-                )
+                    [self._resourceID, name]
+                ))[0][0]
             else:
-                yield self._txn.execSQL("""
+                self._syncTokenRevision = (yield self._txn.execSQL("""
                     insert into %(name)s
                     (%(column_HOME_RESOURCE_ID)s, %(column_RESOURCE_ID)s, %(column_RESOURCE_NAME)s, %(column_REVISION)s, %(column_DELETED)s)
-                    values (%%s, %%s, %%s, %%s, FALSE)
+                    values (%%s, %%s, %%s, nextval('%(sequence)s'), FALSE)
+                    returning %(column_REVISION)s
                     """ % self._revisionsTable,
-                    [self._home._resourceID, self._resourceID, name, nextrevision]
-                )
-        
-        self._syncTokenRevision = nextrevision
+                    [self._home._resourceID, self._resourceID, name]
+                ))[0][0]
 
-
     @inlineCallbacks
     def _loadPropertyStore(self, props=None):
         if props is None:
@@ -1450,7 +1446,7 @@
         for row in dataRows:
             child = cls(parent, "", None)
             child._initFromRow(tuple(row))
-            child._loadPropertyStore(propertyStores.get(child._resourceID, None))
+            yield child._loadPropertyStore(props=propertyStores.get(child._resourceID, None))
             results.append(child)
         
         returnValue(results)
@@ -1473,7 +1469,7 @@
         
         objectResource = cls(parent, name, None, metadata)
         yield objectResource.setComponent(component, inserting=True)
-        yield objectResource._loadPropertyStore()
+        yield objectResource._loadPropertyStore(created=True)
 
         # Note: setComponent triggers a notification, so we don't need to
         # call notify( ) here like we do for object removal.
@@ -1542,12 +1538,13 @@
          self._modified,) = tuple(row)
 
     @inlineCallbacks
-    def _loadPropertyStore(self, props=None):
+    def _loadPropertyStore(self, props=None, created=False):
         if props is None:
             props = yield PropertyStore.load(
                 self._parentCollection.ownerHome().uid(),
                 self._txn,
-                self._resourceID
+                self._resourceID,
+                created=created
             )
         self.initPropertyStore(props)
         self._propertyStore = props
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20101117/0a55cb8d/attachment-0001.html>


More information about the calendarserver-changes mailing list