[CalendarServer-changes] [7042] CalendarServer/trunk/twext/enterprise/dal

source_changes at macosforge.org source_changes at macosforge.org
Thu Feb 17 18:25:07 PST 2011


Revision: 7042
          http://trac.macosforge.org/projects/calendarserver/changeset/7042
Author:   glyph at apple.com
Date:     2011-02-17 18:25:07 -0800 (Thu, 17 Feb 2011)
Log Message:
-----------
'Ascending' attribute for DAL Select object, to specify 'order by' order.

Modified Paths:
--------------
    CalendarServer/trunk/twext/enterprise/dal/syntax.py
    CalendarServer/trunk/twext/enterprise/dal/test/test_sqlsyntax.py

Modified: CalendarServer/trunk/twext/enterprise/dal/syntax.py
===================================================================
--- CalendarServer/trunk/twext/enterprise/dal/syntax.py	2011-02-18 02:24:43 UTC (rev 7041)
+++ CalendarServer/trunk/twext/enterprise/dal/syntax.py	2011-02-18 02:25:07 UTC (rev 7042)
@@ -490,7 +490,7 @@
     """
 
     def __init__(self, columns=None, Where=None, From=None, OrderBy=None,
-                 GroupBy=None, Limit=None, ForUpdate=False):
+                 GroupBy=None, Limit=None, ForUpdate=False, Ascending=None):
         self.From = From
         self.Where = Where
         if not isinstance(OrderBy, (list, tuple, type(None))):
@@ -509,6 +509,7 @@
             columns = _SomeColumns(columns)
         self.columns = columns
         self.ForUpdate = ForUpdate
+        self.Ascending = Ascending
 
 
     def toSQL(self, placeholder="?", quote=lambda x: x):
@@ -526,7 +527,8 @@
             wherestmt = self.Where.subSQL(placeholder, quote, allTables)
             stmt.text += quote(" where ")
             stmt.append(wherestmt)
-        for bywhat, expr in [('group', self.GroupBy), ('order', self.OrderBy)]:
+        for bywhat, expr in [('group', self.GroupBy),
+                             ('order', self.OrderBy)]:
             if expr is not None:
                 stmt.text += quote(" " + bywhat + " by ")
                 fst = True
@@ -536,6 +538,13 @@
                     else:
                         stmt.text += ', '
                     stmt.append(subthing.subSQL(placeholder, quote, allTables))
+                if bywhat == 'order':
+                    if self.Ascending is not None:
+                        if self.Ascending:
+                            kw = " asc"
+                        else:
+                            kw = " desc"
+                        stmt.append(SQLFragment(kw))
 
         if self.Limit is not None:
             stmt.text += quote(" limit ")

Modified: CalendarServer/trunk/twext/enterprise/dal/test/test_sqlsyntax.py
===================================================================
--- CalendarServer/trunk/twext/enterprise/dal/test/test_sqlsyntax.py	2011-02-18 02:24:43 UTC (rev 7041)
+++ CalendarServer/trunk/twext/enterprise/dal/test/test_sqlsyntax.py	2011-02-18 02:25:07 UTC (rev 7042)
@@ -139,6 +139,33 @@
         )
 
 
+    def test_orderByOrder(self):
+        """
+        L{Select}'s L{Ascending} parameter specifies an ascending/descending
+        order for query results with an OrderBy clause.
+        """
+        self.assertEquals(
+            Select(From=self.schema.FOO,
+                   OrderBy=self.schema.FOO.BAR,
+                   Ascending=False).toSQL(),
+            SQLFragment("select * from FOO order by BAR desc")
+        )
+
+        self.assertEquals(
+            Select(From=self.schema.FOO,
+                   OrderBy=self.schema.FOO.BAR,
+                   Ascending=True).toSQL(),
+            SQLFragment("select * from FOO order by BAR asc")
+        )
+
+        self.assertEquals(
+            Select(From=self.schema.FOO,
+                   OrderBy=[self.schema.FOO.BAR, self.schema.FOO.BAZ],
+                   Ascending=True).toSQL(),
+            SQLFragment("select * from FOO order by BAR, BAZ asc")
+        )
+
+
     def test_forUpdate(self):
         """
         L{Select}'s L{ForUpdate} parameter generates a 'for update' clause at
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110217/9733a58e/attachment.html>


More information about the calendarserver-changes mailing list