diff options
| -rw-r--r-- | lib/sqlalchemy/dialects/access/base.py | 5 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/firebird/base.py | 7 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/informix/base.py | 3 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/maxdb/base.py | 5 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/mssql/base.py | 13 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/mssql/information_schema.py | 4 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/mysql/base.py | 12 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/mysql/oursql.py | 4 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/oracle/base.py | 25 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/postgresql/base.py | 24 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/sqlite/base.py | 9 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/sybase/base.py | 3 | ||||
| -rw-r--r-- | lib/sqlalchemy/engine/base.py | 2 |
13 files changed, 49 insertions, 67 deletions
diff --git a/lib/sqlalchemy/dialects/access/base.py b/lib/sqlalchemy/dialects/access/base.py index 7dfb3153e..2b76b93d0 100644 --- a/lib/sqlalchemy/dialects/access/base.py +++ b/lib/sqlalchemy/dialects/access/base.py @@ -16,7 +16,7 @@ This dialect is *not* tested on SQLAlchemy 0.6. """ from sqlalchemy import sql, schema, types, exc, pool from sqlalchemy.sql import compiler, expression -from sqlalchemy.engine import default, base +from sqlalchemy.engine import default, base, reflection from sqlalchemy import processors class AcNumeric(types.Numeric): @@ -299,7 +299,8 @@ class AccessDialect(default.DefaultDialect): finally: dtbs.Close() - def table_names(self, connection, schema): + @reflection.cache + def get_table_names(self, connection, schema=None, **kw): # A fresh DAO connection is opened for each reflection # This is necessary, so we get the latest updates dtbs = daoEngine.OpenDatabase(connection.engine.url.database) diff --git a/lib/sqlalchemy/dialects/firebird/base.py b/lib/sqlalchemy/dialects/firebird/base.py index a2da132da..70318157c 100644 --- a/lib/sqlalchemy/dialects/firebird/base.py +++ b/lib/sqlalchemy/dialects/firebird/base.py @@ -378,7 +378,8 @@ class FBDialect(default.DefaultDialect): c = connection.execute(genqry, [self.denormalize_name(sequence_name)]) return c.first() is not None - def table_names(self, connection, schema): + @reflection.cache + def get_table_names(self, connection, schema=None, **kw): s = """ SELECT DISTINCT rdb$relation_name FROM rdb$relation_fields @@ -387,10 +388,6 @@ class FBDialect(default.DefaultDialect): return [self.normalize_name(row[0]) for row in connection.execute(s)] @reflection.cache - def get_table_names(self, connection, schema=None, **kw): - return self.table_names(connection, schema) - - @reflection.cache def get_view_names(self, connection, schema=None, **kw): s = """ SELECT distinct rdb$view_name diff --git a/lib/sqlalchemy/dialects/informix/base.py b/lib/sqlalchemy/dialects/informix/base.py index 54aae6eb3..266a74a7b 100644 --- a/lib/sqlalchemy/dialects/informix/base.py +++ b/lib/sqlalchemy/dialects/informix/base.py @@ -193,7 +193,8 @@ class InformixDialect(default.DefaultDialect): cu.execute('SET LOCK MODE TO WAIT') #cu.execute('SET ISOLATION TO REPEATABLE READ') - def table_names(self, connection, schema): + @reflection.cache + def get_table_names(self, connection, schema=None, **kw): s = "select tabname from systables" return [row[0] for row in connection.execute(s)] diff --git a/lib/sqlalchemy/dialects/maxdb/base.py b/lib/sqlalchemy/dialects/maxdb/base.py index 758cfaf05..2e1d6a58f 100644 --- a/lib/sqlalchemy/dialects/maxdb/base.py +++ b/lib/sqlalchemy/dialects/maxdb/base.py @@ -63,7 +63,7 @@ import datetime, itertools, re from sqlalchemy import exc, schema, sql, util, processors from sqlalchemy.sql import operators as sql_operators, expression as sql_expr from sqlalchemy.sql import compiler, visitors -from sqlalchemy.engine import base as engine_base, default +from sqlalchemy.engine import base as engine_base, default, reflection from sqlalchemy import types as sqltypes @@ -880,7 +880,8 @@ class MaxDBDialect(default.DefaultDialect): rp = connection.execute(sql, bind) return bool(rp.first()) - def table_names(self, connection, schema): + @reflection.cache + def get_table_names(self, connection, schema=None, **kw): if schema is None: sql = (" SELECT TABLENAME FROM TABLES WHERE " " SCHEMANAME=CURRENT_SCHEMA ") diff --git a/lib/sqlalchemy/dialects/mssql/base.py b/lib/sqlalchemy/dialects/mssql/base.py index 7660fe9f7..57b468083 100644 --- a/lib/sqlalchemy/dialects/mssql/base.py +++ b/lib/sqlalchemy/dialects/mssql/base.py @@ -1149,11 +1149,6 @@ class MSDialect(default.DefaultDialect): pass return self.schema_name - def table_names(self, connection, schema): - s = select([ischema.tables.c.table_name], - ischema.tables.c.table_schema==schema) - return [row[0] for row in connection.execute(s)] - def has_table(self, connection, tablename, schema=None): current_schema = schema or self.default_schema_name @@ -1182,7 +1177,7 @@ class MSDialect(default.DefaultDialect): s = sql.select([tables.c.table_name], sql.and_( tables.c.table_schema == current_schema, - tables.c.table_type == 'BASE TABLE' + tables.c.table_type == u'BASE TABLE' ), order_by=[tables.c.table_name] ) @@ -1196,7 +1191,7 @@ class MSDialect(default.DefaultDialect): s = sql.select([tables.c.table_name], sql.and_( tables.c.table_schema == current_schema, - tables.c.table_type == 'VIEW' + tables.c.table_type == u'VIEW' ), order_by=[tables.c.table_name] ) @@ -1320,11 +1315,11 @@ class MSDialect(default.DefaultDialect): table_fullname = "%s.%s" % (current_schema, tablename) cursor = connection.execute( "select ident_seed('%s'), ident_incr('%s')" - % (tablename, tablename) + % (table_fullname, table_fullname) ) row = cursor.first() - if not row is None: + if row is not None and row[0] is not None: colmap[ic]['sequence'].update({ 'start' : int(row[0]), 'increment' : int(row[1]) diff --git a/lib/sqlalchemy/dialects/mssql/information_schema.py b/lib/sqlalchemy/dialects/mssql/information_schema.py index bb6ff315a..312e83cb1 100644 --- a/lib/sqlalchemy/dialects/mssql/information_schema.py +++ b/lib/sqlalchemy/dialects/mssql/information_schema.py @@ -21,7 +21,7 @@ tables = Table("TABLES", ischema, Column("TABLE_CATALOG", CoerceUnicode, key="table_catalog"), Column("TABLE_SCHEMA", CoerceUnicode, key="table_schema"), Column("TABLE_NAME", CoerceUnicode, key="table_name"), - Column("TABLE_TYPE", String, key="table_type"), + Column("TABLE_TYPE", String(convert_unicode=True), key="table_type"), schema="INFORMATION_SCHEMA") columns = Table("COLUMNS", ischema, @@ -42,7 +42,7 @@ constraints = Table("TABLE_CONSTRAINTS", ischema, Column("TABLE_SCHEMA", CoerceUnicode, key="table_schema"), Column("TABLE_NAME", CoerceUnicode, key="table_name"), Column("CONSTRAINT_NAME", CoerceUnicode, key="constraint_name"), - Column("CONSTRAINT_TYPE", String, key="constraint_type"), + Column("CONSTRAINT_TYPE", String(convert_unicode=True), key="constraint_type"), schema="INFORMATION_SCHEMA") column_constraints = Table("CONSTRAINT_COLUMN_USAGE", ischema, diff --git a/lib/sqlalchemy/dialects/mysql/base.py b/lib/sqlalchemy/dialects/mysql/base.py index 2311b06df..df4a666fb 100644 --- a/lib/sqlalchemy/dialects/mysql/base.py +++ b/lib/sqlalchemy/dialects/mysql/base.py @@ -1766,24 +1766,20 @@ class MySQLDialect(default.DefaultDialect): @reflection.cache def get_table_names(self, connection, schema=None, **kw): + """Return a Unicode SHOW TABLES from a given schema.""" if schema is not None: current_schema = schema else: current_schema = self.default_schema_name - table_names = self.table_names(connection, current_schema) - return table_names - - def table_names(self, connection, schema): - """Return a Unicode SHOW TABLES from a given schema.""" charset = self._connection_charset if self.server_version_info < (5, 0, 2): rp = connection.execute("SHOW TABLES FROM %s" % - self.identifier_preparer.quote_identifier(schema)) + self.identifier_preparer.quote_identifier(current_schema)) return [row[0] for row in self._compat_fetchall(rp, charset=charset)] else: rp = connection.execute("SHOW FULL TABLES FROM %s" % - self.identifier_preparer.quote_identifier(schema)) + self.identifier_preparer.quote_identifier(current_schema)) return [row[0] for row in self._compat_fetchall(rp, charset=charset)\ if row[1] == 'BASE TABLE'] @@ -1796,7 +1792,7 @@ class MySQLDialect(default.DefaultDialect): if schema is None: schema = self.default_schema_name if self.server_version_info < (5, 0, 2): - return self.table_names(connection, schema) + return self.get_table_names(connection, schema) charset = self._connection_charset rp = connection.execute("SHOW FULL TABLES FROM %s" % self.identifier_preparer.quote_identifier(schema)) diff --git a/lib/sqlalchemy/dialects/mysql/oursql.py b/lib/sqlalchemy/dialects/mysql/oursql.py index f26bc4da2..9e38993f2 100644 --- a/lib/sqlalchemy/dialects/mysql/oursql.py +++ b/lib/sqlalchemy/dialects/mysql/oursql.py @@ -151,8 +151,8 @@ class MySQLDialect_oursql(MySQLDialect): **kw ) - def table_names(self, connection, schema): - return MySQLDialect.table_names(self, + def get_table_names(self, connection, schema=None, **kw): + return MySQLDialect.get_table_names(self, connection.connect().\ execution_options(_oursql_plain_query=True), schema diff --git a/lib/sqlalchemy/dialects/oracle/base.py b/lib/sqlalchemy/dialects/oracle/base.py index f76edabf2..b270f38cf 100644 --- a/lib/sqlalchemy/dialects/oracle/base.py +++ b/lib/sqlalchemy/dialects/oracle/base.py @@ -631,18 +631,6 @@ class OracleDialect(default.DefaultDialect): def _get_default_schema_name(self, connection): return self.normalize_name(connection.execute(u'SELECT USER FROM DUAL').scalar()) - def table_names(self, connection, schema): - # note that table_names() isnt loading DBLINKed or synonym'ed tables - if schema is None: - schema = self.default_schema_name - s = sql.text( - "SELECT table_name FROM all_tables " - "WHERE nvl(tablespace_name, 'no tablespace') NOT IN ('SYSTEM', 'SYSAUX') " - "AND OWNER = :owner " - "AND IOT_NAME IS NULL") - cursor = connection.execute(s, owner=self.denormalize_name(schema)) - return [self.normalize_name(row[0]) for row in cursor] - def _resolve_synonym(self, connection, desired_owner=None, desired_synonym=None, desired_table=None): """search for a local synonym matching the given desired owner/name. @@ -712,7 +700,18 @@ class OracleDialect(default.DefaultDialect): @reflection.cache def get_table_names(self, connection, schema=None, **kw): schema = self.denormalize_name(schema or self.default_schema_name) - return self.table_names(connection, schema) + + # note that table_names() isnt loading DBLINKed or synonym'ed tables + if schema is None: + schema = self.default_schema_name + s = sql.text( + "SELECT table_name FROM all_tables " + "WHERE nvl(tablespace_name, 'no tablespace') NOT IN ('SYSTEM', 'SYSAUX') " + "AND OWNER = :owner " + "AND IOT_NAME IS NULL") + cursor = connection.execute(s, owner=schema) + return [self.normalize_name(row[0]) for row in cursor] + @reflection.cache def get_view_names(self, connection, schema=None, **kw): diff --git a/lib/sqlalchemy/dialects/postgresql/base.py b/lib/sqlalchemy/dialects/postgresql/base.py index cbd92ccfe..f45fc9671 100644 --- a/lib/sqlalchemy/dialects/postgresql/base.py +++ b/lib/sqlalchemy/dialects/postgresql/base.py @@ -725,17 +725,6 @@ class PGDialect(default.DefaultDialect): cursor = connection.execute(sql.text(query, bindparams=bindparams)) return bool(cursor.scalar()) - def table_names(self, connection, schema): - result = connection.execute( - sql.text(u"SELECT relname FROM pg_class c " - "WHERE relkind = 'r' " - "AND '%s' = (select nspname from pg_namespace n where n.oid = c.relnamespace) " % - schema, - typemap = {'relname':sqltypes.Unicode} - ) - ) - return [row[0] for row in result] - def _get_server_version_info(self, connection): v = connection.execute("select version()").scalar() m = re.match('PostgreSQL (\d+)\.(\d+)(?:\.(\d+))?(?:devel)?', v) @@ -805,8 +794,17 @@ class PGDialect(default.DefaultDialect): current_schema = schema else: current_schema = self.default_schema_name - table_names = self.table_names(connection, current_schema) - return table_names + + result = connection.execute( + sql.text(u"SELECT relname FROM pg_class c " + "WHERE relkind = 'r' " + "AND '%s' = (select nspname from pg_namespace n where n.oid = c.relnamespace) " % + current_schema, + typemap = {'relname':sqltypes.Unicode} + ) + ) + return [row[0] for row in result] + @reflection.cache def get_view_names(self, connection, schema=None, **kw): diff --git a/lib/sqlalchemy/dialects/sqlite/base.py b/lib/sqlalchemy/dialects/sqlite/base.py index d7637e71b..0d9827322 100644 --- a/lib/sqlalchemy/dialects/sqlite/base.py +++ b/lib/sqlalchemy/dialects/sqlite/base.py @@ -360,8 +360,9 @@ class SQLiteDialect(default.DefaultDialect): return connect else: return None - - def table_names(self, connection, schema): + + @reflection.cache + def get_table_names(self, connection, schema=None, **kw): if schema is not None: qschema = self.identifier_preparer.quote_identifier(schema) master = '%s.sqlite_master' % qschema @@ -401,10 +402,6 @@ class SQLiteDialect(default.DefaultDialect): return (row is not None) @reflection.cache - def get_table_names(self, connection, schema=None, **kw): - return self.table_names(connection, schema) - - @reflection.cache def get_view_names(self, connection, schema=None, **kw): if schema is not None: qschema = self.identifier_preparer.quote_identifier(schema) diff --git a/lib/sqlalchemy/dialects/sybase/base.py b/lib/sqlalchemy/dialects/sybase/base.py index bdaab2eb7..aaec7a504 100644 --- a/lib/sqlalchemy/dialects/sybase/base.py +++ b/lib/sqlalchemy/dialects/sybase/base.py @@ -382,9 +382,6 @@ class SybaseDialect(default.DefaultDialect): def get_table_names(self, connection, schema=None, **kw): if schema is None: schema = self.default_schema_name - return self.table_names(connection, schema) - - def table_names(self, connection, schema): result = connection.execute( text("select sysobjects.name from sysobjects, sysusers " diff --git a/lib/sqlalchemy/engine/base.py b/lib/sqlalchemy/engine/base.py index 095f7a960..5490169c6 100644 --- a/lib/sqlalchemy/engine/base.py +++ b/lib/sqlalchemy/engine/base.py @@ -1569,7 +1569,7 @@ class Engine(Connectable, log.Identified): if not schema: schema = self.dialect.default_schema_name try: - return self.dialect.table_names(conn, schema) + return self.dialect.get_table_names(conn, schema) finally: if connection is None: conn.close() |
