From 8cb8daaafef15ec9ae7bb58a3fc783b73278a1a1 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sun, 15 Jul 2007 15:40:09 +0000 Subject: [PATCH] - fixed "ambiguous column" result detection, when dupe col names exist in a result [ticket:657] --- CHANGES | 2 ++ lib/sqlalchemy/engine/base.py | 2 +- test/sql/query.py | 11 ++++++++++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index cdd08b9069..81f0ec33ec 100644 --- a/CHANGES +++ b/CHANGES @@ -65,6 +65,8 @@ - columns can be overridden in a reflected table with a "key" attribute different than the column's name, including for primary key columns [ticket:650] + - fixed "ambiguous column" result detection, when dupe col names exist + in a result [ticket:657] - some enhancements to "column targeting", the ability to match a column to a "corresponding" column in another selectable. this affects mostly ORM ability to map to complex joins diff --git a/lib/sqlalchemy/engine/base.py b/lib/sqlalchemy/engine/base.py index 99688a48fd..dc197eb190 100644 --- a/lib/sqlalchemy/engine/base.py +++ b/lib/sqlalchemy/engine/base.py @@ -885,7 +885,7 @@ class ResultProxy(object): if rec[0] is None: raise DBAPIError("None for metadata " + colname) if self.__props.setdefault(colname.lower(), rec) is not rec: - self.__props[colname.lower()] = (ResultProxy.AmbiguousColumn(colname), 0) + self.__props[colname.lower()] = (type, ResultProxy.AmbiguousColumn(colname), 0) self.__keys.append(colname) self.__props[i] = rec diff --git a/test/sql/query.py b/test/sql/query.py index bf78177709..91587bc0e1 100644 --- a/test/sql/query.py +++ b/test/sql/query.py @@ -253,7 +253,16 @@ class QueryTest(PersistTest): r = text("select * from query_users where user_id=2", engine=testbase.db).execute().fetchone() self.assert_(r.user_id == r['user_id'] == r[self.users.c.user_id] == 2) self.assert_(r.user_name == r['user_name'] == r[self.users.c.user_name] == 'jack') - + + def test_ambiguous_column(self): + self.users.insert().execute(user_id=1, user_name='john') + r = users.outerjoin(addresses).select().execute().fetchone() + try: + print r['user_id'] + assert False + except exceptions.InvalidRequestError, e: + assert str(e) == "Ambiguous column name 'user_id' in result set! try 'use_labels' option on select statement." + def test_keys(self): self.users.insert().execute(user_id=1, user_name='foo') r = self.users.select().execute().fetchone() -- 2.47.2