mirror of https://github.com/python/cpython
The sqlite3 module did cut off data from the SQLite database at the first null
character before sending it to a custom converter. This has been fixed now.
This commit is contained in:
parent
6ffe499397
commit
762fbd3485
|
@ -21,7 +21,7 @@
|
|||
# misrepresented as being the original software.
|
||||
# 3. This notice may not be removed or altered from any source distribution.
|
||||
|
||||
import datetime
|
||||
import bz2, datetime
|
||||
import unittest
|
||||
import sqlite3 as sqlite
|
||||
|
||||
|
@ -273,6 +273,23 @@ class ObjectAdaptationTests(unittest.TestCase):
|
|||
val = self.cur.fetchone()[0]
|
||||
self.failUnlessEqual(type(val), float)
|
||||
|
||||
class BinaryConverterTests(unittest.TestCase):
|
||||
def convert(s):
|
||||
return bz2.decompress(s)
|
||||
convert = staticmethod(convert)
|
||||
|
||||
def setUp(self):
|
||||
self.con = sqlite.connect(":memory:", detect_types=sqlite.PARSE_COLNAMES)
|
||||
sqlite.register_converter("bin", BinaryConverterTests.convert)
|
||||
|
||||
def tearDown(self):
|
||||
self.con.close()
|
||||
|
||||
def CheckBinaryInputForConverter(self):
|
||||
testdata = "abcdefg" * 10
|
||||
result = self.con.execute('select ? as "x [bin]"', (buffer(bz2.compress(testdata)),)).fetchone()[0]
|
||||
self.failUnlessEqual(testdata, result)
|
||||
|
||||
class DateTimeTests(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.con = sqlite.connect(":memory:", detect_types=sqlite.PARSE_DECLTYPES)
|
||||
|
@ -322,8 +339,9 @@ def suite():
|
|||
decltypes_type_suite = unittest.makeSuite(DeclTypesTests, "Check")
|
||||
colnames_type_suite = unittest.makeSuite(ColNamesTests, "Check")
|
||||
adaptation_suite = unittest.makeSuite(ObjectAdaptationTests, "Check")
|
||||
bin_suite = unittest.makeSuite(BinaryConverterTests, "Check")
|
||||
date_suite = unittest.makeSuite(DateTimeTests, "Check")
|
||||
return unittest.TestSuite((sqlite_type_suite, decltypes_type_suite, colnames_type_suite, adaptation_suite, date_suite))
|
||||
return unittest.TestSuite((sqlite_type_suite, decltypes_type_suite, colnames_type_suite, adaptation_suite, bin_suite, date_suite))
|
||||
|
||||
def test():
|
||||
runner = unittest.TextTestRunner()
|
||||
|
|
|
@ -45,6 +45,10 @@ Library
|
|||
- A bug was fixed in logging.config.fileConfig() which caused a crash on
|
||||
shutdown when fileConfig() was called multiple times.
|
||||
|
||||
- The sqlite3 module did cut off data from the SQLite database at the first
|
||||
null character before sending it to a custom converter. This has been fixed
|
||||
now.
|
||||
|
||||
Extension Modules
|
||||
-----------------
|
||||
|
||||
|
|
|
@ -321,12 +321,13 @@ PyObject* _fetch_one_row(Cursor* self)
|
|||
}
|
||||
|
||||
if (converter != Py_None) {
|
||||
val_str = (const char*)sqlite3_column_text(self->statement->st, i);
|
||||
nbytes = sqlite3_column_bytes(self->statement->st, i);
|
||||
val_str = (const char*)sqlite3_column_blob(self->statement->st, i);
|
||||
if (!val_str) {
|
||||
Py_INCREF(Py_None);
|
||||
converted = Py_None;
|
||||
} else {
|
||||
item = PyString_FromString(val_str);
|
||||
item = PyString_FromStringAndSize(val_str, nbytes);
|
||||
if (!item) {
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
#define PYSQLITE_MODULE_H
|
||||
#include "Python.h"
|
||||
|
||||
#define PYSQLITE_VERSION "2.3.1"
|
||||
#define PYSQLITE_VERSION "2.3.2"
|
||||
|
||||
extern PyObject* Error;
|
||||
extern PyObject* Warning;
|
||||
|
|
Loading…
Reference in New Issue