oracle: ReturningResultProxy should return collections.deque not list

Issue #2272 resolved
Former user created an issue

This error occures when commiting a new object with sequence/autoincrement in oracle:

... File "/home/gbach/ws_e/qls/run/pylib/SQLAlchemy-0.7b2/lib/sqlalchemy/orm/session.py", line 617, in commit self.transaction.commit() File "/home/gbach/ws_e/qls/run/pylib/SQLAlchemy-0.7b2/lib/sqlalchemy/orm/session.py", line 293, in commit self._prepare_impl() File "/home/gbach/ws_e/qls/run/pylib/SQLAlchemy-0.7b2/lib/sqlalchemy/orm/session.py", line 277, in _prepare_impl self.session.flush() File "/home/gbach/ws_e/qls/run/pylib/SQLAlchemy-0.7b2/lib/sqlalchemy/orm/session.py", line 1465, in flush self._flush(objects) File "/home/gbach/ws_e/qls/run/pylib/SQLAlchemy-0.7b2/lib/sqlalchemy/orm/session.py", line 1534, in _flush flush_context.execute() File "/home/gbach/ws_e/qls/run/pylib/SQLAlchemy-0.7b2/lib/sqlalchemy/orm/unitofwork.py", line 327, in execute rec.execute(self) File "/home/gbach/ws_e/qls/run/pylib/SQLAlchemy-0.7b2/lib/sqlalchemy/orm/unitofwork.py", line 469, in execute self.mapper._save_obj( File "/home/gbach/ws_e/qls/run/pylib/SQLAlchemy-0.7b2/lib/sqlalchemy/orm/mapper.py", line 1880, in _save_obj result = cached_connectionsconnection.\ File "/home/gbach/ws_e/qls/run/pylib/SQLAlchemy-0.7b2/lib/sqlalchemy/engine/base.py", line 1255, in execute return Connection.executorsc( File "/home/gbach/ws_e/qls/run/pylib/SQLAlchemy-0.7b2/lib/sqlalchemy/engine/base.py", line 1387, in _execute_clauseelement ret = self._execute_context( File "/home/gbach/ws_e/qls/run/pylib/SQLAlchemy-0.7b2/lib/sqlalchemy/engine/base.py", line 1523, in _execute_context context._fetch_implicit_returning(result) File "/home/gbach/ws_e/qls/run/pylib/SQLAlchemy-0.7b2/lib/sqlalchemy/engine/default.py", line 664, in _fetch_implicit_returning row = resultproxy.fetchone() File "/home/gbach/ws_e/qls/run/pylib/SQLAlchemy-0.7b2/lib/sqlalchemy/engine/base.py", line 2688, in fetchone row = self._fetchone_impl() File "/home/gbach/ws_e/qls/run/pylib/SQLAlchemy-0.7b2/lib/sqlalchemy/engine/base.py", line 2820, in _fetchone_impl return self.__rowbuffer.popleft() AttributeError: 'list' object has no attribute 'popleft'

==============

Suggested solution:

in file zxjdbc.py in ReturningResultProxy, replace method:

def _buffer_rows(self):
    return [self._returning_row](self._returning_row)

with def _buffer_rows(self): return collections.deque(self._returning_row)

(I am using 0.7b2, same bug is also in 0.7)

Sincerely, Gunter

Comments (5)

  1. Mike Bayer repo owner

    (assuming this is Jython, since zxjdbc can't be used otherwise....) I'm surprised the oracle/jython setup works (we don't have a test server for that combination right now). this is for 0.6.9 and 0.7.3, thanks for the fix !

  2. Log in to comment