summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2008-08-05 20:15:28 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2008-08-05 20:15:28 +0000
commit4cd1902796546d5d2b2927c8e2afbcb00459341f (patch)
treeb4fd7dc33bdb6c55c2380720d5fb172c154aec0c
parent3c26d5700385ac2e72e01efe2531b126f4292eee (diff)
downloadsqlalchemy-4cd1902796546d5d2b2927c8e2afbcb00459341f.tar.gz
- 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.
-rw-r--r--CHANGES14
-rw-r--r--VERSION2
-rw-r--r--lib/sqlalchemy/orm/query.py8
-rw-r--r--test/orm/inheritance/query.py5
-rw-r--r--test/orm/inheritance/single.py4
-rw-r--r--test/orm/query.py15
6 files changed, 45 insertions, 3 deletions
diff --git a/CHANGES b/CHANGES
index 737844178..ed6c26f52 100644
--- 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 3f499c315..b9eb5bd6e 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.5.0beta3
+0.5.0beta4
diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py
index 605486203..43dde9fc0 100644
--- a/lib/sqlalchemy/orm/query.py
+++ b/lib/sqlalchemy/orm/query.py
@@ -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)
diff --git a/test/orm/inheritance/query.py b/test/orm/inheritance/query.py
index 08669bf59..0ce3b4fb7 100644
--- a/test/orm/inheritance/query.py
+++ b/test/orm/inheritance/query.py
@@ -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')]
diff --git a/test/orm/inheritance/single.py b/test/orm/inheritance/single.py
index 17497177e..ba2f930d0 100644
--- a/test/orm/inheritance/single.py
+++ b/test/orm/inheritance/single.py
@@ -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()
diff --git a/test/orm/query.py b/test/orm/query.py
index 6ee9bbd9d..30cb03ab8 100644
--- a/test/orm/query.py
+++ b/test/orm/query.py
@@ -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()