[CalendarServer-changes] [13755] CalendarServer/branches/users/gaya/groupsharee2/txdav

source_changes at macosforge.org source_changes at macosforge.org
Fri Jul 11 18:30:43 PDT 2014


Revision: 13755
          http://trac.calendarserver.org//changeset/13755
Author:   gaya at apple.com
Date:     2014-07-11 18:30:42 -0700 (Fri, 11 Jul 2014)
Log Message:
-----------
remove CALENDAR_HOME_ID column from GROUP_SHAREE table

Modified Paths:
--------------
    CalendarServer/branches/users/gaya/groupsharee2/txdav/caldav/datastore/sql.py
    CalendarServer/branches/users/gaya/groupsharee2/txdav/common/datastore/sql_schema/current-oracle-dialect.sql
    CalendarServer/branches/users/gaya/groupsharee2/txdav/common/datastore/sql_schema/current.sql
    CalendarServer/branches/users/gaya/groupsharee2/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_45_to_46.sql
    CalendarServer/branches/users/gaya/groupsharee2/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_45_to_46.sql

Modified: CalendarServer/branches/users/gaya/groupsharee2/txdav/caldav/datastore/sql.py
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee2/txdav/caldav/datastore/sql.py	2014-07-11 23:57:30 UTC (rev 13754)
+++ CalendarServer/branches/users/gaya/groupsharee2/txdav/caldav/datastore/sql.py	2014-07-12 01:30:42 UTC (rev 13755)
@@ -1807,11 +1807,11 @@
             _BIND_MODE_GROUP_READ: _BIND_MODE_GROUP_READ,
             _BIND_MODE_WRITE: _BIND_MODE_GROUP_WRITE,
             _BIND_MODE_GROUP_WRITE: _BIND_MODE_GROUP_WRITE,
-        }.get(self.shareMode())
+        }.get(self._bindMode)
 
 
     @inlineCallbacks
-    def groupModeAfterRemovingOneGroupSharee(self):
+    def _groupModeAfterRemovingOneGroupSharee(self):
         """
         return group mode after removing one group sharee or None
         """
@@ -1820,17 +1820,16 @@
         rows = yield Select(
             [Count(gs.GROUP_ID)],
             From=gs,
-            Where=(gs.CALENDAR_HOME_ID == self.viewerHome()._resourceID).And(
-                gs.CALENDAR_ID == self._resourceID)
+            Where=gs.CALENDAR_ID == self._resourceID
         ).on(self._txn)
-        if rows[0][0] > 1:
+        if rows[0][0] > 0:
             # no mode change for group shares
             returnValue(
                 {
                     _BIND_MODE_GROUP: _BIND_MODE_GROUP,
                     _BIND_MODE_GROUP_READ: _BIND_MODE_GROUP_READ,
                     _BIND_MODE_GROUP_WRITE: _BIND_MODE_GROUP_WRITE,
-                }.get(self.shareMode())
+                }.get(self._bindMode)
             )
 
         # else return mode without any groups
@@ -1838,7 +1837,7 @@
             {
                 _BIND_MODE_GROUP_READ: _BIND_MODE_READ,
                 _BIND_MODE_GROUP_WRITE: _BIND_MODE_WRITE,
-            }.get(self.shareMode())
+            }.get(self._bindMode)
         )
 
 
