Update of /cvsroot/sqlobject/SQLObject/SQLObject
In directory sc8-pr-cvs1:/tmp/cvs-serv1501
Modified Files:
DBConnection.py Join.py
Log Message:
More descending sorting support
Index: DBConnection.py
===================================================================
RCS file: /cvsroot/sqlobject/SQLObject/SQLObject/DBConnection.py,v
retrieving revision 1.35
retrieving revision 1.36
diff -C2 -d -r1.35 -r1.36
*** DBConnection.py 26 Jun 2003 08:33:56 -0000 1.35
--- DBConnection.py 28 Jun 2003 22:20:20 -0000 1.36
***************
*** 13,16 ****
--- 13,17 ----
import os
import anydbm
+ from Join import sorter
try:
***************
*** 832,839 ****
self._maxNext = -1
results = self.allResults()
! def cmper(a, b, orderBy=select.ops['orderBy']):
! return cmp(getattr(a, orderBy),
! getattr(b, orderBy))
! results.sort(cmper)
self._results = results
if select.ops.get('start'):
--- 833,837 ----
self._maxNext = -1
results = self.allResults()
! results.sort(sorter(select.ops['orderBy']))
self._results = results
if select.ops.get('start'):
Index: Join.py
===================================================================
RCS file: /cvsroot/sqlobject/SQLObject/SQLObject/Join.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** Join.py 26 Jun 2003 08:33:56 -0000 1.4
--- Join.py 28 Jun 2003 22:20:20 -0000 1.5
***************
*** 52,85 ****
self.orderBy = defaultSortClass._defaultOrder
if self.orderBy is not None:
! def sorter(a, b, attr=self.orderBy):
! if attr.startswith('-'):
! return -sorter(a, b, attr=attr[1:])
! return cmp(getattr(a, attr),
! getattr(b, attr))
! results.sort(self._sorter(self.orderBy))
return results
! def _sorter(self, orderBy):
! if isinstance(orderBy, tuple) or isinstance(orderBy, list):
! if len(orderBy) == 1:
! orderBy = orderBy[0]
! else:
! fhead = self._sorter(orderBy[0])
! frest = self._sorter(orderBy[1:])
! return lambda a, b, fhead=fhead, frest=frest: fhead(a, b) or frest(a, b)
! if isinstance(orderBy, SQLBuilder.DESC) \
! and isinstance(orderBy.expr, SQLBuilder.SQLObjectField):
! orderBy = '-' + orderBy.expr.original
! elif isinstance(orderBy, SQLBuilder.SQLObjectField):
! orderBy = orderBy.original
! # @@: but we don't handle more complex expressions for orderings
! if orderBy.startswith('-'):
! orderBy = orderBy[1:]
! def sorter(a, b, attr=orderBy):
! return cmp(getattr(b, attr), getattr(a, attr))
else:
! def sorter(a, b, attr=orderBy):
! return cmp(getattr(a, attr), getattr(b, attr))
! return sorter
# This is a one-to-many
--- 52,80 ----
self.orderBy = defaultSortClass._defaultOrder
if self.orderBy is not None:
! results.sort(sorter(self.orderBy))
return results
! def sorter(orderBy):
! if isinstance(orderBy, tuple) or isinstance(orderBy, list):
! if len(orderBy) == 1:
! orderBy = orderBy[0]
else:
! fhead = sorter(orderBy[0])
! frest = sorter(orderBy[1:])
! return lambda a, b, fhead=fhead, frest=frest: fhead(a, b) or frest(a, b)
! if isinstance(orderBy, SQLBuilder.DESC) \
! and isinstance(orderBy.expr, SQLBuilder.SQLObjectField):
! orderBy = '-' + orderBy.expr.original
! elif isinstance(orderBy, SQLBuilder.SQLObjectField):
! orderBy = orderBy.original
! # @@: but we don't handle more complex expressions for orderings
! if orderBy.startswith('-'):
! orderBy = orderBy[1:]
! def cmper(a, b, attr=orderBy):
! return cmp(getattr(b, attr), getattr(a, attr))
! else:
! def cmper(a, b, attr=orderBy):
! return cmp(getattr(a, attr), getattr(b, attr))
! return cmper
# This is a one-to-many
|