summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/sqlalchemy/dialects/access/base.py5
-rw-r--r--lib/sqlalchemy/dialects/firebird/base.py7
-rw-r--r--lib/sqlalchemy/dialects/informix/base.py3
-rw-r--r--lib/sqlalchemy/dialects/maxdb/base.py5
-rw-r--r--lib/sqlalchemy/dialects/mssql/base.py13
-rw-r--r--lib/sqlalchemy/dialects/mssql/information_schema.py4
-rw-r--r--lib/sqlalchemy/dialects/mysql/base.py12
-rw-r--r--lib/sqlalchemy/dialects/mysql/oursql.py4
-rw-r--r--lib/sqlalchemy/dialects/oracle/base.py25
-rw-r--r--lib/sqlalchemy/dialects/postgresql/base.py24
-rw-r--r--lib/sqlalchemy/dialects/sqlite/base.py9
-rw-r--r--lib/sqlalchemy/dialects/sybase/base.py3
-rw-r--r--lib/sqlalchemy/engine/base.py2
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()