From: Mike Bayer Date: Wed, 7 Mar 2007 01:31:41 +0000 (+0000) Subject: - options() method on SelectResults now implemented "generatively" X-Git-Tag: rel_0_3_6~36 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=231acabf72e092c8573a6a9b9a8e4acc20b79812;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - options() method on SelectResults now implemented "generatively" like the rest of the SelectResults methods [ticket:472] --- diff --git a/CHANGES b/CHANGES index e3fc2832f0..f263bcdd19 100644 --- a/CHANGES +++ b/CHANGES @@ -41,6 +41,9 @@ (since its not polymorphic) which breaks in bi-directional relationships (i.e. C has its A, but A's backref will lazyload it as a different instance of type "B") [ticket:500] +- extensions: + - options() method on SelectResults now implemented "generatively" + like the rest of the SelectResults methods [ticket:472] 0.3.5 - sql: diff --git a/lib/sqlalchemy/ext/selectresults.py b/lib/sqlalchemy/ext/selectresults.py index d65a02f01d..f498e26b06 100644 --- a/lib/sqlalchemy/ext/selectresults.py +++ b/lib/sqlalchemy/ext/selectresults.py @@ -33,12 +33,14 @@ class SelectResults(object): self._joinpoint = joinpoint or (self._query.table, self._query.mapper) def options(self,*args, **kwargs): - """Transform the original mapper query form to an alternate form + """Apply mapper options to the underlying query. See also ``Query.options``. """ - self._query = self._query.options(*args, **kwargs) + new = self.clone() + new._query = new._query.options(*args, **kwargs) + return new def count(self): """Execute the SQL ``count()`` function against the ``SelectResults`` criterion.""" diff --git a/test/ext/selectresults.py b/test/ext/selectresults.py index ebb0e69e2d..ca052ad3b2 100644 --- a/test/ext/selectresults.py +++ b/test/ext/selectresults.py @@ -70,6 +70,14 @@ class SelectResultsTest(PersistTest): assert self.res.filter(Foo.c.bar < 30).count() == 30 res2 = self.res.filter(Foo.c.bar < 30).filter(Foo.c.bar > 10) assert res2.count() == 19 + + def test_options(self): + class ext1(MapperExtension): + def populate_instance(self, mapper, selectcontext, row, instance, identitykey, isnew): + instance.TEST = "hello world" + return EXT_PASS + objectstore.clear() + assert self.res.options(extension(ext1()))[0].TEST == "hello world" def test_order_by(self): assert self.res.order_by([Foo.c.bar])[0].bar == 0