From: Mike Bayer Date: Tue, 1 Sep 2009 22:14:22 +0000 (+0000) Subject: - Fixed the error message for "could not find a FROM clause" X-Git-Tag: rel_0_6beta1~307 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=aa73243fdeabbbbe0390222a96de8454839b5cf3;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - Fixed the error message for "could not find a FROM clause" in query.join() which would fail to issue correctly if the query was against a pure SQL construct. [ticket:1522] --- diff --git a/CHANGES b/CHANGES index dfefd8c12b..6d680cfa80 100644 --- a/CHANGES +++ b/CHANGES @@ -437,6 +437,11 @@ CHANGES - Fixed incorrect exception raise in Weak/StrongIdentityMap.add() [ticket:1506] + + - Fixed the error message for "could not find a FROM clause" + in query.join() which would fail to issue correctly + if the query was against a pure SQL construct. + [ticket:1522] - Fixed a somewhat hypothetical issue which would result in the wrong primary key being calculated for a mapper diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index f09b594c0c..dfbe229e2e 100644 --- a/lib/sqlalchemy/orm/query.py +++ b/lib/sqlalchemy/orm/query.py @@ -1036,7 +1036,7 @@ class Query(object): if not clause: clause = left_selectable - if not clause: + if not clause and left_entity: for ent in self._entities: if ent.corresponds_to(left_entity): clause = ent.selectable diff --git a/test/orm/test_query.py b/test/orm/test_query.py index 8cb7ef969b..691e00aaeb 100644 --- a/test/orm/test_query.py +++ b/test/orm/test_query.py @@ -1214,6 +1214,12 @@ class JoinTest(QueryTest): result = sess.query(ualias).join((oalias1, ualias.orders), (oalias2, ualias.orders)).\ filter(or_(oalias1.user_id==9, oalias2.user_id==7)).all() eq_(result, [User(id=7,name=u'jack'), User(id=9,name=u'fred')]) + + def test_pure_expression_error(self): + sess = create_session() + + assert_raises_message(sa.exc.InvalidRequestError, "Could not find a FROM clause to join from", sess.query(users).join, addresses) + def test_orderby_arg_bug(self): sess = create_session()