]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- The RowTuple object returned by Query(*cols) now
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 5 Aug 2008 20:15:28 +0000 (20:15 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 5 Aug 2008 20:15:28 +0000 (20:15 +0000)
features keynames which prefer mapped attribute
names over column keys, column keys over
column names, i.e.
Query(Class.foo, Class.bar) will have names
"foo" and "bar" even if those are not the names
of the underlying Column objects.  Direct
Column objects such as Query(table.c.col) will
return the "key" attribute of the Column.

CHANGES
VERSION
lib/sqlalchemy/orm/query.py
test/orm/inheritance/query.py
test/orm/inheritance/single.py
test/orm/query.py

diff --git a/CHANGES b/CHANGES
index 73784417846e7259f097334ddba8f3e0f57e52e7..ed6c26f525990577627f199d0430e091fcb46333 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -3,6 +3,20 @@
 =======
 CHANGES
 =======
+0.5beta4
+========
+
+- orm
+    - The RowTuple object returned by Query(*cols) now
+      features keynames which prefer mapped attribute 
+      names over column keys, column keys over 
+      column names, i.e. 
+      Query(Class.foo, Class.bar) will have names
+      "foo" and "bar" even if those are not the names
+      of the underlying Column objects.  Direct 
+      Column objects such as Query(table.c.col) will
+      return the "key" attribute of the Column.
+
 0.5beta3
 ========
     - 0.5beta3 includes all bugfixes listed under release
diff --git a/VERSION b/VERSION
index 3f499c3151a3f027de60aaefad3575a879390a34..b9eb5bd6e8bacbc4fcfabe2660f31efe3dbb563a 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.5.0beta3
+0.5.0beta4
index 605486203d36a9b994359874dcf1e05e3c966385..43dde9fc053bdd3841e0408bea0faa3251679640 100644 (file)
@@ -1611,11 +1611,15 @@ class _ColumnEntity(_QueryEntity):
 
         if isinstance(column, basestring):
             column = sql.literal_column(column)
+            self._result_label = column.name
         elif isinstance(column, (attributes.QueryableAttribute, mapper.Mapper._CompileOnAttr)):
+            self._result_label = column.impl.key
             column = column.__clause_element__()
         elif not isinstance(column, sql.ColumnElement):
             raise sa_exc.InvalidRequestError("Invalid column expression '%r'" % column)
-
+        else:
+            self._result_label = getattr(column, 'key', None)
+            
         if not hasattr(column, '_label'):
             column = column.label(None)
 
@@ -1656,7 +1660,7 @@ class _ColumnEntity(_QueryEntity):
         def proc(context, row):
             return row[column]
             
-        return (proc, getattr(column, 'name', None))
+        return (proc, self._result_label)
 
     def setup_context(self, query, context):
         column = self._resolve_expr_against_query_aliases(query, self.column, context)
index 08669bf590ff89352cc146015cef1c90e4fc8a97..0ce3b4fb78a305e441a7216de2004303134ec9aa 100644 (file)
@@ -538,6 +538,11 @@ def make_test(select_type):
             )
 
 
+            row = sess.query(Engineer.name, Engineer.primary_language).filter(Engineer.name=='dilbert').first()
+            assert row.name == 'dilbert'
+            assert row.primary_language == 'java'
+            
+
             self.assertEquals(
                 sess.query(Engineer.name, Engineer.primary_language).all(),
                 [(u'dilbert', u'java'), (u'wally', u'c++'), (u'vlad', u'cobol')]
index 17497177e4978702c6e5ea5eb882a80c6e8e1f36..ba2f930d0af99b745e2bc0b1914f8d17ded7e53a 100644 (file)
@@ -53,6 +53,10 @@ class SingleInheritanceTest(MappedTest):
         session.expire(m1, ['manager_data'])
         self.assertEquals(m1.manager_data, "knows how to manage things")
 
+        row = session.query(Engineer.name, Engineer.employee_id).filter(Engineer.name=='Kurt').first()
+        assert row.name == 'Kurt'
+        assert row.employee_id == e1.employee_id
+
     @testing.resolve_artifact_names
     def test_multi_qualification(self):
         session = create_session()
index 6ee9bbd9d89e29c4a99c1385bc887215e30c6e06..30cb03ab86c1fc97f0cb7bb8d56ad7f3586be6cf 100644 (file)
@@ -58,6 +58,21 @@ class UnicodeSchemaTest(QueryTest):
         mapper(User, uni_users)
         assert User(id=7) == create_session(bind=testing.db).query(User).get(7)
 
+class RowTupleTest(QueryTest):
+    keep_mappers = False
+
+    def setup_mappers(self):
+        pass
+
+    def test_custom_names(self):
+        mapper(User, users, properties={
+            'uname':users.c.name
+        })
+        
+        row  = create_session().query(User.id, User.uname).filter(User.id==7).first()
+        assert row.id == 7
+        assert row.uname == 'jack'
+
 class GetTest(QueryTest):
     def test_get(self):
         s = create_session()