]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- Calling query.get() against a column-based entity is
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 22 Apr 2011 22:32:37 +0000 (18:32 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 22 Apr 2011 22:32:37 +0000 (18:32 -0400)
invalid, this condition now raises a deprecation warning.
[ticket:2144]

CHANGES
lib/sqlalchemy/__init__.py
lib/sqlalchemy/orm/query.py
lib/sqlalchemy/sql/compiler.py
test/orm/test_query.py

diff --git a/CHANGES b/CHANGES
index ec6ebb38e024677f2dce3c48d889e432705f38ec..6c25ec7a4096eeb7cd866a950ee95ca06bccee92 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -3,6 +3,13 @@
 =======
 CHANGES
 =======
+0.6.8
+=====
+- orm
+  - Calling query.get() against a column-based entity is
+    invalid, this condition now raises a deprecation warning.
+    [ticket:2144]
+
 0.6.7
 =====
 - orm
@@ -60,6 +67,12 @@ CHANGES
     inside to the outside query if from_self()
     were used. [ticket:2130].
 
+  - It is an error to call query.get() when the
+    given entity is not a single, full class 
+    entity or mapper (i.e. a column).  This is
+    a deprecation warning in 0.6.8.  
+    [ticket:2144]
+
 - sql
   - Column.copy(), as used in table.tometadata(), copies the 
     'doc' attribute.  [ticket:2028]
index 8de20805fbdaf954e40d117b94714b70168643d6..ae887876261acf43d9ae4c7161a8ee8a0d11ea59 100644 (file)
@@ -115,6 +115,6 @@ from sqlalchemy.engine import create_engine, engine_from_config
 __all__ = sorted(name for name, obj in locals().items()
                  if not (name.startswith('_') or inspect.ismodule(obj)))
 
-__version__ = '0.6.7'
+__version__ = '0.6.8'
 
 del inspect, sys
index 7f3af5a023ece855a85dba8b771a18aab83d234b..f8b45cdb6594653e6f6eeb85e4878fdf3ca2ea44 100644 (file)
@@ -302,6 +302,18 @@ class Query(object):
                 )
         return self._mapper_zero()
 
+    def _only_full_mapper_zero(self, methname):
+        if len(self._entities) != 1:
+            raise sa_exc.InvalidRequestError(
+                    "%s() can only be used against "
+                    "a single mapped class." % methname)
+        entity = self._entity_zero()
+        if not hasattr(entity, 'primary_entity'):
+            util.warn("Calling %s() with a "
+                    "column-based entity is deprecated." % 
+                    methname)
+        return entity.entity_zero
+
     def _only_entity_zero(self, rationale=None):
         if len(self._entities) > 1:
             raise sa_exc.InvalidRequestError(
@@ -631,8 +643,7 @@ class Query(object):
         if hasattr(ident, '__composite_values__'):
             ident = ident.__composite_values__()
 
-        key = self._only_mapper_zero(
-                    "get() can only be used against a single mapped class."
+        key = self._only_full_mapper_zero("get"
                 ).identity_key_from_primary_key(ident)
         return self._get(key, ident)
 
index ed06e32c90d05b8e6eab3bb427bd0efb74ce4e40..a2ead6a4d42454446bb5f93c087bec0606eccde1 100644 (file)
@@ -875,7 +875,7 @@ class SQLCompiler(engine.Compiled):
         if colparams or not supports_default_values:
             text += " (%s)" % ', '.join([preparer.format_column(c[0])
                        for c in colparams])
-
+        
         if self.returning or insert_stmt._returning:
             self.returning = self.returning or insert_stmt._returning
             returning_clause = self.returning_clause(insert_stmt, self.returning)
index 8c30b8c8dc77b510c67ab3dc50b032e4972dd385..43a415fde61e951dc50824b286fceef85b1ef57c 100644 (file)
@@ -164,6 +164,13 @@ class GetTest(QueryTest):
         q = s.query(CompositePk)
         assert_raises(sa_exc.InvalidRequestError, q.get, (7, 10, 100))
 
+    def test_get_against_col(self):
+        User = self.classes.User
+
+        s = Session()
+        q = s.query(User.id)
+        assert_raises(sa_exc.SAWarning, q.get, (5, ))
+
     def test_get_null_pk(self):
         """test that a mapping which can have None in a 
         PK (i.e. map to an outerjoin) works with get()."""