oracle: ReturningResultProxy should return collections.deque not list
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)
-
repo owner -
repo owner - changed status to resolved
cefa4e9a6356c0bf6bde4f134ac172056ecf8f84 0.7 e3bea1b93583e694493eb54264207620bacefe3c 0.6
note I'm not able to test jython/oracle on this end so this patch has not been tested. If any issues please reopen here.
-
repo owner - changed status to open
- removed status
-
repo owner yup, the one bug I can't test, screwed it up. this doesn't apply to 0.6 which isn't using a deque. revised:
d02352bb8a0e2d01c5113b5769dd1f17a80dde7b 1144f1ac42e17812fd90cad2eac766ced5be1608
-
repo owner - removed milestone
Removing milestone: 0.7.3 (automated comment)
- Log in to comment
(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 !