[CalendarServer-changes] [5448] CalendarServer/trunk/twistedcaldav
source_changes at macosforge.org
source_changes at macosforge.org
Thu Apr 8 13:15:10 PDT 2010
Revision: 5448
http://trac.macosforge.org/projects/calendarserver/changeset/5448
Author: cdaboo at apple.com
Date: 2010-04-08 13:15:09 -0700 (Thu, 08 Apr 2010)
Log Message:
-----------
Changed timespan query to cope with missing per-user data (e.g. when upgrading from an older calendar store).
Modified Paths:
--------------
CalendarServer/trunk/twistedcaldav/index.py
CalendarServer/trunk/twistedcaldav/query/sqlgenerator.py
Modified: CalendarServer/trunk/twistedcaldav/index.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/index.py 2010-04-08 20:08:34 UTC (rev 5447)
+++ CalendarServer/trunk/twistedcaldav/index.py 2010-04-08 20:15:09 UTC (rev 5448)
@@ -339,20 +339,11 @@
"select PERUSERID from PERUSER where USERUID == :1",
useruid,
)
- count = self._db_value_for_sql(
- "select COUNT(PERUSERID) from TRANSPARENCY where PERUSERID == :1",
- dbuseruid,
- )
- if dbuseruid is None or count == 0:
- dbuseruid = self._db_value_for_sql(
- "select PERUSERID from PERUSER where USERUID == :1",
- "",
- )
-
+
# For a free-busy time-range query we return all instances
rowiter = self._db_execute(
- "select RESOURCE.NAME, RESOURCE.UID, RESOURCE.TYPE, RESOURCE.ORGANIZER, TIMESPAN.FLOAT, TIMESPAN.START, TIMESPAN.END, TIMESPAN.FBTYPE, TRANSPARENCY.TRANSPARENT" +
- qualifiers[0] + " AND TRANSPARENCY.PERUSERID == '%s'" % (dbuseruid,),
+ "select DISTINCT RESOURCE.NAME, RESOURCE.UID, RESOURCE.TYPE, RESOURCE.ORGANIZER, TIMESPAN.FLOAT, TIMESPAN.START, TIMESPAN.END, TIMESPAN.FBTYPE, TIMESPAN.TRANSPARENT, TRANSPARENCY.TRANSPARENT" +
+ qualifiers[0] % (dbuseruid if dbuseruid else "",),
*qualifiers[1]
)
else:
@@ -363,6 +354,11 @@
for row in rowiter:
name = row[0]
if self.resource.getChild(name.encode("utf-8")):
+ if fbtype:
+ row = list(row)
+ if row[9]:
+ row[8] = row[9]
+ del row[9]
yield row
else:
log.err("Calendar resource %s is missing from %s. Removing from index."
@@ -466,6 +462,7 @@
# 'B' - busy
# 'U' - busy-unavailable
# 'T' - busy-tentative
+ # TRANSPARENT: Y if transparent, N if opaque (default non-per-user value)
#
q.execute(
"""
@@ -475,7 +472,8 @@
FLOAT text(1),
START date,
END date,
- FBTYPE text(1)
+ FBTYPE text(1),
+ TRANSPARENT text(1)
)
"""
)
@@ -683,11 +681,18 @@
start = instance.start.replace(tzinfo=utc)
end = instance.end.replace(tzinfo=utc)
float = 'Y' if instance.start.tzinfo is None else 'N'
+ transp = 'T' if instance.component.propertyValue("TRANSP") == "TRANSPARENT" else 'F'
self._db_execute(
"""
- insert into TIMESPAN (RESOURCEID, FLOAT, START, END, FBTYPE)
- values (:1, :2, :3, :4, :5)
- """, resourceid, float, start, end, icalfbtype_to_indexfbtype.get(instance.component.getFBType(), 'F')
+ insert into TIMESPAN (RESOURCEID, FLOAT, START, END, FBTYPE, TRANSPARENT)
+ values (:1, :2, :3, :4, :5, :6)
+ """,
+ resourceid,
+ float,
+ start,
+ end,
+ icalfbtype_to_indexfbtype.get(instance.component.getFBType(), 'F'),
+ transp
)
instanceid = self.lastrowid
peruserdata = calendar.perUserTransparency(instance.rid)
@@ -709,9 +714,9 @@
float = 'N'
self._db_execute(
"""
- insert into TIMESPAN (RESOURCEID, FLOAT, START, END, FBTYPE)
- values (:1, :2, :3, :4, :5)
- """, resourceid, float, start, end, '?'
+ insert into TIMESPAN (RESOURCEID, FLOAT, START, END, FBTYPE, TRANSPARENT)
+ values (:1, :2, :3, :4, :5, :6)
+ """, resourceid, float, start, end, '?', '?'
)
instanceid = self.lastrowid
peruserdata = calendar.perUserTransparency(None)
Modified: CalendarServer/trunk/twistedcaldav/query/sqlgenerator.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/query/sqlgenerator.py 2010-04-08 20:08:34 UTC (rev 5447)
+++ CalendarServer/trunk/twistedcaldav/query/sqlgenerator.py 2010-04-08 20:15:09 UTC (rev 5448)
@@ -49,7 +49,8 @@
TIMESPANTEST = "((TIMESPAN.FLOAT == 'N' AND TIMESPAN.START < %s AND TIMESPAN.END > %s) OR (TIMESPAN.FLOAT == 'Y' AND TIMESPAN.START < %s AND TIMESPAN.END > %s))"
TIMESPANTEST_NOEND = "((TIMESPAN.FLOAT == 'N' AND TIMESPAN.END > %s) OR (TIMESPAN.FLOAT == 'Y' AND TIMESPAN.END > %s))"
TIMESPANTEST_NOSTART = "((TIMESPAN.FLOAT == 'N' AND TIMESPAN.START < %s) OR (TIMESPAN.FLOAT == 'Y' AND TIMESPAN.START < %s))"
- TIMESPANTEST_TAIL_PIECE = " AND TIMESPAN.RESOURCEID == RESOURCE.RESOURCEID AND TIMESPAN.INSTANCEID == TRANSPARENCY.INSTANCEID"
+ TIMESPANTEST_TAIL_PIECE = " AND TIMESPAN.RESOURCEID == RESOURCE.RESOURCEID"
+ TIMESPANTEST_JOIN_ON_PIECE = "TIMESPAN.INSTANCEID == TRANSPARENCY.INSTANCEID AND TRANSPARENCY.PERUSERID == '%s'"
def __init__(self, expr):
self.expression = expr
@@ -75,7 +76,11 @@
# Prefix with ' from ...' partial statement
select = self.FROM + self.RESOURCEDB
if self.usedtimespan:
- select += ", %s, %s, %s" % (self.TIMESPANDB, self.TRANSPARENCYDB, self.PERUSERDB,)
+ select += ", %s, %s LEFT OUTER JOIN %s ON (%s)" % (
+ self.TIMESPANDB,
+ self.PERUSERDB,
+ self.TRANSPARENCYDB,
+ self.TIMESPANTEST_JOIN_ON_PIECE)
select += self.sout.getvalue()
return select, self.arguments
@@ -207,7 +212,7 @@
@param arg: the C{str} of the argument to add
"""
- # Append argument to the list and add the appropriate substituion string to the output stream.
+ # Append argument to the list and add the appropriate substitution string to the output stream.
self.arguments.append(arg)
self.sout.write(":" + str(len(self.arguments)))
@@ -218,7 +223,7 @@
@return: C{str} for argument substitution text
"""
- # Append argument to the list and add the appropriate substituion string to the output stream.
+ # Append argument to the list and add the appropriate substitution string to the output stream.
self.arguments.append(arg)
return ":" + str(len(self.arguments))
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20100408/4f270eec/attachment-0001.html>
More information about the calendarserver-changes
mailing list