]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Reworked RowProxy to restore column order preservation and to remove some dictionary...
authorRobert Leftwich <rtl@pobox.com>
Sun, 29 Jan 2006 12:30:32 +0000 (12:30 +0000)
committerRobert Leftwich <rtl@pobox.com>
Sun, 29 Jan 2006 12:30:32 +0000 (12:30 +0000)
lib/sqlalchemy/engine.py
test/query.py

index 3a3af2ce93236746cd0116dc5cf8b35f256e864e..445ddae2424bd3fe84ac841042f9ed7eedd74fb7 100644 (file)
@@ -688,36 +688,23 @@ class RowProxy:
         """RowProxy objects are constructed by ResultProxy objects."""
         self.__parent = parent
         self.__row = row
-    def keys(self):
-        return self.__parent.keys
     def __iter__(self):
-        for k in self.keys():
-            yield k
+        for i in range(0, len(self.__row)):
+            yield self.__parent._get_col(self.__row, i)
     def __eq__(self, other):
         return (other is self) or (other == tuple([self.__parent._get_col(self.__row, key) for key in range(0, len(self.__row))]))
     def __repr__(self):
-        return repr(dict(self.iteritems()))
+        return repr(tuple([self.__parent._get_col(self.__row, key) for key in range(0, len(self.__row))]))
     def __getitem__(self, key):
         return self.__parent._get_col(self.__row, key)
     def __getattr__(self, name):
         try:
-            return self[name]
+            return self.__parent._get_col(self.__row, name)
         except:
             raise AttributeError
-    def iteritems(self):
-        for k in self:
-            yield (k, self[k])
-    def iterkeys(self):
-        return self.__iter__()
-    def itervalues(self):
-        for _, v in self.iteritems():
-            yield v
-    def values(self):
-        return [v for _, v in self.iteritems()]
-    def items(self):
-        return list(self.iteritems())
-    def __len__(self):
-        return len(self.keys())
-
-
-
+    def keys(self):
+        return self.__parent.keys
+    def values(self): 
+       return list(self)
+    def __len__(self): 
+       return len(self.__row)
index cae0c306939e15253e955a40e1bfddba50f626a0..e89d40b1ef9d5e3556418399904e15d9ddf637a1 100644 (file)
@@ -108,15 +108,37 @@ class QueryTest(PersistTest):
         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_column_dict_behaviours(self):
+    def test_keys(self):
         self.users.insert().execute(user_id=1, user_name='foo')
         r = self.users.select().execute().fetchone()
         self.assertEqual(r.keys(), ['user_id', 'user_name'])
-        self.assertEqual(r.items(), [('user_id', 1), ('user_name', 'foo')])
-        self.assertEqual(r.values(), [1, 'foo'])
-        self.assertEqual(zip(r.itervalues(), r.iterkeys()), zip(r.values(), r.keys()))
-        self.assertEqual(repr(r), "{'user_name': u'foo', 'user_id': 1}")
+
+    def test_len(self):
+        self.users.insert().execute(user_id=1, user_name='foo')
+        r = self.users.select().execute().fetchone()
+        self.assertEqual(len(r), 2)
+        r = db.execute('select user_name, user_id from query_users', {}).fetchone()
         self.assertEqual(len(r), 2)
+        r = db.execute('select user_name from query_users', {}).fetchone()
+        self.assertEqual(len(r), 1)
+        
+    def test_column_order_with_simple_query(self):
+        # should return values in column definition order
+        self.users.insert().execute(user_id=1, user_name='foo')
+        r = self.users.select(self.users.c.user_id==1).execute().fetchone()
+        self.assertEqual(r[0], 1)
+        self.assertEqual(r[1], 'foo')
+        self.assertEqual(r.keys(), ['user_id', 'user_name'])
+        self.assertEqual(r.values(), [1, 'foo'])
+        
+    def test_column_order_with_text_query(self):
+        # should return values in query order
+        self.users.insert().execute(user_id=1, user_name='foo')
+        r = db.execute('select user_name, user_id from query_users', {}).fetchone()
+        self.assertEqual(r[0], 'foo')
+        self.assertEqual(r[1], 1)
+        self.assertEqual(r.keys(), ['user_name', 'user_id'])
+        self.assertEqual(r.values(), ['foo', 1])
         
     def test_column_accessor_shadow(self):
         shadowed = Table('test_shadowed', db,