]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- added array slice support to row[<index>] [ticket:686]
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 26 Jul 2007 17:45:25 +0000 (17:45 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 26 Jul 2007 17:45:25 +0000 (17:45 +0000)
CHANGES
lib/sqlalchemy/engine/base.py
test/sql/query.py

diff --git a/CHANGES b/CHANGES
index b9bc3a8ef968421e6d59196e272a1f05c16e4b6d..981ce14629a6678e4fc6dbbee0d424e218611424 100644 (file)
--- a/CHANGES
+++ b/CHANGES
     within expressions
   - added select().with_prefix('foo') allowing any set of keywords to be
     placed before the columns clause of the SELECT [ticket:504]
+  - added array slice support to row[<index>] [ticket:686]
   - result sets make a better attempt at matching the DBAPI types present
     in cursor.description to the TypeEngine objects defined by the dialect,
     which are then used for result-processing. Note this only takes effect 
index 01ae958599e1cd5e6bcf673340a20ddf6fbcb4d9..4d6cbececdcb16c0dfa509e6623b1bc68cdd0fac 100644 (file)
@@ -1409,7 +1409,11 @@ class RowProxy(object):
         return self.__parent._has_key(self.__row, key)
 
     def __getitem__(self, key):
-        return self.__parent._get_col(self.__row, key)
+        if isinstance(key, slice):
+            indices = key.indices(len(self))
+            return tuple([self.__parent._get_col(self.__row, i) for i in range(*indices)])
+        else:
+            return self.__parent._get_col(self.__row, key)
 
     def __getattr__(self, name):
         try:
index 11b7beffb2a4ada5b8f3da6e1a1ff0be805aa392..487db63f90dbaaca965d865fa65438f8d26dc5c6 100644 (file)
@@ -225,6 +225,8 @@ class QueryTest(PersistTest):
     def test_column_accessor(self):
         users.insert().execute(user_id=1, user_name='john')
         users.insert().execute(user_id=2, user_name='jack')
+        addresses.insert().execute(address_id=1, user_id=2, address='foo@bar.com')
+        
         r = users.select(users.c.user_id==2).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')
@@ -233,6 +235,12 @@ class QueryTest(PersistTest):
         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')
     
+        # test slices
+        r = text("select * from query_addresses", bind=testbase.db).execute().fetchone()
+        self.assert_(r[0:1] == (1,))
+        self.assert_(r[1:] == (2, 'foo@bar.com'))
+        self.assert_(r[:-1] == (1, 2))
+        
     def test_ambiguous_column(self):
         users.insert().execute(user_id=1, user_name='john')
         r = users.outerjoin(addresses).select().execute().fetchone()