[CalendarServer-changes] [7107] CalendarServer/branches/users/glyph/oracle/txdav/common/datastore/ sql_legacy.py

source_changes at macosforge.org source_changes at macosforge.org
Mon Mar 7 18:58:12 PST 2011


Revision: 7107
          http://trac.macosforge.org/projects/calendarserver/changeset/7107
Author:   glyph at apple.com
Date:     2011-03-07 18:58:08 -0800 (Mon, 07 Mar 2011)
Log Message:
-----------
dalify allRecords

Modified Paths:
--------------
    CalendarServer/branches/users/glyph/oracle/txdav/common/datastore/sql_legacy.py

Modified: CalendarServer/branches/users/glyph/oracle/txdav/common/datastore/sql_legacy.py
===================================================================
--- CalendarServer/branches/users/glyph/oracle/txdav/common/datastore/sql_legacy.py	2011-03-08 02:14:18 UTC (rev 7106)
+++ CalendarServer/branches/users/glyph/oracle/txdav/common/datastore/sql_legacy.py	2011-03-08 02:58:08 UTC (rev 7107)
@@ -1,4 +1,4 @@
-# -*- test-case-name: txdav.caldav.datastore.test.test_sql -*-
+# -*- test-case-name: twistedcaldav.test.test_sharing,twistedcaldav.test.test_calendarquery -*-
 ##
 # Copyright (c) 2010 Apple Inc. All rights reserved.
 #
@@ -28,6 +28,7 @@
 from twisted.python import hashlib
 from twisted.internet.defer import succeed, inlineCallbacks, returnValue
 
+from twext.python.clsprop import classproperty
 from twext.python.log import Logger, LoggingMixIn
 
 from twistedcaldav import carddavxml
@@ -35,19 +36,23 @@
 from twistedcaldav.dateops import normalizeForIndex
 from twistedcaldav.memcachepool import CachePoolUserMixIn
 from twistedcaldav.notifications import NotificationRecord
-from twistedcaldav.query import calendarqueryfilter, calendarquery, \
-    addressbookquery
+from twistedcaldav.query import (
+    calendarqueryfilter, calendarquery, addressbookquery)
 from twistedcaldav.query.sqlgenerator import sqlgenerator
 from twistedcaldav.sharing import Invite
 
-from txdav.common.icommondatastore import IndexedSearchException, \
-    ReservationError
-from txdav.common.datastore.sql_tables import \
-    _BIND_MODE_OWN, _BIND_MODE_READ, _BIND_MODE_WRITE, _BIND_MODE_DIRECT, \
-    _BIND_STATUS_INVITED, _BIND_STATUS_ACCEPTED, _BIND_STATUS_DECLINED, _BIND_STATUS_INVALID, \
-    CALENDAR_BIND_TABLE, CALENDAR_HOME_TABLE, ADDRESSBOOK_HOME_TABLE, \
-    ADDRESSBOOK_BIND_TABLE
+from txdav.common.icommondatastore import (
+    IndexedSearchException, ReservationError)
 
