diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2020-09-21 20:17:04 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2020-09-21 20:17:04 -0400 |
| commit | 277c6ca679729b36b5d19c9a1b2949a672c50f46 (patch) | |
| tree | 1ec8def4b1e2535bd01fc1e31bf201565e307a11 | |
| parent | 73ab000007bd25ac86ca2081868615c6c4820531 (diff) | |
| download | sqlalchemy-277c6ca679729b36b5d19c9a1b2949a672c50f46.tar.gz | |
restore slice methods to dynamic query
in f0f08db5715e41cc08e57dbc76a85300b these got
lost, put them back and test
Change-Id: Id1962e1f5d6160fe222becec5a8e32ec6a40017a
| -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.""" |
