]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- Improved an error message which would occur if a query() were made
authorMike Bayer <mike_mp@zzzcomputing.com>
Mon, 17 Mar 2014 20:25:51 +0000 (16:25 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Mon, 17 Mar 2014 20:25:51 +0000 (16:25 -0400)
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.

doc/build/changelog/changelog_08.rst
lib/sqlalchemy/orm/query.py
test/orm/test_joins.py

index f861a3c6ccc9e9af8463fb084b1af6c0ecb8760d..08e44a0fdb9f343c61e69ca958b12e63b8c741d3 100644 (file)
 .. changelog::
     :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
index 81be0e63cd61bcdbf4b68c8c533ea5288b5d9273..0f5b8bf88a32ccc62276e9eb5962911d3df56ae5 100644 (file)
@@ -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(
index e0eb7c3e01d6cc7113a88530c3d15907dd81db9e..e820f3fc4c1f789f2430c17f346beeb29b71fd37 100644 (file)
@@ -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):