summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/engine/default.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2011-10-15 12:10:31 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2011-10-15 12:10:31 -0400
commitf1eea63468d8e5d84edceb2b0028984e5917dde0 (patch)
tree673f656f83029d50437242c684d22a9943ae3719 /lib/sqlalchemy/engine/default.py
parent01f04c06eccf5cd9f3d8d413289b0484a6563571 (diff)
downloadsqlalchemy-f1eea63468d8e5d84edceb2b0028984e5917dde0.tar.gz
- Added an exception catch + warning for the
"return unicode detection" step within connect, allows databases that crash on NVARCHAR to continue initializing, assuming no NVARCHAR type implemented. [ticket:2299]
Diffstat (limited to 'lib/sqlalchemy/engine/default.py')
-rw-r--r--lib/sqlalchemy/engine/default.py31
1 files changed, 18 insertions, 13 deletions
diff --git a/lib/sqlalchemy/engine/default.py b/lib/sqlalchemy/engine/default.py
index 9f6c5010e..876a9f5b1 100644
--- a/lib/sqlalchemy/engine/default.py
+++ b/lib/sqlalchemy/engine/default.py
@@ -209,29 +209,34 @@ class DefaultDialect(base.Dialect):
# end Py2K
# Py3K
#cast_to = str
- def check_unicode(type_):
+ def check_unicode(formatstr, type_):
cursor = connection.connection.cursor()
try:
- cursor.execute(
- cast_to(
- expression.select(
- [expression.cast(
- expression.literal_column(
- "'test unicode returns'"), type_)
- ]).compile(dialect=self)
+ try:
+ cursor.execute(
+ cast_to(
+ expression.select(
+ [expression.cast(
+ expression.literal_column(
+ "'test %s returns'" % formatstr), type_)
+ ]).compile(dialect=self)
+ )
)
- )
- row = cursor.fetchone()
+ row = cursor.fetchone()
- return isinstance(row[0], unicode)
+ return isinstance(row[0], unicode)
+ except self.dbapi.Error, de:
+ util.warn("Exception attempting to "
+ "detect unicode returns: %r" % de)
+ return False
finally:
cursor.close()
# detect plain VARCHAR
- unicode_for_varchar = check_unicode(sqltypes.VARCHAR(60))
+ 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(sqltypes.Unicode(60))
+ unicode_for_unicode = check_unicode("unicode", sqltypes.Unicode(60))
if unicode_for_unicode and not unicode_for_varchar:
return "conditional"