[CalendarServer-changes] [7083] CalendarServer/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Fri Feb 25 12:57:08 PST 2011
Revision: 7083
http://trac.macosforge.org/projects/calendarserver/changeset/7083
Author: cdaboo at apple.com
Date: 2011-02-25 12:57:06 -0800 (Fri, 25 Feb 2011)
Log Message:
-----------
Fix logical operator precedence parenthesis.
Modified Paths:
--------------
CalendarServer/trunk/twext/enterprise/dal/syntax.py
CalendarServer/trunk/twext/enterprise/dal/test/test_sqlsyntax.py
CalendarServer/trunk/txdav/common/datastore/sql.py
Modified: CalendarServer/trunk/twext/enterprise/dal/syntax.py
===================================================================
--- CalendarServer/trunk/twext/enterprise/dal/syntax.py 2011-02-25 18:05:25 UTC (rev 7082)
+++ CalendarServer/trunk/twext/enterprise/dal/syntax.py 2011-02-25 20:57:06 UTC (rev 7083)
@@ -429,9 +429,17 @@
def subSQL(self, placeholder, quote, allTables):
stmt = SQLFragment()
- stmt.append(self._subexpression(self.a, placeholder, quote, allTables))
+ result = self._subexpression(self.a, placeholder, quote, allTables)
+ if isinstance(self.a, CompoundComparison) and self.a.op == 'or' and self.op == 'and':
+ result = _inParens(result)
+ stmt.append(result)
+
stmt.text += ' %s ' % (self.op,)
- stmt.append(self._subexpression(self.b, placeholder, quote, allTables))
+
+ result = self._subexpression(self.b, placeholder, quote, allTables)
+ if isinstance(self.b, CompoundComparison) and self.b.op == 'or' and self.op == 'and':
+ result = _inParens(result)
+ stmt.append(result)
return stmt
Modified: CalendarServer/trunk/twext/enterprise/dal/test/test_sqlsyntax.py
===================================================================
--- CalendarServer/trunk/twext/enterprise/dal/test/test_sqlsyntax.py 2011-02-25 18:05:25 UTC (rev 7082)
+++ CalendarServer/trunk/twext/enterprise/dal/test/test_sqlsyntax.py 2011-02-25 20:57:06 UTC (rev 7083)
@@ -645,3 +645,35 @@
Insert({self.schema.BOZ.QUX:
self.schema.A_SEQ}).toSQL(),
SQLFragment("insert into BOZ (QUX) values (nextval('A_SEQ'))", []))
+
+ def test_nestedLogicalExpressions(self):
+ """
+ When a sequence is used as a value in an expression, it renders as the
+ call to 'nextval' that will produce its next value.
+ """
+ self.assertEquals(
+ Select(
+ From=self.schema.FOO,
+ Where=(self.schema.FOO.BAR != 7).
+ And(self.schema.FOO.BAZ != 8).
+ And((self.schema.FOO.BAR == 8).Or(self.schema.FOO.BAZ == 0))
+ ).toSQL(),
+ SQLFragment("select * from FOO where BAR != ? and BAZ != ? and (BAR = ? or BAZ = ?)", [7, 8, 8, 0]))
+
+ self.assertEquals(
+ Select(
+ From=self.schema.FOO,
+ Where=(self.schema.FOO.BAR != 7).
+ Or(self.schema.FOO.BAZ != 8).
+ Or((self.schema.FOO.BAR == 8).And(self.schema.FOO.BAZ == 0))
+ ).toSQL(),
+ SQLFragment("select * from FOO where BAR != ? or BAZ != ? or BAR = ? and BAZ = ?", [7, 8, 8, 0]))
+
+ self.assertEquals(
+ Select(
+ From=self.schema.FOO,
+ Where=(self.schema.FOO.BAR != 7).
+ Or(self.schema.FOO.BAZ != 8).
+ And((self.schema.FOO.BAR == 8).Or(self.schema.FOO.BAZ == 0))
+ ).toSQL(),
+ SQLFragment("select * from FOO where (BAR != ? or BAZ != ?) and (BAR = ? or BAZ = ?)", [7, 8, 8, 0]))
Modified: CalendarServer/trunk/txdav/common/datastore/sql.py
===================================================================
--- CalendarServer/trunk/txdav/common/datastore/sql.py 2011-02-25 18:05:25 UTC (rev 7082)
+++ CalendarServer/trunk/txdav/common/datastore/sql.py 2011-02-25 20:57:06 UTC (rev 7083)
@@ -1373,11 +1373,10 @@
ownedCond = bind.BIND_MODE != _BIND_MODE_OWN
revisions = (yield Select(
[rev.RESOURCE_ID, Max(rev.REVISION)],
- From=rev.join(bind, rev.RESOURCE_ID == bind.RESOURCE_ID,
- 'left'),
- Where=(bind.HOME_RESOURCE_ID == home._resourceID).And(
- ownedCond).And(
- (rev.RESOURCE_NAME != None).Or(rev.DELETED == False)),
+ From=rev.join(bind, rev.RESOURCE_ID == bind.RESOURCE_ID, 'left'),
+ Where=(bind.HOME_RESOURCE_ID == home._resourceID).
+ And(ownedCond).
+ And((rev.RESOURCE_NAME != None).Or(rev.DELETED == False)),
GroupBy=rev.RESOURCE_ID
).on(home._txn))
revisions = dict(revisions)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110225/7c80624d/attachment-0001.html>
More information about the calendarserver-changes
mailing list