from .. import util
from ..engine import result as _result
from ..sql import selectable
+from ..sql import util as sql_util
from ..sql.base import _generative
from ..sql.base import Generative
else:
return orm_util._getitem(self, index)
+ @_generative
+ def limit(self, limit):
+ self._statement = self._statement.limit(limit)
+
+ @_generative
+ def offset(self, offset):
+ self._statement = self._statement.offset(offset)
+
+ @_generative
def slice(self, start, stop):
"""Computes the "slice" represented by
the given indices and apply as LIMIT/OFFSET.
"""
- limit_clause, offset_clause = orm_util._make_slice(
+ limit_clause, offset_clause = sql_util._make_slice(
self._statement._limit_clause,
self._statement._offset_clause,
start,
stop,
)
+
self._statement = self._statement.limit(limit_clause).offset(
offset_clause
)
q.filter_by(id=7).all(),
)
+ def test_slice_access(self):
+ User, Address = self._user_address_fixture()
+ sess = create_session()
+ u1 = sess.get(User, 8)
+
+ eq_(u1.addresses.limit(1).one(), Address(id=2))
+
+ eq_(u1.addresses[0], Address(id=2))
+ eq_(u1.addresses[0:2], [Address(id=2), Address(id=3)])
+ eq_(u1.addresses[-1], Address(id=4))
+
def test_statement(self):
"""test that the .statement accessor returns the actual statement that
would render, without any _clones called."""