]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- tighten the inspection in _ColumnEntity to reduce unnecessary
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 3 Jan 2015 17:10:17 +0000 (12:10 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 3 Jan 2015 17:10:17 +0000 (12:10 -0500)
isinstance() calls, express intent more clearly

lib/sqlalchemy/orm/query.py

index d2bdf5a00cc640032fb6c19f75190b70ae1afa8b..7302574e62a0beafc514d5cf828c144a790ee2a6 100644 (file)
@@ -3542,26 +3542,26 @@ class _ColumnEntity(_QueryEntity):
         )):
             self._label_name = column.key
             column = column._query_clause_element()
-        else:
-            self._label_name = getattr(column, 'key', None)
-
-        if not isinstance(column, expression.ColumnElement) and \
-                hasattr(column, '_select_iterable'):
-            for c in column._select_iterable:
-                if c is column:
-                    break
-                _ColumnEntity(query, c, namespace=column)
-            else:
+            if isinstance(column, Bundle):
+                _BundleEntity(query, column)
                 return
-        elif isinstance(column, Bundle):
-            _BundleEntity(query, column)
-            return
+        elif not isinstance(column, sql.ColumnElement):
+            if hasattr(column, '_select_iterable'):
+                # break out an object like Table into
+                # individual columns
+                for c in column._select_iterable:
+                    if c is column:
+                        break
+                    _ColumnEntity(query, c, namespace=column)
+                else:
+                    return
 
-        if not isinstance(column, sql.ColumnElement):
             raise sa_exc.InvalidRequestError(
                 "SQL expression, column, or mapped entity "
                 "expected - got '%r'" % (column, )
             )
+        else:
+            self._label_name = getattr(column, 'key', None)
 
         self.type = type_ = column.type
         if type_.hashable: