Thread: [SQL-CVS] r2555 - in home/phd/SQLObject/paramstyles/sqlobject: . tests versioning
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
From: <sub...@co...> - 2007-04-17 16:33:47
|
Author: phd Date: 2007-04-17 10:33:44 -0600 (Tue, 17 Apr 2007) New Revision: 2555 Modified: home/phd/SQLObject/paramstyles/sqlobject/sresults.py home/phd/SQLObject/paramstyles/sqlobject/tests/test_select.py home/phd/SQLObject/paramstyles/sqlobject/versioning/__init__.py Log: Merged patches from the revisions 2552:2554 from the trunk Modified: home/phd/SQLObject/paramstyles/sqlobject/sresults.py =================================================================== --- home/phd/SQLObject/paramstyles/sqlobject/sresults.py 2007-04-17 16:31:40 UTC (rev 2554) +++ home/phd/SQLObject/paramstyles/sqlobject/sresults.py 2007-04-17 16:33:44 UTC (rev 2555) @@ -21,16 +21,21 @@ self.clauseTables = clauseTables self.tables = tablesDict.keys() self.ops = ops - if self.ops.get('orderBy', sqlbuilder.NoDefault) is sqlbuilder.NoDefault: - self.ops['orderBy'] = sourceClass.sqlmeta.defaultOrder - orderBy = self.ops['orderBy'] + if ops.get('orderBy', sqlbuilder.NoDefault) is sqlbuilder.NoDefault: + ops['orderBy'] = sourceClass.sqlmeta.defaultOrder + orderBy = ops['orderBy'] if isinstance(orderBy, list) or isinstance(orderBy, tuple): orderBy = map(self._mungeOrderBy, orderBy) else: orderBy = self._mungeOrderBy(orderBy) - self.ops['dbOrderBy'] = orderBy + ops['dbOrderBy'] = orderBy if ops.has_key('connection') and ops['connection'] is None: del ops['connection'] + if ops.get('limit', None): + assert not ops.get('start', None) and not ops.get('end', None), \ + "'limit' cannot be used with 'start' or 'end'" + ops["start"] = 0 + ops["end"] = ops["limit"] def __repr__(self): return "<%s at %x>" % (self.__class__.__name__, id(self)) @@ -145,13 +150,13 @@ if self.ops.get('end', None) is not None \ and self.ops['end'] < end: end = self.ops['end'] - return self.clone(start=start, end=end) + return self.clone(limit=None, start=start, end=end) else: if value < 0: return list(iter(self))[value] else: start = self.ops.get('start', 0) + value - return list(self.clone(start=start, end=start+1))[0] + return list(self.clone(limit=None, start=start, end=start+1))[0] def __iter__(self): # @@: This could be optimized, using a simpler algorithm @@ -178,6 +183,7 @@ def count(self): """ Counting elements of current select results """ + assert not self.ops.get('limit'), "'limit' is meaningless with 'distinct'" assert not (self.ops.get('distinct') and (self.ops.get('start') or self.ops.get('end'))), \ "distinct-counting of sliced objects is not supported" Modified: home/phd/SQLObject/paramstyles/sqlobject/tests/test_select.py =================================================================== --- home/phd/SQLObject/paramstyles/sqlobject/tests/test_select.py 2007-04-17 16:31:40 UTC (rev 2554) +++ home/phd/SQLObject/paramstyles/sqlobject/tests/test_select.py 2007-04-17 16:33:44 UTC (rev 2555) @@ -1,9 +1,8 @@ from __future__ import generators # for enumerate from sqlobject import * from sqlobject.main import SQLObjectIntegrityError -from sqlobject.tests.dbtest import * -from sqlobject.tests.dbtest import setSQLiteConnectionFactory -from py.test import raises +from dbtest import * +from dbtest import setSQLiteConnectionFactory try: enumerate @@ -86,6 +85,12 @@ raises(SQLObjectIntegrityError, 'IterTest.selectBy(name="b").getOne()') raises(SQLObjectIntegrityError, 'IterTest.selectBy(name="b").getOne(None)') +def test_05_select_limit(): + setupIter() + assert len(list(IterTest.select(limit=2))) == 2 + raises(AssertionError, IterTest.select(limit=2).distinct) + raises(AssertionError, IterTest.select(limit=2).clone, start=1) + def test_selectBy(): setupClass(IterTest) a = IterTest(name='a') Modified: home/phd/SQLObject/paramstyles/sqlobject/versioning/__init__.py =================================================================== --- home/phd/SQLObject/paramstyles/sqlobject/versioning/__init__.py 2007-04-17 16:31:40 UTC (rev 2554) +++ home/phd/SQLObject/paramstyles/sqlobject/versioning/__init__.py 2007-04-17 16:33:44 UTC (rev 2555) @@ -12,7 +12,7 @@ self.masterClass.get(self.masterID).set(**values) def nextVersion(self): - version = self.select(AND(self.q.masterID == self.masterID, self.q.id > self.id), limit=1, orderBy=self.q.id) + version = self.select(AND(self.q.masterID == self.masterID, self.q.id > self.id), orderBy=self.q.id) if version.count(): return version[0] else: |