diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2014-03-17 16:25:51 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2014-03-17 16:25:51 -0400 |
| commit | 9ec01ab35a6c0cfdae6ce8a5f84d5ccaf90a3c44 (patch) | |
| tree | 988f3a1097c4ae31944a6d41811b2be5c83fab61 | |
| parent | e2214a61e84c5c6d3f5fe6963d9827465474bd67 (diff) | |
| download | sqlalchemy-9ec01ab35a6c0cfdae6ce8a5f84d5ccaf90a3c44.tar.gz | |
- Improved an error message which would occur if a query() were made
against a non-selectable, such as a :func:`.literal_column`, and then
an attempt was made to use :meth:`.Query.join` such that the "left"
side would be determined as ``None`` and then fail. This condition
is now detected explicitly.
| -rw-r--r-- | doc/build/changelog/changelog_08.rst | 10 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/query.py | 6 | ||||
| -rw-r--r-- | test/orm/test_joins.py | 13 |
3 files changed, 29 insertions, 0 deletions
diff --git a/doc/build/changelog/changelog_08.rst b/doc/build/changelog/changelog_08.rst index f861a3c6c..08e44a0fd 100644 --- a/doc/build/changelog/changelog_08.rst +++ b/doc/build/changelog/changelog_08.rst @@ -12,6 +12,16 @@ :version: 0.8.6 .. change:: + :tags: bug, orm + :versions: 0.9.4 + + Improved an error message which would occur if a query() were made + against a non-selectable, such as a :func:`.literal_column`, and then + an attempt was made to use :meth:`.Query.join` such that the "left" + side would be determined as ``None`` and then fail. This condition + is now detected explicitly. + + .. change:: :tags: bug, sql :versions: 0.9.4 :tickets: 2977 diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index 81be0e63c..0f5b8bf88 100644 --- a/lib/sqlalchemy/orm/query.py +++ b/lib/sqlalchemy/orm/query.py @@ -1843,6 +1843,12 @@ class Query(object): elif self._entities: left = self._entities[0].entity_zero_or_selectable + if left is None: + raise sa_exc.InvalidRequestError( + "Don't know how to join from %s; please use " + "select_from() to establish the left " + "entity/selectable of this join" % self._entities[0]) + if left is right and \ not create_aliases: raise sa_exc.InvalidRequestError( diff --git a/test/orm/test_joins.py b/test/orm/test_joins.py index e0eb7c3e0..e820f3fc4 100644 --- a/test/orm/test_joins.py +++ b/test/orm/test_joins.py @@ -396,6 +396,19 @@ class JoinTest(QueryTest, AssertsCompiledSQL): "ON addresses.id = orders.address_id" ) + def test_left_is_none(self): + User = self.classes.User + Address = self.classes.Address + + sess = create_session() + + assert_raises_message( + sa_exc.InvalidRequestError, + "Don't know how to join from x; please use select_from() to " + "establish the left entity/selectable of this join", + sess.query(literal_column('x'), User).join, Address + ) + def test_join_on_synonym(self): class User(object): |
