From b58097dfdee4d70125a2b5d06224557f59856085 Mon Sep 17 00:00:00 2001 From: Jason Kirtland Date: Tue, 17 Jul 2007 06:22:58 +0000 Subject: [PATCH] - Adjust has_table for MySQL, workaround multibyte issue on osx --- lib/sqlalchemy/databases/mysql.py | 16 +++++++++++++--- test/sql/unicode.py | 2 +- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/sqlalchemy/databases/mysql.py b/lib/sqlalchemy/databases/mysql.py index 233fe050ac..3e03109b78 100644 --- a/lib/sqlalchemy/databases/mysql.py +++ b/lib/sqlalchemy/databases/mysql.py @@ -1068,11 +1068,21 @@ class MySQLDialect(ansisql.ANSIDialect): return self._default_schema_name def has_table(self, connection, table_name, schema=None): + # SHOW TABLE STATUS LIKE and SHOW TABLES LIKE do not function properly + # on macosx (and maybe win?) with multibyte table names. + # + # TODO: if this is not a problem on win, make the strategy swappable + # based on platform. DESCRIBE is much slower. if schema is not None: - st = 'SHOW TABLE STATUS FROM `%s` LIKE %%s' % schema + st = "DESCRIBE `%s`.`%s`" % (schema, table_name) else: - st = 'SHOW TABLE STATUS LIKE %s' - return connection.execute(st, table_name).rowcount != 0 + st = "DESCRIBE `%s`" % table_name + try: + return connection.execute(st).rowcount > 0 + except exceptions.SQLError, e: + if e.orig.args[0] == 1146: + return False + raise def get_version_info(self, connectable): if hasattr(connectable, 'connect'): diff --git a/test/sql/unicode.py b/test/sql/unicode.py index f47ac97f53..cfd2354da9 100644 --- a/test/sql/unicode.py +++ b/test/sql/unicode.py @@ -19,7 +19,7 @@ class UnicodeSchemaTest(testbase.PersistTest): Column(u'\u6e2c\u8a66', Integer), ) - t2 = Table(u'unitéble2', metadata, + t2 = Table(u'Unitéble2', metadata, Column(u'méil', Integer, primary_key=True, key="a"), Column(u'\u6e2c\u8a66', Integer, ForeignKey(u'unitable1.méil'), key="b"), ) -- 2.47.3