From: Mike Bayer Date: Wed, 10 Dec 2008 20:28:54 +0000 (+0000) Subject: - first() works as expected with Query.from_statement(). X-Git-Tag: rel_0_5_0~121 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4d698a28a26599dd182a93dcd507a97ab15c4cae;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - first() works as expected with Query.from_statement(). --- diff --git a/CHANGES b/CHANGES index f60705ea70..cc60fec7af 100644 --- a/CHANGES +++ b/CHANGES @@ -37,7 +37,9 @@ CHANGES - Query.select_from(), from_statement() ensure that the given argument is a FromClause, or Text/Select/Union, respectively. - + + - first() works as expected with Query.from_statement(). + - Fixed bug introduced in 0.5rc4 involving eager loading not functioning for properties which were added to a mapper post-compile using diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index 291837dfa2..1922c5ac6c 100644 --- a/lib/sqlalchemy/orm/query.py +++ b/lib/sqlalchemy/orm/query.py @@ -1035,13 +1035,13 @@ class Query(object): """ if self._statement: - return list(self)[0] + ret = list(self)[0:1] else: ret = list(self[0:1]) - if len(ret) > 0: - return ret[0] - else: - return None + if len(ret) > 0: + return ret[0] + else: + return None def one(self): """Return exactly one result or raise an exception. diff --git a/test/orm/query.py b/test/orm/query.py index 6b74b94175..5d60335dd5 100644 --- a/test/orm/query.py +++ b/test/orm/query.py @@ -574,21 +574,6 @@ class SliceTest(QueryTest): ]) -class TextTest(QueryTest): - def test_fulltext(self): - assert [User(id=7), User(id=8), User(id=9),User(id=10)] == create_session().query(User).from_statement("select * from users").all() - - def test_fragment(self): - assert [User(id=8), User(id=9)] == create_session().query(User).filter("id in (8, 9)").all() - - assert [User(id=9)] == create_session().query(User).filter("name='fred'").filter("id=9").all() - - assert [User(id=9)] == create_session().query(User).filter("name='fred'").filter(User.id==9).all() - - def test_binds(self): - assert [User(id=8), User(id=9)] == create_session().query(User).filter("id in (:id1, :id2)").params(id1=8, id2=9).all() - - class FooTest(FixtureTest): keep_data = True @@ -906,7 +891,10 @@ class YieldTest(QueryTest): class TextTest(QueryTest): def test_fulltext(self): - assert [User(id=7), User(id=8), User(id=9),User(id=10)] == create_session().query(User).from_statement("select * from users").all() + assert [User(id=7), User(id=8), User(id=9),User(id=10)] == create_session().query(User).from_statement("select * from users order by id").all() + + assert User(id=7) == create_session().query(User).from_statement("select * from users order by id").first() + assert None == create_session().query(User).from_statement("select * from users where name='nonexistent'").first() def test_fragment(self): assert [User(id=8), User(id=9)] == create_session().query(User).filter("id in (8, 9)").all()