[pypy-commit] pypy default: mangle some more implementation-specific names in _sqlite3.Cursor

bdkearns noreply at buildbot.pypy.org
Wed Mar 6 06:00:47 CET 2013


Author: Brian Kearns <bdkearns at gmail.com>
Branch: 
Changeset: r62116:b027d4428675
Date: 2013-03-05 23:47 -0500
http://bitbucket.org/pypy/pypy/changeset/b027d4428675/

Log:	mangle some more implementation-specific names in _sqlite3.Cursor

diff --git a/lib_pypy/_sqlite3.py b/lib_pypy/_sqlite3.py
--- a/lib_pypy/_sqlite3.py
+++ b/lib_pypy/_sqlite3.py
@@ -307,11 +307,13 @@
 
 class Connection(object):
     __initialized = False
+    _db = None
 
     def __init__(self, database, timeout=5.0, detect_types=0, isolation_level="",
                  check_same_thread=True, factory=None, cached_statements=100):
         self.__initialized = True
         self._db = c_void_p()
+
         if sqlite.sqlite3_open(database, byref(self._db)) != SQLITE_OK:
             raise OperationalError("Could not open database")
         if timeout is not None:
@@ -349,9 +351,8 @@
         self.NotSupportedError = NotSupportedError
 
     def __del__(self):
-        if self.__initialized:
-            if self._db:
-                sqlite.sqlite3_close(self._db)
+        if self._db:
+            sqlite.sqlite3_close(self._db)
 
     def close(self):
         self._check_thread()
@@ -523,7 +524,7 @@
         for cursor_ref in self._cursors:
             cursor = cursor_ref()
             if cursor:
-                cursor.reset = True
+                cursor._reset = True
 
         statement = c_void_p()
         next_char = c_char_p()
@@ -744,100 +745,103 @@
 
     def __enter__(self):
         self.cursor._check_closed()
-        if self.cursor.locked:
+        if self.cursor._locked:
             raise ProgrammingError("Recursive use of cursors not allowed.")
-        self.cursor.locked = True
+        self.cursor._locked = True
 
     def __exit__(self, *args):
-        self.cursor.locked = False
+        self.cursor._locked = False
 
 
 class Cursor(object):
     __initialized = False
+    __connection = None
+    __statement = None
 
     def __init__(self, con):
+        self.__initialized = True
+        self.__connection = con
+
         if not isinstance(con, Connection):
             raise TypeError
         con._check_thread()
         con._check_closed()
         con._cursors.append(weakref.ref(self))
-        self.connection = con
-        self._description = None
+
         self.arraysize = 1
         self.row_factory = None
-        self.rowcount = -1
-        self.statement = None
-        self.reset = False
-        self.locked = False
-        self.closed = False
-        self.__initialized = True
+        self._locked = False
+        self._reset = False
+        self.__closed = False
+        self.__description = None
+        self.__rowcount = -1
 
     def __del__(self):
-        if self.__initialized:
-            if self.statement:
-                self.statement.reset()
+        if self.__connection:
             try:
-                self.connection._cursors.remove(weakref.ref(self))
+                self.__connection._cursors.remove(weakref.ref(self))
             except ValueError:
                 pass
+        if self.__statement:
+            self.__statement.reset()
 
     def close(self):
-        self.connection._check_thread()
-        self.connection._check_closed()
-        if self.statement:
-            self.statement.reset()
-            self.statement = None
-        self.closed = True
+        self.__connection._check_thread()
+        self.__connection._check_closed()
+        if self.__statement:
+            self.__statement.reset()
+            self.__statement = None
+        self.__closed = True
 
     def _check_closed(self):
         if not self.__initialized:
             raise ProgrammingError("Base Cursor.__init__ not called.")
-        if self.closed:
+        if self.__closed:
             raise ProgrammingError("Cannot operate on a closed cursor.")
-        self.connection._check_thread()
-        self.connection._check_closed()
+        self.__connection._check_thread()
+        self.__connection._check_closed()
 
     def execute(self, sql, params=None):
         if type(sql) is unicode:
             sql = sql.encode("utf-8")
 
         with _CursorLock(self):
