[pypy-svn] pypy default: Fixed CheckCursorRegistration test
ademan
commits-noreply at bitbucket.org
Sun Mar 6 01:47:18 CET 2011
Author: Daniel Roberts <Ademan555 at gmail.com>
Branch:
Changeset: r42433:4ccf4839a116
Date: 2011-03-05 16:40 -0800
http://bitbucket.org/pypy/pypy/changeset/4ccf4839a116/
Log: Fixed CheckCursorRegistration test
diff --git a/lib_pypy/_sqlite3.py b/lib_pypy/_sqlite3.py
--- a/lib_pypy/_sqlite3.py
+++ b/lib_pypy/_sqlite3.py
@@ -245,6 +245,8 @@
self._isolation_level = isolation_level
self.detect_types = detect_types
+ self.cursors = []
+
self.Error = Error
self.Warning = Warning
self.InterfaceError = InterfaceError
@@ -307,6 +309,12 @@
"The object was created in thread id %d and this is thread id %d",
self.thread_ident, thread_get_ident())
+ def _reset_cursors(self):
+ for cursor_ref in self.cursors:
+ cursor = cursor_ref()
+ if cursor:
+ cursor.reset = True
+
def cursor(self, factory=None):
self._check_thread()
self._check_closed()
@@ -421,6 +429,7 @@
raise self._get_exception(ret)
finally:
sqlite.sqlite3_finalize(statement)
+ self._reset_cursors()
def _check_closed(self):
if getattr(self, 'closed', True):
@@ -450,6 +459,7 @@
self.closed = True
ret = sqlite.sqlite3_close(self.db)
+ self._reset_cursors()
if ret != SQLITE_OK:
raise self._get_exception(ret)
@@ -629,6 +639,7 @@
raise TypeError
con._check_thread()
con._check_closed()
+ con.cursors.append(weakref.ref(self))
self.connection = con
self._description = None
self.arraysize = 1
@@ -636,6 +647,7 @@
self.row_factory = None
self.rowcount = -1
self.statement = None
+ self.reset = False
def _check_closed(self):
if not getattr(self, 'connection', None):
@@ -736,8 +748,17 @@
def __iter__(self):
return self.statement
+ def _check_reset(self):
+ if self.reset:
+ raise self.connection.InterfaceError("Cursor needed to be reset because "
+ "of commit/rollback and can "
+ "no longer be fetched from.")
+
+ # do all statements
def fetchone(self):
self._check_closed()
+ self._check_reset()
+
if self.statement is None:
return None
@@ -750,6 +771,7 @@
def fetchmany(self, size=None):
self._check_closed()
+ self._check_reset()
if self.statement is None:
return []
if size is None:
@@ -763,6 +785,7 @@
def fetchall(self):
self._check_closed()
+ self._check_reset()
if self.statement is None:
return []
return list(self.statement)
@@ -782,6 +805,7 @@
if self.statement:
self.statement.reset()
self.statement = None
+ self.connection.cursors.remove(weakref.ref(self))
self.connection = None
def setinputsizes(self, *args):
More information about the Pypy-commit
mailing list