PyPy fixes, and probably some reference issues for CPython too.

Derived from a patch at https://bitbucket.org/pypy/compatibility/wiki/edit/mysql-python
This commit is contained in:
farcepest
2012-10-17 18:30:19 -04:00
parent c9b282f8b5
commit 369810dff7
5 changed files with 21 additions and 5 deletions

View File

@@ -48,6 +48,11 @@ except ImportError:
import array
try:
ArrayType = array.ArrayType
except AttributeError:
ArrayType = array.array
try:
set
except NameError:
@@ -133,7 +138,7 @@ conversions = {
ListType: escape_sequence,
DictType: escape_dict,
InstanceType: Instance2Str,
array.ArrayType: array2Str,
ArrayType: array2Str,
StringType: Thing2Literal, # default
UnicodeType: Unicode2Str,
ObjectType: Instance2Str,

View File

@@ -481,6 +481,7 @@ _mysql_ResultObject_Initialize(
PyObject *pmask=NULL;
pmask = PyTuple_GET_ITEM(t, 0);
fun2 = PyTuple_GET_ITEM(t, 1);
Py_XINCREF(fun2);
if (PyInt_Check(pmask)) {
mask = PyInt_AS_LONG(pmask);
flags = fields[i].flags;
@@ -501,8 +502,10 @@ _mysql_ResultObject_Initialize(
}
Py_DECREF(t);
}
if (!fun2) fun2 = Py_None;
Py_INCREF(fun2);
if (!fun2) {
fun2 = Py_None;
Py_INCREF(fun2);
}
Py_DECREF(fun);
fun = fun2;
}
@@ -1190,7 +1193,9 @@ _escape_item(
"no default type converter defined");
goto error;
}
Py_INCREF(d);
quoted = PyObject_CallFunction(itemconv, "OO", item, d);
Py_DECREF(d);
Py_DECREF(itemconv);
error:
return quoted;
@@ -2985,6 +2990,9 @@ _mysql_NewException(
if (!(e = PyDict_GetItemString(edict, name)))
return NULL;
if (PyDict_SetItemString(dict, name, e)) return NULL;
#ifdef PYPY_VERSION
Py_INCREF(e);
#endif
return e;
}

View File

@@ -4,7 +4,7 @@ import unittest
import MySQLdb
import warnings
warnings.filterwarnings('error')
warnings.filterwarnings('ignore')
class test_MySQLdb(capabilities.DatabaseTest):

View File

@@ -3,6 +3,8 @@ import dbapi20
import unittest
import MySQLdb
from configdb import connection_kwargs
import warnings
warnings.simplefilter("ignore")
class test_MySQLdb(dbapi20.DatabaseAPI20Test):
driver = MySQLdb

View File

@@ -4,7 +4,8 @@ import _mysql
import MySQLdb
from MySQLdb.constants import FIELD_TYPE
from configdb import connection_factory
import warnings
warnings.simplefilter("ignore")
class TestDBAPISet(unittest.TestCase):
def test_set_equality(self):