This really concerns MySQLmodule.c, not ZMySQLDA per se. But I found these problems while working w. Zope, so thought it best to address the Zope list too. Problem 1: When compiling against MySQL 3.22.14b-gamma, this warning is displayed: ./MySQLmodule.c: In function `pythonify_row': ./MySQLmodule.c:199: warning: assignment from incompatible pointer type Cause: mysql_fetch_lengths() returns 'unsigned long *'. The result is being assigned to 'unsigned int *'. Not a problem on many 32-bit platforms, but what the hey. Problem 2: When attempting to do an invalid database insert (e.g. inserting with a duplicate key value), Python dumps core. Cause: In function DBH_query(), not all fields of sth are properly initialized. When a database insert fails, sth->res has a random value. The subsequent free(self->res) in STH_dealloc() generates a bus error. The attached context diff contains the fixes I used. Lemme know if you have any questions/corrections. -- Mitch Chapman | 4105 Executive Drive Ohio Electronic Engravers, Inc. | Beavercreek, OH 45430 mchapman@oee.com | import StandardDisclaimer *** MySQLmodule.c Tue Dec 22 12:34:23 1998 --- MySQLmodule.c.patched Fri Jan 22 18:33:43 1999 *************** *** 193,199 **** PyObject *rowlist, *fieldobj; MYSQL_FIELD *tf; int i, n; ! unsigned int *lengths; n = mysql_num_fields(res); lengths = mysql_fetch_lengths(res); --- 193,199 ---- PyObject *rowlist, *fieldobj; MYSQL_FIELD *tf; int i, n; ! unsigned long *lengths; n = mysql_num_fields(res); lengths = mysql_fetch_lengths(res); *************** *** 902,907 **** --- 902,908 ---- if (sth == NULL) return NULL; sth->sth_use_result = self->dbh_use_result; sth->dbh = NULL; + sth->res = NULL; if (!PyArg_ParseTuple(args, "s#|i:query", &query, &size, &(sth->sth_use_result))) { Py_XDECREF(sth); return NULL;