diff options
| author | mike bayer <mike_mp@zzzcomputing.com> | 2020-09-22 01:54:52 +0000 |
|---|---|---|
| committer | Gerrit Code Review <gerrit@bbpush.zzzcomputing.com> | 2020-09-22 01:54:52 +0000 |
| commit | e973fd5d5712b7212624b329015633fecfd1a25c (patch) | |
| tree | 95bdfdc3d25f8e05df3f36908437ba6624b00c13 | |
| parent | 0d1efeec475621b5c2c2aca0632b02edef54c1a6 (diff) | |
| parent | 277c6ca679729b36b5d19c9a1b2949a672c50f46 (diff) | |
| download | sqlalchemy-e973fd5d5712b7212624b329015633fecfd1a25c.tar.gz | |
Merge "restore slice methods to dynamic query"
| -rw-r--r-- | lib/sqlalchemy/orm/dynamic.py | 13 | ||||
| -rw-r--r-- | test/orm/test_dynamic.py | 11 |
2 files changed, 23 insertions, 1 deletions
diff --git a/lib/sqlalchemy/orm/dynamic.py b/lib/sqlalchemy/orm/dynamic.py index 41d0fabd2..af67b4772 100644 --- a/lib/sqlalchemy/orm/dynamic.py +++ b/lib/sqlalchemy/orm/dynamic.py @@ -27,6 +27,7 @@ from .. import sql 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 @@ -511,18 +512,28 @@ class AppenderQuery(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 ) diff --git a/test/orm/test_dynamic.py b/test/orm/test_dynamic.py index 27883a5de..836d9f88c 100644 --- a/test/orm/test_dynamic.py +++ b/test/orm/test_dynamic.py @@ -149,6 +149,17 @@ class DynamicTest(_DynamicFixture, _fixtures.FixtureTest, AssertsCompiledSQL): 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.""" |