@@ -1857,8 +1856,7 @@
         rows = yield Select(
             [gs.MEMBERSHIP_HASH, gs.GROUP_BIND_MODE],
             From=gs,
-            Where=(gs.CALENDAR_HOME_ID == self.viewerHome()._resourceID).And(
-                gs.CALENDAR_ID == self._resourceID).And(
+            Where=(gs.CALENDAR_ID == self._resourceID).And(
                 gs.GROUP_ID == groupID)
         ).on(self._txn)
         if rows:
@@ -1871,8 +1869,7 @@
             if updateMap:
                 yield Update(
                     updateMap,
-                    Where=(gs.CALENDAR_HOME_ID == self.viewerHome()._resourceID).And(
-                        gs.CALENDAR_ID == self._resourceID).And(
+                    Where=(gs.CALENDAR_ID == self._resourceID).And(
                         gs.GROUP_ID == groupID
                     )
                 ).on(self._txn)
@@ -1881,7 +1878,6 @@
             yield Insert({
                 gs.MEMBERSHIP_HASH: membershipHash,
                 gs.GROUP_BIND_MODE: mode,
-                gs.CALENDAR_HOME_ID: self.viewerHome()._resourceID,
                 gs.CALENDAR_ID: self._resourceID,
                 gs.GROUP_ID: groupID,
             }).on(self._txn)
@@ -1896,15 +1892,23 @@
             returnValue(_BIND_MODE_WRITE)
         elif self._bindMode in (_BIND_MODE_GROUP, _BIND_MODE_GROUP_READ):
             gs = schema.GROUP_SHAREE
+            gm = schema.GROUP_MEMBERSHIP
             rows = yield Select(
                 [Max(gs.GROUP_BIND_MODE)], # _BIND_MODE_WRITE > _BIND_MODE_READ
                 From=gs,
-                Where=(gs.CALENDAR_HOME_ID == self.viewerHome()._resourceID).And(
-                    gs.CALENDAR_ID == self._resourceID
+                 Where=(
+                    gs.GROUP_ID.In(
+                        Select(
+                            [gm.GROUP_ID],
+                            From=gm,
+                            Where=(
+                                gm.MEMBER_UID == Parameter("uid")
+                            )
+                        )
+                    )
                 )
-            ).on(self._txn)
-            groupShareMode = rows[0][0]
-            returnValue(groupShareMode)
+            ).on(self._txn, uid=self.viewerHome().uid())
+            returnValue(rows[0][0])
         else:
             returnValue(self._bindMode)
 
@@ -1939,6 +1943,8 @@
                 (yield super(Calendar, self).inviteUIDToShare(shareeUID, mode, summary, shareName))
             )
 
+        yield self.updateShareeGroupLink(shareeUID, mode=mode)
+
         # invite every member of group
         shareeViews = set()
         groupID = (yield self._txn.groupByUID(shareeUID))[0]
@@ -1949,7 +1955,6 @@
             if newMode is not None:
                 # everything but direct share
                 shareeView = yield super(Calendar, self).inviteUIDToShare(memberUID, newMode, summary)
-                yield shareeView.updateShareeGroupLink(shareeUID, mode=mode)
                 shareeViews.add(shareeView)
 
         returnValue(shareeViews)
@@ -1984,67 +1989,49 @@
     @inlineCallbacks
     def uninviteUIDFromShare(self, shareeUID):
         """
-        Remove a user from a share. Make sure a notification is sent as well.
+        Remove a user or group from a share. Make sure a notification is sent as well.
 
         @param shareeUID: UID of the sharee
         @type shareeUID: C{str}
         """
 
-        if not (
-            config.Sharing.Enabled and
-            config.Sharing.Calendars.Enabled and
-            config.Sharing.Calendars.Groups.Enabled
-        ):
-            returnValue(
-                (yield super(Calendar, self).uninviteUIDFromShare(shareeUID))
-            )
+        # see if cached group
+        groupID = (yield self._txn.groupByUID(shareeUID, create=False))[0]
+        if groupID:
 
-        record = yield self._txn.directoryService().recordWithUID(shareeUID.decode("utf-8"))
-        if (
-            record is None or
-            record.recordType != RecordType.group
-        ):
-            # delete all group sharees and individual sharees
-            shareeView = yield self.shareeView(shareeUID)
-            if shareeView is None:
-                returnValue(None)
-
-            # delete all group links for view's home
+            # see if group sharee for self & delete
             gs = schema.GROUP_SHAREE
-            yield Delete(
+            rows = yield Delete(
                 From=gs,
-                Where=(gs.CALENDAR_HOME_ID == shareeView.viewerHome()._resourceID).And(
-                    gs.CALENDAR_ID == self._resourceID)
-            )
+                Where=(gs.CALENDAR_ID == self._resourceID).And(
+                    gs.GROUP_ID == groupID
+                ),
+                Return=[gs.GROUP_ID]
+            ).on(self._txn)
 
-            returnValue(
-                (yield super(Calendar, self).uninviteUIDFromShare(shareeUID))
-            )
+            if rows:
+                # uninvite each member of group
+                memberUIDs = yield self._txn.groupMemberUIDs(groupID)
+                for memberUID in memberUIDs:
+                    shareeView = yield self.shareeView(memberUID)
+                    if shareeView is not None:
 
-        # uninvite every member of group
-        groupID = (yield self._txn.groupByUID(shareeUID))[0]
-        memberUIDs = yield self._txn.groupMemberUIDs(groupID)
-        for memberUID in memberUIDs:
-            shareeView = yield self.shareeView(memberUID)
-            if shareeView is not None:
+                        newMode = yield shareeView._groupModeAfterRemovingOneGroupSharee()
+                        if newMode is None:
+                            # only group was shared, do delete share
+                            yield super(Calendar, self).uninviteUIDFromShare(memberUID)
+                        else:
+                            # multiple groups or group and individual was shared, update to new mode
+                            yield super(Calendar, self).inviteUIDToShare(memberUID, newMode)
 
-                newMode = yield shareeView.groupModeAfterRemovingOneGroupSharee()
-                gs = schema.GROUP_SHAREE
-                yield Delete(
-                    From=gs,
-                    Where=(gs.CALENDAR_HOME_ID == shareeView.viewerHome()._resourceID).And(
-                        gs.CALENDAR_ID == self._resourceID).And(
-                        gs.GROUP_ID == groupID
-                    )
-                )
-                if newMode is None:
-                    # only group was shared, do delete share
-                    yield super(Calendar, self).uninviteUIDFromShare(memberUID)
-                else:
-                    # multiple groups or group and individual was shared, update to new mode
-                    yield super(Calendar, self).inviteUIDToShare(memberUID, newMode)
+                returnValue(None)
 
+        returnValue(
+            (yield super(Calendar, self).uninviteUIDFromShare(shareeUID))
+        )
 
+
+
 icalfbtype_to_indexfbtype = {
     "UNKNOWN"         : 0,
     "FREE"            : 1,
@@ -2379,10 +2366,9 @@
                 else:
                     # delete existing group rows
                     ga = schema.GROUP_ATTENDEE
-                    rows = yield Delete(
+                    yield Delete(
                         From=ga,
                         Where=ga.RESOURCE_ID == self._resourceID,
-                        #Return=[ga.GROUP_ID]
                     ).on(txn)
 
         returnValue(isOldEventWithGroupAttendees)

Modified: CalendarServer/branches/users/gaya/groupsharee2/txdav/common/datastore/sql_schema/current-oracle-dialect.sql
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee2/txdav/common/datastore/sql_schema/current-oracle-dialect.sql	2014-07-11 23:57:30 UTC (rev 13754)
+++ CalendarServer/branches/users/gaya/groupsharee2/txdav/common/datastore/sql_schema/current-oracle-dialect.sql	2014-07-12 01:30:42 UTC (rev 13755)
@@ -444,11 +444,10 @@
 
 create table GROUP_SHAREE (
     "GROUP_ID" integer not null references GROUPS on delete cascade,
-    "CALENDAR_HOME_ID" integer not null references CALENDAR_HOME on delete cascade,
     "CALENDAR_ID" integer not null references CALENDAR on delete cascade,
     "GROUP_BIND_MODE" integer not null,
     "MEMBERSHIP_HASH" nvarchar2(255), 
-    primary key ("GROUP_ID", "CALENDAR_HOME_ID", "CALENDAR_ID")
+    primary key ("GROUP_ID", "CALENDAR_ID")
 );
 
 create table DELEGATES (
@@ -791,10 +790,6 @@
     GROUP_ID
 );
 
-create index GROUP_SHAREE_CALENDAR_a9feee17 on GROUP_SHAREE (
-    CALENDAR_HOME_ID
-);
-
 create index GROUP_SHAREE_CALENDAR_28a88850 on GROUP_SHAREE (
     CALENDAR_ID
 );

Modified: CalendarServer/branches/users/gaya/groupsharee2/txdav/common/datastore/sql_schema/current.sql
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee2/txdav/common/datastore/sql_schema/current.sql	2014-07-11 23:57:30 UTC (rev 13754)
+++ CalendarServer/branches/users/gaya/groupsharee2/txdav/common/datastore/sql_schema/current.sql	2014-07-12 01:30:42 UTC (rev 13755)
@@ -828,16 +828,13 @@
 
 create table GROUP_SHAREE (
   GROUP_ID                      integer not null references GROUPS on delete cascade,
-  CALENDAR_HOME_ID 				integer not null references CALENDAR_HOME on delete cascade,
   CALENDAR_ID      				integer not null references CALENDAR on delete cascade,
   GROUP_BIND_MODE               integer not null, -- enum CALENDAR_BIND_MODE
   MEMBERSHIP_HASH               varchar(255) not null,
   
-  primary key (GROUP_ID, CALENDAR_HOME_ID, CALENDAR_ID)
+  primary key (GROUP_ID, CALENDAR_ID)
 );
 
-create index GROUP_SHAREE_CALENDAR_HOME_ID on
-  GROUP_SHAREE(CALENDAR_HOME_ID);
 create index GROUP_SHAREE_CALENDAR_ID on
   GROUP_SHAREE(CALENDAR_ID);
 

Modified: CalendarServer/branches/users/gaya/groupsharee2/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_45_to_46.sql
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee2/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_45_to_46.sql	2014-07-11 23:57:30 UTC (rev 13754)
+++ CalendarServer/branches/users/gaya/groupsharee2/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_45_to_46.sql	2014-07-12 01:30:42 UTC (rev 13755)
@@ -68,17 +68,13 @@
 
 create table GROUP_SHAREE (
   GROUP_ID                      integer not null references GROUPS on delete cascade,
-  CALENDAR_HOME_ID 				integer not null references CALENDAR_HOME on delete cascade,
   CALENDAR_ID      				integer not null references CALENDAR on delete cascade,
   GROUP_BIND_MODE               integer not null, -- enum CALENDAR_BIND_MODE
   MEMBERSHIP_HASH               varchar(255) not null,
   
-  primary key (GROUP_ID, CALENDAR_HOME_ID, CALENDAR_ID) -- implicit index
+  primary key (GROUP_ID, CALENDAR_ID) -- implicit index
 );
 
-create index GROUP_SHAREE_CALENDAR_HOME_ID on GROUP_SHAREE(
-	CALENDAR_HOME_ID
-);
 create index GROUP_SHAREE_CALENDAR_ID on GROUP_SHAREE(
 	CALENDAR_ID
 );

Modified: CalendarServer/branches/users/gaya/groupsharee2/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_45_to_46.sql
===================================================================
--- CalendarServer/branches/users/gaya/groupsharee2/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_45_to_46.sql	2014-07-11 23:57:30 UTC (rev 13754)
+++ CalendarServer/branches/users/gaya/groupsharee2/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_45_to_46.sql	2014-07-12 01:30:42 UTC (rev 13755)
@@ -62,16 +62,13 @@
 
 create table GROUP_SHAREE (
   GROUP_ID                      integer not null references GROUPS on delete cascade,
-  CALENDAR_HOME_ID 				integer not null references CALENDAR_HOME on delete cascade,
   CALENDAR_ID      				integer not null references CALENDAR on delete cascade,
   GROUP_BIND_MODE               integer not null, -- enum CALENDAR_BIND_MODE
   MEMBERSHIP_HASH               varchar(255) not null,
   
-  primary key (GROUP_ID, CALENDAR_HOME_ID, CALENDAR_ID) -- implicit index
+  primary key (GROUP_ID, CALENDAR_ID) -- implicit index
 );
 
-create index GROUP_SHAREE_CALENDAR_HOME_ID on
-  GROUP_SHAREE(CALENDAR_HOME_ID);
 create index GROUP_SHAREE_CALENDAR_ID on
   GROUP_SHAREE(CALENDAR_ID);
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20140711/88060aa3/attachment-0001.html>


More information about the calendarserver-changes mailing list