summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/engine/default.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2014-01-13 10:37:15 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2014-01-13 10:37:15 -0500
commit232e3762b7cbf425dd911ae2421512382d6024af (patch)
tree517340ed3079d073f7430138dc1028e881de085a /lib/sqlalchemy/engine/default.py
parentbebf30e34d669a5ede54e512e55ee5186fe015f6 (diff)
downloadsqlalchemy-232e3762b7cbf425dd911ae2421512382d6024af.tar.gz
revert r2775c95b1ee30831216cc5 which was mostly an inadvertent commit, except for the changelog part
Diffstat (limited to 'lib/sqlalchemy/engine/default.py')
-rw-r--r--lib/sqlalchemy/engine/default.py51
1 files changed, 21 insertions, 30 deletions
diff --git a/lib/sqlalchemy/engine/default.py b/lib/sqlalchemy/engine/default.py
index bcb9960b1..509d772aa 100644
--- a/lib/sqlalchemy/engine/default.py
+++ b/lib/sqlalchemy/engine/default.py
@@ -228,55 +228,46 @@ class DefaultDialect(interfaces.Dialect):
"""
return None
- def _check_unicode_returns(self, connection, additional_tests=None):
+ def _check_unicode_returns(self, connection):
if util.py2k and not self.supports_unicode_statements:
cast_to = util.binary_type
else:
cast_to = util.text_type
- if self.positional:
- parameters = self.execute_sequence_format()
- else:
- parameters = {}
-
- def check_unicode(test):
+ def check_unicode(formatstr, type_):
cursor = connection.connection.cursor()
try:
try:
- statement = cast_to(expression.select([test]).compile(dialect=self))
- connection._cursor_execute(cursor, statement, parameters)
+ cursor.execute(
+ cast_to(
+ expression.select(
+ [expression.cast(
+ expression.literal_column(
+ "'test %s returns'" % formatstr),
+ type_)
+ ]).compile(dialect=self)
+ )
+ )
row = cursor.fetchone()
return isinstance(row[0], util.text_type)
- except exc.DBAPIError as de:
+ except self.dbapi.Error as de:
util.warn("Exception attempting to "
"detect unicode returns: %r" % de)
return False
finally:
cursor.close()
- tests = [
- # detect plain VARCHAR
- expression.cast(
- expression.literal_column("'test plain returns'"),
- sqltypes.VARCHAR(60)
- ),
- # detect if there's an NVARCHAR type with different behavior available
- expression.cast(
- expression.literal_column("'test unicode returns'"),
- sqltypes.Unicode(60)
- ),
- ]
-
- if additional_tests:
- tests += additional_tests
-
- results = set([check_unicode(test) for test in tests])
-
- if results.issuperset([True, False]):
+ # detect plain VARCHAR
+ unicode_for_varchar = check_unicode("plain", sqltypes.VARCHAR(60))
+
+ # detect if there's an NVARCHAR type with different behavior available
+ unicode_for_unicode = check_unicode("unicode", sqltypes.Unicode(60))
+
+ if unicode_for_unicode and not unicode_for_varchar:
return "conditional"
else:
- return results == set([True])
+ return unicode_for_varchar
def _check_unicode_description(self, connection):
# all DBAPIs on Py2K return cursor.description as encoded,