diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2015-03-21 15:10:51 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2015-03-21 15:10:51 -0400 |
commit | 1447abc5347bee5b8611bebe1ae628b32674dc95 (patch) | |
tree | d3afa456f705e9c0e37e265acbf9312308d6ccfc | |
parent | c09c21c9f31826e126b97d6318a9df66986af774 (diff) | |
download | sqlalchemy-fix_mysqlconnector.tar.gz |
- wip for #3336fix_mysqlconnector
-rw-r--r-- | lib/sqlalchemy/cextension/processors.c | 11 | ||||
-rw-r--r-- | lib/sqlalchemy/dialects/mysql/base.py | 6 | ||||
-rw-r--r-- | lib/sqlalchemy/dialects/mysql/mysqlconnector.py | 8 | ||||
-rw-r--r-- | lib/sqlalchemy/util/__init__.py | 2 | ||||
-rw-r--r-- | lib/sqlalchemy/util/compat.py | 2 |
5 files changed, 25 insertions, 4 deletions
diff --git a/lib/sqlalchemy/cextension/processors.c b/lib/sqlalchemy/cextension/processors.c index 59eb2648c..905285859 100644 --- a/lib/sqlalchemy/cextension/processors.c +++ b/lib/sqlalchemy/cextension/processors.c @@ -393,6 +393,17 @@ UnicodeResultProcessor_process(UnicodeResultProcessor *self, PyObject *value) Py_RETURN_NONE; #if PY_MAJOR_VERSION >= 3 + /* + // if at some point we want to support mysqlconnector (or someone elses') + // return of bytearray() here + if (PyByteArray_Check(value)) { + str = PyByteArray_AsString(value); + if (str == NULL) { + return NULL; + } + len = strlen(str); + } + else*/ if (PyBytes_AsStringAndSize(value, &str, &len)) return NULL; diff --git a/lib/sqlalchemy/dialects/mysql/base.py b/lib/sqlalchemy/dialects/mysql/base.py index a74b20ac4..43553a69c 100644 --- a/lib/sqlalchemy/dialects/mysql/base.py +++ b/lib/sqlalchemy/dialects/mysql/base.py @@ -2449,7 +2449,7 @@ class MySQLDialect(default.DefaultDialect): cursor.execute('SELECT @@tx_isolation') val = cursor.fetchone()[0] cursor.close() - if util.py3k and isinstance(val, bytes): + if util.py3k and isinstance(val, util.all_binary_types): val = val.decode() return val.upper().replace("-", " ") @@ -3358,7 +3358,7 @@ class _DecodingRowProxy(object): if isinstance(item, _array): item = item.tostring() - if self.charset and isinstance(item, util.binary_type): + if self.charset and isinstance(item, util.all_binary_types): return item.decode(self.charset) else: return item @@ -3367,7 +3367,7 @@ class _DecodingRowProxy(object): item = getattr(self.rowproxy, attr) if isinstance(item, _array): item = item.tostring() - if self.charset and isinstance(item, util.binary_type): + if self.charset and isinstance(item, util.all_binary_types): return item.decode(self.charset) else: return item diff --git a/lib/sqlalchemy/dialects/mysql/mysqlconnector.py b/lib/sqlalchemy/dialects/mysql/mysqlconnector.py index 97fd0ccdf..cc474074e 100644 --- a/lib/sqlalchemy/dialects/mysql/mysqlconnector.py +++ b/lib/sqlalchemy/dialects/mysql/mysqlconnector.py @@ -115,6 +115,14 @@ class MySQLDialect_mysqlconnector(MySQLDialect): util.coerce_kw_type(opts, 'buffered', bool) util.coerce_kw_type(opts, 'raise_on_warnings', bool) + # TODO: not do this, but we can't really support "raw" + # mode which is what this is + # if not util.coerce_kw_type(opts, 'use_unicode', bool): + # raise Exception("use unicode=0 is not supported") + + # TODO: this? + util.coerce_kw_type(opts, 'charset', str) + # unfortunately, MySQL/connector python refuses to release a # cursor without reading fully, so non-buffered isn't an option opts.setdefault('buffered', True) diff --git a/lib/sqlalchemy/util/__init__.py b/lib/sqlalchemy/util/__init__.py index d777d2e06..1ece5f6d4 100644 --- a/lib/sqlalchemy/util/__init__.py +++ b/lib/sqlalchemy/util/__init__.py @@ -12,7 +12,7 @@ from .compat import callable, cmp, reduce, \ binary_type, nested, \ quote_plus, with_metaclass, print_, itertools_filterfalse, u, ue, b,\ unquote_plus, unquote, b64decode, b64encode, byte_buffer, itertools_filter,\ - iterbytes, StringIO, inspect_getargspec, zip_longest + iterbytes, StringIO, inspect_getargspec, zip_longest, all_binary_types from ._collections import KeyedTuple, ImmutableContainer, immutabledict, \ Properties, OrderedProperties, ImmutableProperties, OrderedDict, \ diff --git a/lib/sqlalchemy/util/compat.py b/lib/sqlalchemy/util/compat.py index 5b6f691f1..048804629 100644 --- a/lib/sqlalchemy/util/compat.py +++ b/lib/sqlalchemy/util/compat.py @@ -65,6 +65,7 @@ if py3k: text_type = str int_types = int, iterbytes = iter + all_binary_types = (bytes, bytearray) def u(s): return s @@ -117,6 +118,7 @@ else: binary_type = str text_type = unicode int_types = int, long + all_binary_types = (str, ) def iterbytes(buf): return (ord(byte) for byte in buf) |