diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2008-08-05 20:15:28 +0000 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2008-08-05 20:15:28 +0000 |
| commit | 4cd1902796546d5d2b2927c8e2afbcb00459341f (patch) | |
| tree | b4fd7dc33bdb6c55c2380720d5fb172c154aec0c | |
| parent | 3c26d5700385ac2e72e01efe2531b126f4292eee (diff) | |
| download | sqlalchemy-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-- | CHANGES | 14 | ||||
| -rw-r--r-- | VERSION | 2 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/query.py | 8 | ||||
| -rw-r--r-- | test/orm/inheritance/query.py | 5 | ||||
| -rw-r--r-- | test/orm/inheritance/single.py | 4 | ||||
| -rw-r--r-- | test/orm/query.py | 15 |
6 files changed, 45 insertions, 3 deletions
@@ -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 @@ -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() |
