Hello community, here is the log from the commit of package python-mysqlclient for openSUSE:Factory checked in at 2019-01-03 18:06:11 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-mysqlclient (Old) and /work/SRC/openSUSE:Factory/.python-mysqlclient.new.28833 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-mysqlclient" Thu Jan 3 18:06:11 2019 rev:2 rq:656808 version:1.3.14 Changes: -------- --- /work/SRC/openSUSE:Factory/python-mysqlclient/python-mysqlclient.changes 2018-07-10 16:14:33.189618079 +0200 +++ /work/SRC/openSUSE:Factory/.python-mysqlclient.new.28833/python-mysqlclient.changes 2019-01-03 18:06:12.604162649 +0100 @@ -1,0 +2,13 @@ +Mon Dec 10 11:39:10 UTC 2018 - Alexei Podvalsky <[email protected]> + +- Update to 1.3.14: + * Support static linking of MariaDB Connector/C (#265) + * Better converter for Decimal and Float (#267, #268, #273, #286) + * Add Connection._get_native_connection for XTA project (#269) + * Fix SEGV on MariaDB Connector/C when Connection.close() is called + for closed connection. (#270, #272, #276) + * Fix Connection.client_flag (#266) + * Fix SSCursor may raise same exception twice (#282) + * Fixed SSL support is not detected when built with MySQL < 5.1 (#291) + +------------------------------------------------------------------- Old: ---- mysqlclient-1.3.13.tar.gz New: ---- mysqlclient-1.3.14.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-mysqlclient.spec ++++++ --- /var/tmp/diff_new_pack.XnoY2y/_old 2019-01-03 18:06:13.044162258 +0100 +++ /var/tmp/diff_new_pack.XnoY2y/_new 2019-01-03 18:06:13.048162254 +0100 @@ -19,7 +19,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %define oldpython python Name: python-mysqlclient -Version: 1.3.13 +Version: 1.3.14 Release: 0 Summary: Python interface to MySQL License: GPL-2.0-or-later ++++++ mysqlclient-1.3.13.tar.gz -> mysqlclient-1.3.14.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mysqlclient-1.3.13/HISTORY.rst new/mysqlclient-1.3.14/HISTORY.rst --- old/mysqlclient-1.3.13/HISTORY.rst 2018-06-27 13:27:48.000000000 +0200 +++ new/mysqlclient-1.3.14/HISTORY.rst 2018-12-04 10:58:37.000000000 +0100 @@ -1,4 +1,28 @@ ====================== + What's new in 1.3.14 +====================== + +Release: 2018-12-04 + +* Support static linking of MariaDB Connector/C (#265) + +* Better converter for Decimal and Float (#267, #268, #273, #286) + +* Add ``Connection._get_native_connection`` for XTA project (#269) + +* Fix SEGV on MariaDB Connector/C when ``Connection.close()`` is called + for closed connection. (#270, #272, #276) + +* Fix ``Connection.client_flag`` (#266) + +* Fix SSCursor may raise same exception twice (#282) + +* ``waiter`` option is now deprecated. (#285) + +* Fixed SSL support is not detected when built with MySQL < 5.1 (#291) + + +====================== What's new in 1.3.13 ====================== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mysqlclient-1.3.13/INSTALL.rst new/mysqlclient-1.3.14/INSTALL.rst --- old/mysqlclient-1.3.13/INSTALL.rst 2016-07-26 10:12:24.000000000 +0200 +++ new/mysqlclient-1.3.14/INSTALL.rst 2018-12-04 09:41:39.000000000 +0100 @@ -8,40 +8,17 @@ Prerequisites ------------- -+ Python 2.6, 2.7, 3.3 or higher - - * http://www.python.org/ ++ Python 2.7, 3.4 or higher + setuptools * http://pypi.python.org/pypi/setuptools -+ MySQL 5.0 or higher ++ MySQL 5.5 or higher * http://www.mysql.com/downloads/ - * MySQL-4.0 and MySQL-4.1 may work, but not supported. - - * MySQL-5.0 is supported and tested, including stored procedures. - - * MySQL-5.1 is supported (currently a release candidate) but untested. - It should work. - - * Red Hat Linux packages: - - - mysql-devel to compile - - - mysql and/or mysql-devel to run - - * MySQL.com RPM packages: - - - MySQL-devel to compile - - - MySQL-shared if you want to use their shared - library. Otherwise you'll get a statically-linked module, - which may or may not be what you want. - - - MySQL-shared to run if you compiled with MySQL-shared installed + * MySQL-5.0 may work, but not supported. + C compiler diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mysqlclient-1.3.13/MySQLdb/connections.py new/mysqlclient-1.3.14/MySQLdb/connections.py --- old/mysqlclient-1.3.13/MySQLdb/connections.py 2018-06-27 13:17:09.000000000 +0200 +++ new/mysqlclient-1.3.14/MySQLdb/connections.py 2018-12-04 09:41:58.000000000 +0100 @@ -200,6 +200,10 @@ # PEP-249 requires autocommit to be initially off autocommit = kwargs2.pop('autocommit', False) self.waiter = kwargs2.pop('waiter', None) + if self.waiter: + from warnings import warn + warn("waiter is deprecated and will be removed in 1.4.", + DeprecationWarning, 2) super(Connection, self).__init__(*args, **kwargs2) self.cursorclass = cursorclass @@ -325,12 +329,10 @@ return s def begin(self): - """Explicitly begin a connection. Non-standard. - DEPRECATED: Will be removed in 1.3. - Use an SQL BEGIN statement instead.""" - from warnings import warn - warn("begin() is non-standard and will be removed in 1.4", - DeprecationWarning, 2) + """Explicitly begin a connection. + + This method is not used when autocommit=False (default). + """ self.query("BEGIN") if not hasattr(_mysql.connection, 'warning_count'): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mysqlclient-1.3.13/MySQLdb/converters.py new/mysqlclient-1.3.14/MySQLdb/converters.py --- old/mysqlclient-1.3.13/MySQLdb/converters.py 2017-08-30 11:49:19.000000000 +0200 +++ new/mysqlclient-1.3.14/MySQLdb/converters.py 2018-12-04 09:41:58.000000000 +0100 @@ -66,7 +66,10 @@ return s.encode() def Float2Str(o, d): - return '%.15g' % o + s = repr(o) + if 'e' not in s: + s += 'e0' + return s def None2NULL(o, d): """Convert None to NULL.""" @@ -79,6 +82,8 @@ that method when the connection is created.""" return string_literal(o, d) +def Decimal2Literal(o, d): + return format(o, 'f') def char_array(s): return array.array('c', s) @@ -139,5 +144,6 @@ from decimal import Decimal conversions[FIELD_TYPE.DECIMAL] = Decimal conversions[FIELD_TYPE.NEWDECIMAL] = Decimal + conversions[Decimal] = Decimal2Literal except ImportError: pass diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mysqlclient-1.3.13/MySQLdb/cursors.py new/mysqlclient-1.3.14/MySQLdb/cursors.py --- old/mysqlclient-1.3.13/MySQLdb/cursors.py 2018-04-20 09:39:06.000000000 +0200 +++ new/mysqlclient-1.3.14/MySQLdb/cursors.py 2018-11-05 13:06:10.000000000 +0100 @@ -75,6 +75,7 @@ self._result = None self._warnings = None self.rownumber = None + self._rows = None def close(self): """Close the cursor. No further queries will be possible.""" @@ -172,23 +173,27 @@ nr = db.next_result() if nr == -1: return None - self._do_get_result() + self._do_get_result(db) self._post_get_result() self._warning_check() return 1 - def _post_get_result(self): pass + def _do_get_result(self, db): + self._result = result = self._get_result() + if result is None: + self.description = self.description_flags = None + else: + self.description = result.describe() + self.description_flags = result.field_flags() - def _do_get_result(self): - db = self._get_db() - self._result = self._get_result() self.rowcount = db.affected_rows() self.rownumber = 0 - self.description = self._result and self._result.describe() or None - self.description_flags = self._result and self._result.field_flags() or None self.lastrowid = db.insert_id() self._warnings = None + def _post_get_result(self): + pass + def setinputsizes(self, *args): """Does nothing, required by DB API.""" @@ -248,7 +253,6 @@ except Exception: exc, value = sys.exc_info()[:2] self.errorhandler(self, exc, value) - self._executed = query if not self._defer_warnings: self._warning_check() return res @@ -364,21 +368,19 @@ if isinstance(q, unicode): q = q.encode(db.encoding, 'surrogateescape') self._query(q) - self._executed = q if not self._defer_warnings: self._warning_check() return args - def _do_query(self, q): + def _query(self, q): db = self._get_db() - self._last_executed = q + self._result = None db.query(q) - self._do_get_result() + self._do_get_result(db) + self._post_get_result() + self._executed = q return self.rowcount - def _query(self, q): - return self._do_query(q) - def _fetch_row(self, size=1): if not self._result: return () @@ -408,11 +410,6 @@ def _get_result(self): return self._get_db().store_result() - def _query(self, q): - rowcount = self._do_query(q) - self._post_get_result() - return rowcount - def _post_get_result(self): self._rows = self._fetch_row(0) self._result = None @@ -481,7 +478,8 @@ _defer_warnings = True - def _get_result(self): return self._get_db().use_result() + def _get_result(self): + return self._get_db().use_result() def fetchone(self): """Fetches a single row from the cursor.""" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mysqlclient-1.3.13/MySQLdb/release.py new/mysqlclient-1.3.14/MySQLdb/release.py --- old/mysqlclient-1.3.13/MySQLdb/release.py 2018-06-27 13:28:40.000000000 +0200 +++ new/mysqlclient-1.3.14/MySQLdb/release.py 2018-12-04 11:06:11.000000000 +0100 @@ -1,4 +1,4 @@ __author__ = "Andy Dustman <[email protected]>" -version_info = (1,3,13,'final',0) -__version__ = "1.3.13" +version_info = (1,3,14,'final',0) +__version__ = "1.3.14" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mysqlclient-1.3.13/PKG-INFO new/mysqlclient-1.3.14/PKG-INFO --- old/mysqlclient-1.3.13/PKG-INFO 2018-06-27 13:28:40.000000000 +0200 +++ new/mysqlclient-1.3.14/PKG-INFO 2018-12-04 11:06:12.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: mysqlclient -Version: 1.3.13 +Version: 1.3.14 Summary: Python interface to MySQL Home-page: https://github.com/PyMySQL/mysqlclient-python Author: Andy Dustman @@ -99,6 +99,7 @@ Classifier: Programming Language :: Python :: 3.4 Classifier: Programming Language :: Python :: 3.5 Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 Classifier: Topic :: Database Classifier: Topic :: Database :: Database Engines/Servers Description-Content-Type: text/markdown diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mysqlclient-1.3.13/_mysql.c new/mysqlclient-1.3.14/_mysql.c --- old/mysqlclient-1.3.13/_mysql.c 2017-12-21 12:09:51.000000000 +0100 +++ new/mysqlclient-1.3.14/_mysql.c 2018-12-04 10:40:05.000000000 +0100 @@ -69,7 +69,11 @@ PyObject *converter; } _mysql_ConnectionObject; -#define check_connection(c) if (!(c->open)) return _mysql_Exception(c) +#define check_connection(c) \ + if (!(c->open)) { \ + return _mysql_Exception(c); \ + }; + #define result_connection(r) ((_mysql_ConnectionObject *)r->conn) #define check_result_connection(r) check_connection(result_connection(r)) @@ -90,12 +94,8 @@ static int _mysql_server_init_done = 0; #define check_server_init(x) if (!_mysql_server_init_done) { if (mysql_server_init(0, NULL, NULL)) { _mysql_Exception(NULL); return x; } else { _mysql_server_init_done = 1;} } -#if MYSQL_VERSION_ID >= 50500 -#define HAVE_OPENSSL 1 -#endif - /* According to https://dev.mysql.com/doc/refman/5.1/en/mysql-options.html - The MYSQL_OPT_READ_TIMEOUT apear in the version 5.1.12 */ + The MYSQL_OPT_READ_TIMEOUT appear in the version 5.1.12 */ #if MYSQL_VERSION_ID > 50112 #define HAVE_MYSQL_OPT_TIMEOUTS 1 #endif @@ -115,7 +115,15 @@ Py_DECREF(t); return NULL; } - merr = mysql_errno(&(c->connection)); + if (!(c->open)) { + /* GH-270: When connection is closed, accessing the c->connection + * object may cause SEGV. + */ + merr = CR_SERVER_GONE_ERROR; + } + else { + merr = mysql_errno(&(c->connection)); + } switch (merr) { case 0: e = _mysql_InterfaceError; @@ -490,12 +498,10 @@ MYSQL *conn = NULL; PyObject *conv = NULL; PyObject *ssl = NULL; -#if HAVE_OPENSSL char *key = NULL, *cert = NULL, *ca = NULL, *capath = NULL, *cipher = NULL; PyObject *ssl_keepref[5] = {NULL}; int n_ssl_keepref = 0; -#endif char *host = NULL, *user = NULL, *passwd = NULL, *db = NULL, *unix_socket = NULL; unsigned int port = 0; @@ -559,18 +565,12 @@ #endif if (ssl) { -#if HAVE_OPENSSL PyObject *value = NULL; _stringsuck(ca, value, ssl); _stringsuck(capath, value, ssl); _stringsuck(cert, value, ssl); _stringsuck(key, value, ssl); _stringsuck(cipher, value, ssl); -#else - PyErr_SetString(_mysql_NotSupportedError, - "client library does not have SSL support"); - return -1; -#endif } Py_BEGIN_ALLOW_THREADS ; @@ -608,18 +608,15 @@ if (local_infile != -1) mysql_options(&(self->connection), MYSQL_OPT_LOCAL_INFILE, (char *) &local_infile); -#if HAVE_OPENSSL if (ssl) { mysql_ssl_set(&(self->connection), key, cert, ca, capath, cipher); } -#endif conn = mysql_real_connect(&(self->connection), host, user, passwd, db, port, unix_socket, client_flag); Py_END_ALLOW_THREADS ; -#if HAVE_OPENSSL if (ssl) { int i; for (i=0; i<n_ssl_keepref; i++) { @@ -627,7 +624,6 @@ ssl_keepref[i] = NULL; } } -#endif if (!conn) { _mysql_Exception(self); @@ -744,12 +740,13 @@ } static char _mysql_ConnectionObject_fileno__doc__[] = -"Return underlaying fd for connection"; +"Return underlaying fd for connection (deprecated)"; static PyObject * _mysql_ConnectionObject_fileno( _mysql_ConnectionObject *self) { + check_connection(self); return PyInt_FromLong(self->connection.net.fd); } @@ -761,16 +758,11 @@ _mysql_ConnectionObject *self, PyObject *noargs) { - if (self->open) { - Py_BEGIN_ALLOW_THREADS - mysql_close(&(self->connection)); - Py_END_ALLOW_THREADS - self->open = 0; - } else { - PyErr_SetString(_mysql_ProgrammingError, - "closing a closed connection"); - return NULL; - } + check_connection(self); + Py_BEGIN_ALLOW_THREADS + mysql_close(&(self->connection)); + Py_END_ALLOW_THREADS + self->open = 0; _mysql_ConnectionObject_clear(self); Py_RETURN_NONE; } @@ -842,6 +834,7 @@ { int flag, err; if (!PyArg_ParseTuple(args, "i", &flag)) return NULL; + check_connection(self); Py_BEGIN_ALLOW_THREADS err = mysql_autocommit(&(self->connection), flag); Py_END_ALLOW_THREADS @@ -858,6 +851,7 @@ _mysql_ConnectionObject *self, PyObject *args) { + check_connection(self); if (self->connection.server_status & SERVER_STATUS_AUTOCOMMIT) { Py_RETURN_TRUE; } @@ -873,6 +867,7 @@ PyObject *noargs) { int err; + check_connection(self); Py_BEGIN_ALLOW_THREADS err = mysql_commit(&(self->connection)); Py_END_ALLOW_THREADS @@ -890,13 +885,13 @@ PyObject *noargs) { int err; + check_connection(self); Py_BEGIN_ALLOW_THREADS err = mysql_rollback(&(self->connection)); Py_END_ALLOW_THREADS if (err) return _mysql_Exception(self); - Py_INCREF(Py_None); - return Py_None; -} + Py_RETURN_NONE; +} static char _mysql_ConnectionObject_next_result__doc__[] = "If more query results exist, next_result() reads the next query\n\ @@ -917,6 +912,7 @@ PyObject *noargs) { int err; + check_connection(self); Py_BEGIN_ALLOW_THREADS err = mysql_next_result(&(self->connection)); Py_END_ALLOW_THREADS @@ -939,6 +935,7 @@ int err, flags=0; if (!PyArg_ParseTuple(args, "i", &flags)) return NULL; + check_connection(self); Py_BEGIN_ALLOW_THREADS err = mysql_set_server_option(&(self->connection), flags); Py_END_ALLOW_THREADS @@ -963,6 +960,7 @@ _mysql_ConnectionObject *self, PyObject *noargs) { + check_connection(self); return PyString_FromString(mysql_sqlstate(&(self->connection))); } @@ -977,6 +975,7 @@ _mysql_ConnectionObject *self, PyObject *noargs) { + check_connection(self); return PyInt_FromLong(mysql_warning_count(&(self->connection))); } @@ -1686,6 +1685,28 @@ } #endif +static char _mysql_ConnectionObject_get_native_connection__doc__[] = +"Return the internal MYSQL* wrapped in a PyCapsule object.\n\ +NOTE: this is a private API introduced ONLY for XTA integration,\n\ + don't use it for different use cases.\n\ + This method is supported only for XTA integration and support must\n\ + be asked to LIXA project: http://www.tiian.org/lixa/\n\ + Please DO NOT ask support to PyMySQL/mysqlclient-python project.\n\ +"; + +static PyObject * +_mysql_ConnectionObject_get_native_connection( + _mysql_ConnectionObject *self, + PyObject *noargs) +{ + PyObject *result; + check_connection(self); + result = PyCapsule_New(&(self->connection), + "_mysql.connection.native_connection", NULL); + return result; +} + + static char _mysql_get_client_info__doc__[] = "get_client_info() -- Returns a string that represents\n\ the client library version."; @@ -2272,6 +2293,12 @@ }, #endif { + "_get_native_connection", + (PyCFunction)_mysql_ConnectionObject_get_native_connection, + METH_NOARGS, + _mysql_ConnectionObject_get_native_connection__doc__ + }, + { "close", (PyCFunction)_mysql_ConnectionObject_close, METH_NOARGS, @@ -2455,8 +2482,8 @@ { "client_flag", T_UINT, - READONLY, offsetof(_mysql_ConnectionObject,connection.client_flag), + READONLY, "Client flags; refer to MySQLdb.constants.CLIENT" }, {NULL} /* Sentinel */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mysqlclient-1.3.13/doc/user_guide.rst new/mysqlclient-1.3.14/doc/user_guide.rst --- old/mysqlclient-1.3.13/doc/user_guide.rst 2018-06-27 13:17:09.000000000 +0200 +++ new/mysqlclient-1.3.14/doc/user_guide.rst 2018-12-04 09:41:39.000000000 +0100 @@ -434,7 +434,7 @@ can be either: * a callable object which takes a string argument (the MySQL - value),' returning a Python value + value), returning a Python value * a sequence of 2-tuples, where the first value is a combination of flags from ``MySQLdb.constants.FLAG``, and the second value @@ -653,7 +653,6 @@ Causes the cursor to return rows as a tuple of the column values. CursorDictRowsMixIn - Causes the cursor to return rows as a dictionary, where the keys are column names and the values are column values. Note that if the column names are not unique, i.e., you are selecting from two diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mysqlclient-1.3.13/metadata.cfg new/mysqlclient-1.3.14/metadata.cfg --- old/mysqlclient-1.3.13/metadata.cfg 2018-06-27 13:21:29.000000000 +0200 +++ new/mysqlclient-1.3.14/metadata.cfg 2018-12-04 11:00:25.000000000 +0100 @@ -1,6 +1,6 @@ [metadata] -version: 1.3.13 -version_info: (1,3,13,'final',0) +version: 1.3.14 +version_info: (1,3,14,'final',0) description: Python interface to MySQL author: Andy Dustman author_email: [email protected] @@ -27,6 +27,7 @@ Programming Language :: Python :: 3.4 Programming Language :: Python :: 3.5 Programming Language :: Python :: 3.6 + Programming Language :: Python :: 3.7 Topic :: Database Topic :: Database :: Database Engines/Servers py_modules: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mysqlclient-1.3.13/mysqlclient.egg-info/PKG-INFO new/mysqlclient-1.3.14/mysqlclient.egg-info/PKG-INFO --- old/mysqlclient-1.3.13/mysqlclient.egg-info/PKG-INFO 2018-06-27 13:28:40.000000000 +0200 +++ new/mysqlclient-1.3.14/mysqlclient.egg-info/PKG-INFO 2018-12-04 11:06:11.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: mysqlclient -Version: 1.3.13 +Version: 1.3.14 Summary: Python interface to MySQL Home-page: https://github.com/PyMySQL/mysqlclient-python Author: Andy Dustman @@ -99,6 +99,7 @@ Classifier: Programming Language :: Python :: 3.4 Classifier: Programming Language :: Python :: 3.5 Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 Classifier: Topic :: Database Classifier: Topic :: Database :: Database Engines/Servers Description-Content-Type: text/markdown diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mysqlclient-1.3.13/setup.py new/mysqlclient-1.3.14/setup.py --- old/mysqlclient-1.3.13/setup.py 2018-06-27 13:22:42.000000000 +0200 +++ new/mysqlclient-1.3.14/setup.py 2018-12-04 10:59:41.000000000 +0100 @@ -2,9 +2,7 @@ import os import io -import sys -import distutils.errors import setuptools if os.name == "posix": diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mysqlclient-1.3.13/setup_posix.py new/mysqlclient-1.3.14/setup_posix.py --- old/mysqlclient-1.3.13/setup_posix.py 2018-06-27 13:17:09.000000000 +0200 +++ new/mysqlclient-1.3.14/setup_posix.py 2018-12-04 09:41:39.000000000 +0100 @@ -72,17 +72,21 @@ include_dirs = [dequote(i[2:]) for i in mysql_config('include') if i.startswith('-I')] + if static: + # properly handle mysql client libraries that are not called libmysqlclient + client = None + CLIENT_LIST = ['mysqlclient', 'mysqlclient_r', 'mysqld', 'mariadb', + 'perconaserverclient', 'perconaserverclient_r'] + for c in CLIENT_LIST: + if c in libraries: + client = c + break - # properly handle mysql client libraries that are not called libmysqlclient - client = None - CLIENT_LIST = ['mysqlclient', 'mysqlclient_r', 'mysqld', - 'perconaserverclient', 'perconaserverclient_r'] - for c in CLIENT_LIST: - if c in libraries: - client = c - break + if client == 'mariadb': + client = 'mariadbclient' + if client is None: + raise ValueError("Couldn't identify mysql client library") - if static: extra_objects.append(os.path.join(library_dirs[0], 'lib%s.a' % client)) if client in libraries: libraries.remove(client) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mysqlclient-1.3.13/tests/capabilities.py new/mysqlclient-1.3.14/tests/capabilities.py --- old/mysqlclient-1.3.13/tests/capabilities.py 2016-07-26 10:12:24.000000000 +0200 +++ new/mysqlclient-1.3.14/tests/capabilities.py 2018-12-04 09:41:58.000000000 +0100 @@ -195,13 +195,24 @@ def test_DECIMAL(self): # DECIMAL + from decimal import Decimal def generator(row,col): - from decimal import Decimal return Decimal("%d.%02d" % (row, col)) self.check_data_integrity( ('col1 DECIMAL(5,2)',), generator) + val = Decimal('1.11111111111111119E-7') + self.cursor.execute('SELECT %s', (val,)) + result = self.cursor.fetchone()[0] + self.assertEqual(result, val) + self.assertIsInstance(result, Decimal) + + self.cursor.execute('SELECT %s + %s', (Decimal('0.1'), Decimal('0.2'))) + result = self.cursor.fetchone()[0] + self.assertEqual(result, Decimal('0.3')) + self.assertIsInstance(result, Decimal) + def test_DATE(self): ticks = time() def generator(row,col): @@ -279,3 +290,9 @@ ('col1 INT','col2 BLOB'), generator) + def test_DOUBLE(self): + for val in (18014398509481982.0, 0.1): + self.cursor.execute('SELECT %s', (val,)); + result = self.cursor.fetchone()[0] + self.assertEqual(result, val) + self.assertIsInstance(result, float) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mysqlclient-1.3.13/tests/test_MySQLdb_nonstandard.py new/mysqlclient-1.3.14/tests/test_MySQLdb_nonstandard.py --- old/mysqlclient-1.3.13/tests/test_MySQLdb_nonstandard.py 2016-07-26 10:12:24.000000000 +0200 +++ new/mysqlclient-1.3.14/tests/test_MySQLdb_nonstandard.py 2018-11-02 11:05:48.000000000 +0100 @@ -92,3 +92,14 @@ self.assertTrue(isinstance(self.conn.get_server_info(), str), "Should return an str.") + def test_client_flag(self): + conn = connection_factory( + use_unicode=True, + client_flag=MySQLdb.constants.CLIENT.FOUND_ROWS) + + self.assertIsInstance(conn.client_flag, (int, MySQLdb.compat.long)) + self.assertTrue(conn.client_flag & MySQLdb.constants.CLIENT.FOUND_ROWS) + with self.assertRaises(TypeError if MySQLdb.compat.PY2 else AttributeError): + conn.client_flag = 0 + + conn.close()
