diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2011-10-15 12:10:31 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2011-10-15 12:10:31 -0400 |
commit | f1eea63468d8e5d84edceb2b0028984e5917dde0 (patch) | |
tree | 673f656f83029d50437242c684d22a9943ae3719 /lib/sqlalchemy/engine/default.py | |
parent | 01f04c06eccf5cd9f3d8d413289b0484a6563571 (diff) | |
download | sqlalchemy-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.py | 31 |
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" |