Author: Brian Kearns <[email protected]>
Branch:
Changeset: r62272:3dbab3e443a7
Date: 2013-03-09 15:03 -0500
http://bitbucket.org/pypy/pypy/changeset/3dbab3e443a7/
Log: reorder these functions
diff --git a/lib_pypy/_sqlite3.py b/lib_pypy/_sqlite3.py
--- a/lib_pypy/_sqlite3.py
+++ b/lib_pypy/_sqlite3.py
@@ -1077,37 +1077,6 @@
self._in_use = False
self._exhausted = False
- def _build_row_cast_map(self):
- if not self.__con._detect_types:
- return
- self.__row_cast_map = []
- for i in xrange(_lib.sqlite3_column_count(self._statement)):
- converter = None
-
- if self.__con._detect_types & PARSE_COLNAMES:
- colname = _lib.sqlite3_column_name(self._statement, i)
- if colname is not None:
- colname = colname.decode('utf-8')
- type_start = -1
- key = None
- for pos in range(len(colname)):
- if colname[pos] == '[':
- type_start = pos + 1
- elif colname[pos] == ']' and type_start != -1:
- key = colname[type_start:pos]
- converter = converters[key.upper()]
-
- if converter is None and self.__con._detect_types &
PARSE_DECLTYPES:
- decltype = _lib.sqlite3_column_decltype(self._statement, i)
- if decltype is not None:
- decltype = decltype.decode('utf-8')
- decltype = decltype.split()[0] # if multiple words,
use first, eg. "INTEGER NOT NULL" => "INTEGER"
- if '(' in decltype:
- decltype = decltype[:decltype.index('(')]
- converter = converters.get(decltype.upper(), None)
-
- self.__row_cast_map.append(converter)
-
if sys.version_info[0] < 3:
def __check_decodable(self, param):
if self.__con.text_factory in (unicode, OptimizedUnicode,
@@ -1192,22 +1161,36 @@
else:
raise ValueError("parameters are of unsupported type")
- def _next(self, cursor):
- if self._exhausted:
- raise StopIteration
- item = self._item
+ def _build_row_cast_map(self):
+ if not self.__con._detect_types:
+ return
+ self.__row_cast_map = []
+ for i in xrange(_lib.sqlite3_column_count(self._statement)):
+ converter = None
- ret = _lib.sqlite3_step(self._statement)
- if ret == _lib.SQLITE_DONE:
- self._exhausted = True
- self._item = None
- elif ret != _lib.SQLITE_ROW:
- exc = self.__con._get_exception(ret)
- _lib.sqlite3_reset(self._statement)
- raise exc
+ if self.__con._detect_types & PARSE_COLNAMES:
+ colname = _lib.sqlite3_column_name(self._statement, i)
+ if colname is not None:
+ colname = colname.decode('utf-8')
+ type_start = -1
+ key = None
+ for pos in range(len(colname)):
+ if colname[pos] == '[':
+ type_start = pos + 1
+ elif colname[pos] == ']' and type_start != -1:
+ key = colname[type_start:pos]
+ converter = converters[key.upper()]
- self._readahead(cursor)
- return item
+ if converter is None and self.__con._detect_types &
PARSE_DECLTYPES:
+ decltype = _lib.sqlite3_column_decltype(self._statement, i)
+ if decltype is not None:
+ decltype = decltype.decode('utf-8')
+ decltype = decltype.split()[0] # if multiple words,
use first, eg. "INTEGER NOT NULL" => "INTEGER"
+ if '(' in decltype:
+ decltype = decltype[:decltype.index('(')]
+ converter = converters.get(decltype.upper(), None)
+
+ self.__row_cast_map.append(converter)
def _readahead(self, cursor):
self.column_count = _lib.sqlite3_column_count(self._statement)
@@ -1218,7 +1201,15 @@
else:
converter = None
- if converter is None:
+ if converter is not None:
+ blob = _lib.sqlite3_column_blob(self._statement, i)
+ if not blob:
+ val = None
+ else:
+ blob_len = _lib.sqlite3_column_bytes(self._statement, i)
+ val = bytes(string_at(blob, blob_len))
+ val = converter(val)
+ else:
typ = _lib.sqlite3_column_type(self._statement, i)
if typ == _lib.SQLITE_NULL:
val = None
@@ -1236,14 +1227,6 @@
blob = _lib.sqlite3_column_blob(self._statement, i)
blob_len = _lib.sqlite3_column_bytes(self._statement, i)
val = _BLOB_TYPE(string_at(blob, blob_len))
- else:
- blob = _lib.sqlite3_column_blob(self._statement, i)
- if not blob:
- val = None
- else:
- blob_len = _lib.sqlite3_column_bytes(self._statement, i)
- val = bytes(string_at(blob, blob_len))
- val = converter(val)
row.append(val)
row = tuple(row)
@@ -1251,6 +1234,23 @@
row = self._row_factory(cursor, row)
self._item = row
+ def _next(self, cursor):
+ if self._exhausted:
+ raise StopIteration
+ item = self._item
+
+ ret = _lib.sqlite3_step(self._statement)
+ if ret == _lib.SQLITE_DONE:
+ self._exhausted = True
+ self._item = None
+ elif ret != _lib.SQLITE_ROW:
+ exc = self.__con._get_exception(ret)
+ _lib.sqlite3_reset(self._statement)
+ raise exc
+
+ self._readahead(cursor)
+ return item
+
def _get_description(self):
if self._kind == Statement._DML:
return None
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit