summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2015-03-21 15:10:51 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2015-03-21 15:10:51 -0400
commit1447abc5347bee5b8611bebe1ae628b32674dc95 (patch)
treed3afa456f705e9c0e37e265acbf9312308d6ccfc
parentc09c21c9f31826e126b97d6318a9df66986af774 (diff)
downloadsqlalchemy-fix_mysqlconnector.tar.gz
- wip for #3336fix_mysqlconnector
-rw-r--r--lib/sqlalchemy/cextension/processors.c11
-rw-r--r--lib/sqlalchemy/dialects/mysql/base.py6
-rw-r--r--lib/sqlalchemy/dialects/mysql/mysqlconnector.py8
-rw-r--r--lib/sqlalchemy/util/__init__.py2
-rw-r--r--lib/sqlalchemy/util/compat.py2
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)