As in DBAPI2.0 (except the fact rows are not tuples but
        lists so if you try to modify them, you will succeed instead of
        the correct behavior that would be that an exception would have
        been raised)
        Additionally every row returned by this class is addressable
        by column name besides the column position in the query.

def fetchmany(self, size = None):
        """
        As in DBAPI2.0 (except the fact rows are not tuples but
        lists so if you try to modify them, you will succeed instead of
        the correct behavior that would be that an exception would have
        been raised)
        Additionally every row returned by this class is addressable
        by column name besides the column position in the query.
        """
        try:
            if size is None:
                manyrows = self.__dbapi2_cursor.fetchmany()
            else:
                manyrows = self.__dbapi2_cursor.fetchmany(size)
        except Exception, e:
            self.__connection.reconnect(None, self.__log_reconnect)
            self.__dbapi2_cursor = self.__connection._get_raw_cursor()

            if size is None:
                manyrows = self.__dbapi2_cursor.fetchmany()
            else:
                manyrows = self.__dbapi2_cursor.fetchmany(size)

        if not manyrows:
            return manyrows
        else:
            return [self.row(self.__col2idx_map, dbapi2_row) for dbapi2_row in manyrows]