]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- bind test in query.orm
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 15 Jul 2007 15:42:47 +0000 (15:42 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 15 Jul 2007 15:42:47 +0000 (15:42 +0000)
- merged ambiguous colname fix from r2915

CHANGES
lib/sqlalchemy/engine/base.py
test/orm/query.py
test/sql/query.py

diff --git a/CHANGES b/CHANGES
index 229239fa42f9c1ba118bbc7b1df02711d70d0624..9e19b5fd85c114a360c359d43ea49c32baa96448 100644 (file)
--- a/CHANGES
+++ b/CHANGES
       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
index 6c23422a1f37e3f3580dcf25482fe8b32a700d7b..100acd49a38645007bc57772eb6db5f180b53577 100644 (file)
@@ -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
 
index 286e31305ddcafadf9c363ac6c282ecb14063d74..43ba564e7c6cac2774e883c7b0004f5e942b3a4e 100644 (file)
@@ -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):
index 77cf91d434cfe8850b566eae737f7f8bf6d4d4a7..6e4a76d111660dd8004d6c9d606bffa50d0f8fce 100644 (file)
@@ -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()