Modified: CalendarServer/trunk/txdav/common/datastore/sql.py (6479 => 6480)
--- CalendarServer/trunk/txdav/common/datastore/sql.py 2010-10-28 14:27:52 UTC (rev 6479)
+++ CalendarServer/trunk/txdav/common/datastore/sql.py 2010-10-28 20:21:28 UTC (rev 6480)
@@ -956,16 +956,13 @@
returnValue(sorted([row[0] for row in rows]))
- @memoized('name', '_objects')
def objectResourceWithName(self, name):
return self._makeObjectResource(name, None)
- @memoized('uid', '_objects')
def objectResourceWithUID(self, uid):
return self._makeObjectResource(None, uid)
-
@inlineCallbacks
def _makeObjectResource(self, name, uid):
"""
@@ -973,25 +970,79 @@
"""
objectResource = self._objectResourceClass(self, name, uid)
objectResource = (yield objectResource.initFromStore())
+ if objectResource:
+ self._objects[objectResource.name()] = objectResource
+ self._objects[objectResource.uid()] = objectResource
+ else:
+ self._objects[name if name else uid] = None
returnValue(objectResource)
@inlineCallbacks
- def createObjectResourceWithName(self, name, component):
- if name.startswith("."):
- raise ObjectResourceNameNotAllowedError(name)
+ def resourceNameForUID(self, uid):
+ try:
+ resource = self._objects[uid]
+ returnValue(resource.name() if resource else None)
+ except KeyError:
+ pass
- rows = yield self._txn.execSQL(
- "select %(column_RESOURCE_ID)s from %(name)s "
- "where %(column_RESOURCE_NAME)s = %%s "
- "and %(column_PARENT_RESOURCE_ID)s = %%s" % self._objectTable,
+ rows = yield self._txn.execSQL("""
+ select %(column_RESOURCE_NAME)s
+ from %(name)s
+ where %(column_UID)s = %%s and %(column_PARENT_RESOURCE_ID)s = %%s
+ """ % self._objectTable,
+ [uid, self._resourceID]
+ )
+ if rows:
+ returnValue(rows[0][0])
+ else:
+ self._objects[uid] = None
+ returnValue(None)
+
+ @inlineCallbacks
+ def resourceUIDForName(self, name):
+ try:
+ resource = self._objects[name]
+ returnValue(resource.uid() if resource else None)
+ except KeyError:
+ pass
+
+ rows = yield self._txn.execSQL("""
+ select %(column_UID)s
+ from %(name)s
+ where %(column_RESOURCE_NAME)s = %%s and %(column_PARENT_RESOURCE_ID)s = %%s
+ """ % self._objectTable,
[name, self._resourceID]
)
if rows:
- raise ObjectResourceNameAlreadyExistsError()
+ returnValue(rows[0][0])
+ else:
+ self._objects[name] = None
+ returnValue(None)
+
+ @inlineCallbacks
+ def createObjectResourceWithName(self, name, component):
+ if name.startswith("."):
+ raise ObjectResourceNameNotAllowedError(name)
+
+ if name in self._objects:
+ if self._objects[name]:
+ raise ObjectResourceNameAlreadyExistsError()
+ else:
+ rows = yield self._txn.execSQL(
+ "select %(column_RESOURCE_ID)s from %(name)s "
+ "where %(column_RESOURCE_NAME)s = %%s "
+ "and %(column_PARENT_RESOURCE_ID)s = %%s" % self._objectTable,
+ [name, self._resourceID]
+ )
+ if rows:
+ raise ObjectResourceNameAlreadyExistsError()
+
objectResource = self._objectResourceClass(self, name, None)
yield objectResource.setComponent(component, inserting=True)
+ self._objects[objectResource.name()] = objectResource
+ self._objects[objectResource.uid()] = objectResource
# Note: setComponent triggers a notification, so we don't need to
# call notify( ) here like we do for object removal.
Modified: CalendarServer/trunk/txdav/common/datastore/sql_legacy.py (6479 => 6480)
--- CalendarServer/trunk/txdav/common/datastore/sql_legacy.py 2010-10-28 14:27:52 UTC (rev 6479)
+++ CalendarServer/trunk/txdav/common/datastore/sql_legacy.py 2010-10-28 20:21:28 UTC (rev 6480)
@@ -929,18 +929,14 @@
@inlineCallbacks
def resourceUIDForName(self, name):
- obj = yield self.calendar.calendarObjectWithName(name)
- if obj is None:
- returnValue(None)
- returnValue(obj.uid())
+ uid = yield self.calendar.resourceUIDForName(name)
+ returnValue(uid)
@inlineCallbacks
def resourceNameForUID(self, uid):
- obj = yield self.calendar.calendarObjectWithUID(uid)
- if obj is None:
- returnValue(None)
- returnValue(obj.name())
+ name = yield self.calendar.resourceNameForUID(uid)
+ returnValue(name)
@inlineCallbacks