[CalendarServer-changes] [7108] 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:31 PST 2011
Revision: 7108
http://trac.macosforge.org/projects/calendarserver/changeset/7108
Author: glyph at apple.com
Date: 2011-03-07 18:58:31 -0800 (Mon, 07 Mar 2011)
Log Message:
-----------
dalify SQLLegacyInvites except for deletes
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:58:08 UTC (rev 7107)
+++ CalendarServer/branches/users/glyph/oracle/txdav/common/datastore/sql_legacy.py 2011-03-08 02:58:31 UTC (rev 7108)
@@ -44,6 +44,8 @@
from txdav.common.icommondatastore import (
IndexedSearchException, ReservationError)
+from twext.enterprise.dal.syntax import Update
+from twext.enterprise.dal.syntax import Insert
from twext.enterprise.dal.syntax import Select
from twext.enterprise.dal.syntax import Parameter
from txdav.common.datastore.sql_tables import (
@@ -144,27 +146,22 @@
"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.
- """
+ @classmethod
+ def _allColumnsQuery(cls, condition):
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
- ],
+ [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"))
+ condition
.And(inv.RESOURCE_ID == bind.RESOURCE_ID)
.And(inv.HOME_RESOURCE_ID == home.RESOURCE_ID)
.And(inv.HOME_RESOURCE_ID == bind.HOME_RESOURCE_ID)),
@@ -172,6 +169,15 @@
)
+ @classproperty
+ def _allRecordsQuery(cls):
+ """
+ DAL query for all invite records with a given resource ID.
+ """
+ inv = schema.INVITE
+ return cls._allColumnsQuery(inv.RESOURCE_ID == Parameter("resourceID"))
+
+
@inlineCallbacks
def allRecords(self):
values = []
@@ -183,27 +189,20 @@
returnValue(values)
+ @classproperty
+ def _inviteForRecipientQuery(cls):
+ """
+ DAL query to retrieve an invite record for a given recipient address.
+ """
+ inv = schema.INVITE
+ return cls._allColumnsQuery(
+ inv.RECIPIENT_ADDRESS == Parameter("recipient"))
+
+
@inlineCallbacks
def recordForUserID(self, userid):
- rows = 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.RECIPIENT_ADDRESS = %%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
- """ % self._combinedTable,
- [userid]
- )
+ rows = yield self._inviteForRecipientQuery.on(self._txn,
+ recipient=userid)
returnValue(self._makeInvite(rows[0]) if rows else None)
@@ -214,27 +213,18 @@
returnValue(record)
+ @classproperty
+ def _inviteForUIDQuery(cls):
+ """
+ DAL query to retrieve an invite record for a given recipient address.
+ """
+ inv = schema.INVITE
+ return cls._allColumnsQuery(inv.INVITE_UID == Parameter("uid"))
+
+
@inlineCallbacks
def recordForInviteUID(self, inviteUID):
- rows = 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.INVITE_UID = %%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
- """ % self._combinedTable,
- [inviteUID]
- )
+ rows = yield self._inviteForUIDQuery.on(self._txn, uid=inviteUID)
returnValue(self._makeInvite(rows[0]) if rows else None)
@@ -260,6 +250,71 @@
)
+ @classproperty
+ def _updateBindQuery(cls):
+ bind = cls._bindSchema
+
+ return Update({bind.BIND_MODE: Parameter("mode"),
+ bind.BIND_STATUS: Parameter("status"),
+ bind.MESSAGE: Parameter("message")},
+ Where=
+ (bind.RESOURCE_ID == Parameter("resourceID"))
+ .And(bind.HOME_RESOURCE_ID == Parameter("homeID")))
+
+
+ @classproperty
+ def _idsForRecipient(cls):
+ inv = schema.INVITE
+ return Select([inv.RESOURCE_ID, inv.HOME_RESOURCE_ID],
+ From=inv,
+ Where=inv.RECIPIENT_ADDRESS == Parameter("recipient"))
+
+
+ @classproperty
+ def _updateInviteQuery(cls):
+ """
+ DAL query to update an invitation for a given recipient.
+ """
+ inv = schema.INVITE
+ return Update({inv.NAME: Parameter("name"),
+ inv.INVITE_UID: Parameter("uid")},
+ Where=inv.RECIPIENT_ADDRESS == Parameter("recipient"))
+
+
+ @classproperty
+ def _insertBindQuery(cls):
+ bind = cls._bindSchema
+ return Insert(
+ {
+ bind.HOME_RESOURCE_ID: Parameter("homeID"),
+ bind.RESOURCE_ID: Parameter("resourceID"),
+ bind.BIND_MODE: Parameter("mode"),
+ bind.BIND_STATUS: Parameter("status"),
+ bind.MESSAGE: Parameter("message"),
+
+ # name is NULL because the resource is not bound yet, just
+ # invited; let's be explicit about that.
+ bind.RESOURCE_NAME: None,
+ bind.SEEN_BY_OWNER: False,
+ bind.SEEN_BY_SHAREE: False,
+ }
+ )
+
+
+ @classproperty
+ def _insertInviteQuery(cls):
+ inv = schema.INVITE
+ return Insert(
+ {
+ inv.INVITE_UID: Parameter("uid"),
+ inv.NAME: Parameter("name"),
+ inv.HOME_RESOURCE_ID: Parameter("homeID"),
+ inv.RESOURCE_ID: Parameter("resourceID"),
+ inv.RECIPIENT_ADDRESS: Parameter("recipient")
+ }
+ )
+
+
@inlineCallbacks
def addOrUpdateRecord(self, record):
bindMode = {'read-only': _BIND_MODE_READ,
@@ -275,74 +330,33 @@
# (and may contain a trailing slash).
principalUID = record.principalURL.split("/")[3]
shareeHome = yield self._getHomeWithUID(principalUID)
- rows = yield self._txn.execSQL(
- "select RESOURCE_ID, HOME_RESOURCE_ID from INVITE where RECIPIENT_ADDRESS = %s",
- [record.userid]
- )
+ rows = yield self._idsForRecipient.on(self._txn,
+ recipient=record.userid)
if rows:
[[resourceID, homeResourceID]] = rows
- # Invite(inviteuid, userid, principalURL, common_name, access, state, summary)
- yield self._txn.execSQL(
- """
- update %(BIND:name)s
- set %(BIND:column_BIND_MODE)s = %%s,
- %(BIND:column_BIND_STATUS)s = %%s,
- %(BIND:column_MESSAGE)s = %%s
- where %(BIND:column_RESOURCE_ID)s = %%s
- and %(BIND:column_HOME_RESOURCE_ID)s = %%s
- """ % self._combinedTable,
- [bindMode, bindStatus, record.summary, resourceID, homeResourceID]
+ yield self._updateBindQuery.on(
+ self._txn,
+ mode=bindMode, status=bindStatus, message=record.summary,
+ resourceID=resourceID, homeID=homeResourceID
)
- yield self._txn.execSQL("""
- update INVITE
- set NAME = %s, INVITE_UID = %s
- where RECIPIENT_ADDRESS = %s
- """,
- [record.name, record.inviteuid, record.userid]
+ yield self._updateInviteQuery.on(
+ self._txn, name=record.name, uid=record.inviteuid,
+ recipient=record.userid
)
else:
- yield self._txn.execSQL(
- """
- insert into INVITE
- (
- INVITE_UID, NAME,
- HOME_RESOURCE_ID, RESOURCE_ID,
- RECIPIENT_ADDRESS
- )
- values (%s, %s, %s, %s, %s)
- """,
- [
- record.inviteuid, record.name,
- shareeHome._resourceID, self._collection._resourceID,
- record.userid
- ])
- yield self._txn.execSQL(
- """
- insert into %(BIND:name)s
- (
- %(BIND:column_HOME_RESOURCE_ID)s,
- %(BIND:column_RESOURCE_ID)s,
- %(BIND:column_RESOURCE_NAME)s,
- %(BIND:column_BIND_MODE)s,
- %(BIND:column_BIND_STATUS)s,
- %(BIND:column_SEEN_BY_OWNER)s,
- %(BIND:column_SEEN_BY_SHAREE)s,
- %(BIND:column_MESSAGE)s
- )
- values (%%s, %%s, %%s, %%s, %%s, %%s, %%s, %%s)
- """ % self._combinedTable,
- [
- shareeHome._resourceID,
- self._collection._resourceID,
- None, # this is NULL because it is not bound yet, let's be
- # explicit about that.
- bindMode,
- bindStatus,
- False,
- False,
- record.summary
- ]
+ yield self._insertInviteQuery.on(
+ self._txn, uid=record.inviteuid, name=record.name,
+ homeID=shareeHome._resourceID,
+ resourceID=self._collection._resourceID, recipient=record.userid
)
+ yield self._insertBindQuery.on(
+ self._txn,
+ homeID=shareeHome._resourceID,
+ resourceID=self._collection._resourceID,
+ mode=bindMode,
+ status=bindStatus,
+ message=record.summary
+ )
@inlineCallbacks
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110307/0c3bd836/attachment-0001.html>
More information about the calendarserver-changes
mailing list