[python-sybase] Connection unusable after an exception has been
raised
Skip Montanaro
skip at pobox.com
Wed, 5 Jan 2005 10:33:55 -0600
Perhaps I spoke a bit too soon...
Dave> There are two possible ways to attempt a fix.
Dave> 1) Construct the Fetcher in the FETCHING state. This will mean
Dave> that any exception raised in the ct_command() or the ct_send()
Dave> function will result in ct_cancel(CS_CANCEL_ALL) when the
Dave> Fetcher is deleted.
Dave> In _FetchLazy.__init__() change:
Dave> self._state = _LAZY_IDLE
Dave> to
Dave> self._state = _LAZY_FETCHING
Skip> This didn't work.
Dave> 2) Set the Fetcher state to FETCHING immediately before calling
Dave> ct_send() in _FetchLazy.start().
Dave> In _FetchLazy.start() change:
Dave> status = self._cmd.ct_send()
Dave> to
Dave> self._set_state(_LAZY_FETCHING)
Dave> status = self._cmd.ct_send()
Skip> This did...
Solution #2 worked on Solaris/Intel, but not on Linux (neither did solution
#1). Cursors created after an error still give a ct_send() error with this
message when their execute() method is called:
ct_send(): user api layer: external error: This routine cannot be called
because another command structure has results pending.
Skip