]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- fixed bug in result proxy where anonymously generated
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 14 Feb 2008 18:22:47 +0000 (18:22 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 14 Feb 2008 18:22:47 +0000 (18:22 +0000)
column labels would not be accessible using their straight
string name

CHANGES
lib/sqlalchemy/sql/compiler.py
test/sql/query.py

diff --git a/CHANGES b/CHANGES
index afc3fedd4eea772032ec6b960e630cb705a142ff..210467b5acbe23834c426076553ad847bfeb4311 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -39,6 +39,10 @@ CHANGES
     - cast() accepts text('something') and other non-literal
       operands properly [ticket:962]
 
+    - fixed bug in result proxy where anonymously generated
+      column labels would not be accessible using their straight
+      string name
+      
     - Deferrable constraints can now be defined.
 
     - Added "autocommit=True" keyword argument to select() and
index e87d3d2fb4a3f90283395267240e73c2bf4b1337..3f32778d6e78304a3d68dc4a6dc25319193ec751 100644 (file)
@@ -236,7 +236,7 @@ class DefaultCompiler(engine.Compiled):
         labelname = self._truncated_identifier("colident", label.name)
         
         if result_map is not None:
-            result_map[labelname.lower()] = (label.name, (label, label.obj), label.obj.type)
+            result_map[labelname.lower()] = (label.name, (label, label.obj, labelname), label.obj.type)
             
         return " ".join([self.process(label.obj), self.operator_string(operators.as_), self.preparer.format_label(label, labelname)])
         
index 533f40fb5f5b29d1d768daf454fe1793f54922ab..2cc4ab0d02601200631ba5e85c98f1e69c4e9077 100644 (file)
@@ -129,15 +129,29 @@ class QueryTest(TestBase):
                 table.drop()
 
     def test_row_iteration(self):
-        users.insert().execute(user_id = 7, user_name = 'jack')
-        users.insert().execute(user_id = 8, user_name = 'ed')
-        users.insert().execute(user_id = 9, user_name = 'fred')
+        users.insert().execute(
+            {'user_id':7, 'user_name':'jack'},
+            {'user_id':8, 'user_name':'ed'},
+            {'user_id':9, 'user_name':'fred'},
+        )
         r = users.select().execute()
         l = []
         for row in r:
             l.append(row)
         self.assert_(len(l) == 3)
 
+    def test_anonymous_rows(self):
+        users.insert().execute(
+            {'user_id':7, 'user_name':'jack'},
+            {'user_id':8, 'user_name':'ed'},
+            {'user_id':9, 'user_name':'fred'},
+        )
+
+        sel = select([users.c.user_id]).where(users.c.user_name=='jack').as_scalar()
+        for row in select([sel + 1, sel + 3], bind=users.bind).execute():
+            assert row['anon_1'] == 8
+            assert row['anon_2'] == 10
+
     def test_row_comparison(self):
         users.insert().execute(user_id = 7, user_name = 'jack')
         rp = users.select().execute().fetchone()