From 13e1cf09c6cbff65e0bea41c8af6668c315b83d1 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sun, 15 Jul 2007 15:42:47 +0000 Subject: [PATCH] - bind test in query.orm - merged ambiguous colname fix from r2915 --- CHANGES | 2 ++ lib/sqlalchemy/engine/base.py | 2 +- test/orm/query.py | 3 +++ test/sql/query.py | 11 ++++++++++- 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index 229239fa42..9e19b5fd85 100644 --- a/CHANGES +++ b/CHANGES @@ -174,6 +174,8 @@ this is also mostly to help inheritance scenarios formulate the best choice of primary key columns. [ticket:185] - added 'bind' argument to Sequence.create()/drop(), ColumnDefault.execute() + - 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 6c23422a1f..100acd49a3 100644 --- a/lib/sqlalchemy/engine/base.py +++ b/lib/sqlalchemy/engine/base.py @@ -1131,7 +1131,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/orm/query.py b/test/orm/query.py index 286e31305d..43ba564e7c 100644 --- a/test/orm/query.py +++ b/test/orm/query.py @@ -123,6 +123,9 @@ class TextTest(QueryTest): assert [User(id=9)] == create_session().query(User).filter("name='fred'").filter("id=9").all() assert [User(id=9)] == create_session().query(User).filter("name='fred'").filter(users.c.id==9).all() + + def test_binds(self): + assert [User(id=8), User(id=9)] == create_session().query(User).filter("id in (:id1, :id2)").params(id1=8, id2=9).all() class FilterTest(QueryTest): def test_basic(self): diff --git a/test/sql/query.py b/test/sql/query.py index 77cf91d434..6e4a76d111 100644 --- a/test/sql/query.py +++ b/test/sql/query.py @@ -238,7 +238,16 @@ class QueryTest(PersistTest): r = text("select * from query_users where user_id=2", bind=testbase.db).execute().fetchone() self.assert_(r.user_id == r['user_id'] == r[users.c.user_id] == 2) self.assert_(r.user_name == r['user_name'] == r[users.c.user_name] == 'jack') - + + def test_ambiguous_column(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): users.insert().execute(user_id=1, user_name='foo') r = users.select().execute().fetchone() -- 2.47.3