-            self._description = None
-            self.reset = False
-            self.statement = self.connection._statement_cache.get(
+            self.__description = None
+            self._reset = False
+            self.__statement = self.__connection._statement_cache.get(
                 sql, self.row_factory)
 
-            if self.connection._isolation_level is not None:
-                if self.statement.kind == _DDL:
-                    if self.connection._in_transaction:
-                        self.connection.commit()
-                elif self.statement.kind == _DML:
-                    if not self.connection._in_transaction:
-                        self.connection._begin()
+            if self.__connection._isolation_level is not None:
+                if self.__statement.kind == _DDL:
+                    if self.__connection._in_transaction:
+                        self.__connection.commit()
+                elif self.__statement.kind == _DML:
+                    if not self.__connection._in_transaction:
+                        self.__connection._begin()
 
-            self.statement.set_params(params)
+            self.__statement.set_params(params)
 
             # Actually execute the SQL statement
-            ret = sqlite.sqlite3_step(self.statement.statement)
+            ret = sqlite.sqlite3_step(self.__statement.statement)
             if ret not in (SQLITE_DONE, SQLITE_ROW):
-                self.statement.reset()
-                self.connection._in_transaction = \
-                        not sqlite.sqlite3_get_autocommit(self.connection._db)
-                raise self.connection._get_exception(ret)
+                self.__statement.reset()
+                self.__connection._in_transaction = \
+                        not sqlite.sqlite3_get_autocommit(self.__connection._db)
+                raise self.__connection._get_exception(ret)
 
-            if self.statement.kind == _DML:
-                self.statement.reset()
+            if self.__statement.kind == _DML:
+                self.__statement.reset()
 
-            if self.statement.kind == _DQL and ret == SQLITE_ROW:
-                self.statement._build_row_cast_map()
-                self.statement._readahead(self)
+            if self.__statement.kind == _DQL and ret == SQLITE_ROW:
+                self.__statement._build_row_cast_map()
+                self.__statement._readahead(self)
             else:
-                self.statement.item = None
-                self.statement.exhausted = True
+                self.__statement.item = None
+                self.__statement.exhausted = True
 
-            self.rowcount = -1
-            if self.statement.kind == _DML:
-                self.rowcount = sqlite.sqlite3_changes(self.connection._db)
+            self.__rowcount = -1
+            if self.__statement.kind == _DML:
+                self.__rowcount = sqlite.sqlite3_changes(self.__connection._db)
 
         return self
 
@@ -846,42 +850,42 @@
             sql = sql.encode("utf-8")
 
         with _CursorLock(self):
-            self._description = None
-            self.reset = False
-            self.statement = self.connection._statement_cache.get(
+            self.__description = None
+            self._reset = False
+            self.__statement = self.__connection._statement_cache.get(
                 sql, self.row_factory)
 
-            if self.statement.kind == _DML:
-                if self.connection._isolation_level is not None:
-                    if not self.connection._in_transaction:
-                        self.connection._begin()
+            if self.__statement.kind == _DML:
+                if self.__connection._isolation_level is not None:
+                    if not self.__connection._in_transaction:
+                        self.__connection._begin()
             else:
                 raise ProgrammingError("executemany is only for DML statements")
 
-            self.rowcount = 0
+            self.__rowcount = 0
             for params in many_params:
-                self.statement.set_params(params)
-                ret = sqlite.sqlite3_step(self.statement.statement)
+                self.__statement.set_params(params)
+                ret = sqlite.sqlite3_step(self.__statement.statement)
                 if ret != SQLITE_DONE:
-                    raise self.connection._get_exception(ret)
-                self.rowcount += sqlite.sqlite3_changes(self.connection._db)
+                    raise self.__connection._get_exception(ret)
+                self.__rowcount += sqlite.sqlite3_changes(self.__connection._db)
 
         return self
 
     def executescript(self, sql):
-        self._description = None
-        self.reset = False
+        self.__description = None
+        self._reset = False
         if type(sql) is unicode:
             sql = sql.encode("utf-8")
         self._check_closed()
         statement = c_void_p()
         c_sql = c_char_p(sql)
 
-        self.connection.commit()
+        self.__connection.commit()
         while True:
-            rc = sqlite.sqlite3_prepare(self.connection._db, c_sql, -1, byref(statement), byref(c_sql))
+            rc = sqlite.sqlite3_prepare(self.__connection._db, c_sql, -1, byref(statement), byref(c_sql))
             if rc != SQLITE_OK:
-                raise self.connection._get_exception(rc)
+                raise self.__connection._get_exception(rc)
 
             rc = SQLITE_ROW
             while rc == SQLITE_ROW:
@@ -895,18 +899,18 @@
                 if rc == SQLITE_OK:
                     return self
                 else:
-                    raise self.connection._get_exception(rc)
+                    raise self.__connection._get_exception(rc)
             rc = sqlite.sqlite3_finalize(statement)
             if rc != SQLITE_OK:
-                raise self.connection._get_exception(rc)
+                raise self.__connection._get_exception(rc)
 
             if not c_sql.value:
                 break
         return self
 
     def _check_reset(self):
-        if self.reset:
-            raise self.connection.InterfaceError("Cursor needed to be reset because "
+        if self._reset:
+            raise self.__connection.InterfaceError("Cursor needed to be reset because "
                                                  "of commit/rollback and can "
                                                  "no longer be fetched from.")
 
@@ -915,18 +919,18 @@
         self._check_closed()
         self._check_reset()
 
-        if self.statement is None:
+        if self.__statement is None:
             return None
 
         try:
-            return self.statement.next(self)
+            return self.__statement.next(self)
         except StopIteration:
             return None
 
     def fetchmany(self, size=None):
         self._check_closed()
         self._check_reset()
-        if self.statement is None:
+        if self.__statement is None:
             return []
         if size is None:
             size = self.arraysize
@@ -940,22 +944,30 @@
     def fetchall(self):
         self._check_closed()
         self._check_reset()
-        if self.statement is None:
+        if self.__statement is None:
             return []
         return list(self)
 
     def __iter__(self):
         return iter(self.fetchone, None)
 
-    def _getdescription(self):
-        if self._description is None:
-            self._description = self.statement._get_description()
-        return self._description
-    description = property(_getdescription)
+    def __get_connection(self):
+        return self.__connection
+    connection = property(__get_connection)
 
-    def _getlastrowid(self):
-        return sqlite.sqlite3_last_insert_rowid(self.connection._db)
-    lastrowid = property(_getlastrowid)
+    def __get_rowcount(self):
+        return self.__rowcount
+    rowcount = property(__get_rowcount)
+
+    def __get_description(self):
+        if self.__description is None:
+            self.__description = self.__statement._get_description()
+        return self.__description
+    description = property(__get_description)
+
+    def __get_lastrowid(self):
+        return sqlite.sqlite3_last_insert_rowid(self.__connection._db)
+    lastrowid = property(__get_lastrowid)
 
     def setinputsizes(self, *args):
         pass
diff --git a/pypy/module/test_lib_pypy/test_sqlite3.py b/pypy/module/test_lib_pypy/test_sqlite3.py
--- a/pypy/module/test_lib_pypy/test_sqlite3.py
+++ b/pypy/module/test_lib_pypy/test_sqlite3.py
@@ -63,13 +63,13 @@
 def test_cursor_del():
     con = _sqlite3.connect(':memory:')
     cur = con.execute('select 1')
-    stmt = cur.statement
+    stmt = cur._Cursor__statement
     cur.close()
     cur = con.execute('select 1')
-    assert cur.statement is stmt
+    assert cur._Cursor__statement is stmt
     del cur; import gc; gc.collect(); gc.collect()
     cur = con.execute('select 1')
-    assert cur.statement is stmt
+    assert cur._Cursor__statement is stmt
 
 @pytest.mark.skipif("not hasattr(sys, 'pypy_translation_info')")
 def test_connection_del(tmpdir):


More information about the pypy-commit mailing list