+from twext.enterprise.dal.syntax import Select
+from twext.enterprise.dal.syntax import Parameter
+from txdav.common.datastore.sql_tables import (
+    _BIND_MODE_OWN, _BIND_MODE_READ, _BIND_MODE_WRITE, _BIND_MODE_DIRECT,
+    _BIND_STATUS_INVITED, _BIND_STATUS_ACCEPTED, _BIND_STATUS_DECLINED,
+    _BIND_STATUS_INVALID, CALENDAR_BIND_TABLE, CALENDAR_HOME_TABLE,
+    ADDRESSBOOK_HOME_TABLE, ADDRESSBOOK_BIND_TABLE, schema)
+
+
 log = Logger()
 
 indexfbtype_to_icalfbtype = {
@@ -108,6 +113,9 @@
     _homeTable = None
     _bindTable = None
 
+    _homeSchema = None
+    _bindSchema = None
+
     def __init__(self, collection):
         self._collection = collection
 
@@ -136,31 +144,41 @@
         "No-op, because the index implicitly always exists in the database."
 
 
+    @classproperty
+    def _allRecordsQuery(cls):
+        """
+        DAL query for all invite records with a given resource ID.
+        """
+        inv = schema.INVITE
+        home = cls._homeSchema
+        bind = cls._bindSchema
+        return Select(
+            [
+                inv.INVITE_UID,
+                inv.NAME,
+                inv.RECIPIENT_ADDRESS,
+                home.OWNER_UID,
+                bind.BIND_MODE,
+                bind.BIND_STATUS,
+                bind.MESSAGE
+            ],
+            From=inv.join(home).join(bind),
+            Where=(
+                (inv.RESOURCE_ID == Parameter("resourceID"))
+                .And(inv.RESOURCE_ID == bind.RESOURCE_ID)
+                .And(inv.HOME_RESOURCE_ID == home.RESOURCE_ID)
+                .And(inv.HOME_RESOURCE_ID == bind.HOME_RESOURCE_ID)),
+            OrderBy=inv.NAME, Ascending=True
+        )
+
+
     @inlineCallbacks
     def allRecords(self):
         values = []
-        for row in (yield self._txn.execSQL(
-            """
-            select
-                INVITE.INVITE_UID,
-                INVITE.NAME,
-                INVITE.RECIPIENT_ADDRESS,
-                %(HOME:name)s.%(HOME:column_OWNER_UID)s,
-                %(BIND:name)s.%(BIND:column_BIND_MODE)s,
-                %(BIND:name)s.%(BIND:column_BIND_STATUS)s,
-                %(BIND:name)s.%(BIND:column_MESSAGE)s
-            from
-                INVITE, %(HOME:name)s, %(BIND:name)s
-            where
-                INVITE.RESOURCE_ID = %%s
-                and INVITE.HOME_RESOURCE_ID = %(HOME:name)s.%(HOME:column_RESOURCE_ID)s
-                and %(BIND:name)s.%(BIND:column_RESOURCE_ID)s = INVITE.RESOURCE_ID
-                and %(BIND:name)s.%(BIND:column_HOME_RESOURCE_ID)s = INVITE.HOME_RESOURCE_ID
-            order by
-                INVITE.NAME asc
-            """ % self._combinedTable,
-            [self._collection._resourceID]
-        )):
+        rows = yield self._allRecordsQuery.on(
+            self._txn, resourceID=self._collection._resourceID
+        )
+        for row in rows:
             values.append(self._makeInvite(row))
         returnValue(values)
 
@@ -368,11 +386,11 @@
     L{twistedcaldav.sharing.InvitesDatabase}.
     """
 
-    def __init__(self, calendar):
-        self._homeTable = CALENDAR_HOME_TABLE
-        self._bindTable = CALENDAR_BIND_TABLE
-        super(SQLLegacyCalendarInvites, self).__init__(calendar)
+    _homeTable = CALENDAR_HOME_TABLE
+    _bindTable = CALENDAR_BIND_TABLE
 
+    _homeSchema = schema.CALENDAR_HOME
+    _bindSchema = schema.CALENDAR_BIND
 
     def _getHomeWithUID(self, uid):
         return self._txn.calendarHomeWithUID(uid, create=True)
@@ -385,11 +403,11 @@
     L{twistedcaldav.sharing.InvitesDatabase}.
     """
 
-    def __init__(self, addressbook):
-        self._homeTable = ADDRESSBOOK_HOME_TABLE
-        self._bindTable = ADDRESSBOOK_BIND_TABLE
-        super(SQLLegacyAddressBookInvites, self).__init__(addressbook)
+    _homeTable = ADDRESSBOOK_HOME_TABLE
+    _bindTable = ADDRESSBOOK_BIND_TABLE
 
+    _homeSchema = schema.ADDRESSBOOK_HOME
+    _bindSchema = schema.ADDRESSBOOK_BIND
 
     def _getHomeWithUID(self, uid):
         return self._txn.addressbookHomeWithUID(uid, create=True)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110307/94e3b63b/attachment.html>


More information about the calendarserver-changes mailing list