diff options
author | Rodrigo Menezes <rodrigo.menezes@moat.com> | 2014-09-05 13:54:48 -0400 |
---|---|---|
committer | Rodrigo Menezes <rodrigo.menezes@moat.com> | 2014-09-05 13:54:48 -0400 |
commit | fd2faa9bc2c6d2d1b0b8e1738f0bce21e2527bb0 (patch) | |
tree | 150e1e77ee0a139d54b0363751e575aa078c43f2 | |
parent | 619b0be0ce05c394613d8565c08c09cac10cdd88 (diff) | |
download | sqlalchemy-pr/128.tar.gz |
Added documentation. Changed my mind - added get_foreign_table_names() only to PGInspect and not in the Dialect. Added tests for PGInspect and removed a bunch of the old test scaffolding.pr/128
-rw-r--r-- | lib/sqlalchemy/dialects/postgresql/base.py | 36 | ||||
-rw-r--r-- | lib/sqlalchemy/engine/default.py | 1 | ||||
-rw-r--r-- | lib/sqlalchemy/engine/interfaces.py | 6 | ||||
-rw-r--r-- | lib/sqlalchemy/engine/reflection.py | 3 | ||||
-rw-r--r-- | lib/sqlalchemy/testing/requirements.py | 15 | ||||
-rw-r--r-- | test/dialect/postgresql/test_reflection.py | 6 |
6 files changed, 26 insertions, 41 deletions
diff --git a/lib/sqlalchemy/dialects/postgresql/base.py b/lib/sqlalchemy/dialects/postgresql/base.py index f65bc2473..63f6eb891 100644 --- a/lib/sqlalchemy/dialects/postgresql/base.py +++ b/lib/sqlalchemy/dialects/postgresql/base.py @@ -1679,6 +1679,23 @@ class PGInspector(reflection.Inspector): schema = schema or self.default_schema_name return self.dialect._load_enums(self.bind, schema) + def get_foreign_table_names(self, connection, schema=None, **kw): + if schema is not None: + current_schema = schema + else: + current_schema = self.default_schema_name + + result = connection.execute( + sql.text("SELECT relname FROM pg_class c " + "WHERE relkind = 'f' " + "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] + class CreateEnumType(schema._CreateDropBase): __visit_name__ = "create_enum_type" @@ -1753,7 +1770,6 @@ class PGDialect(default.DefaultDialect): supports_default_values = True supports_empty_insert = False - supports_foreign_tables = True supports_multivalues_insert = True default_paramstyle = 'pyformat' ischema_names = ischema_names @@ -2100,24 +2116,6 @@ class PGDialect(default.DefaultDialect): return view_names @reflection.cache - def get_foreign_table_names(self, connection, schema=None, **kw): - if schema is not None: - current_schema = schema - else: - current_schema = self.default_schema_name - - result = connection.execute( - sql.text("SELECT relname FROM pg_class c " - "WHERE relkind = 'f' " - "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_definition(self, connection, view_name, schema=None, **kw): if schema is not None: current_schema = schema diff --git a/lib/sqlalchemy/engine/default.py b/lib/sqlalchemy/engine/default.py index a59efd301..2fece76b9 100644 --- a/lib/sqlalchemy/engine/default.py +++ b/lib/sqlalchemy/engine/default.py @@ -107,7 +107,6 @@ class DefaultDialect(interfaces.Dialect): default_paramstyle = 'named' supports_default_values = False supports_empty_insert = True - supports_foreign_tables = False supports_multivalues_insert = False server_version_info = None diff --git a/lib/sqlalchemy/engine/interfaces.py b/lib/sqlalchemy/engine/interfaces.py index 795be8273..71df29cac 100644 --- a/lib/sqlalchemy/engine/interfaces.py +++ b/lib/sqlalchemy/engine/interfaces.py @@ -319,12 +319,6 @@ class Dialect(object): raise NotImplementedError() - def get_foreign_table_names(self, connection, schema=None, **kw): - """Return a list of foreign table names for `schema`. - """ - - raise NotImplementedError() - def get_view_definition(self, connection, view_name, schema=None, **kw): """Return view definition. diff --git a/lib/sqlalchemy/engine/reflection.py b/lib/sqlalchemy/engine/reflection.py index 012d1d35d..f41ea1fa2 100644 --- a/lib/sqlalchemy/engine/reflection.py +++ b/lib/sqlalchemy/engine/reflection.py @@ -227,6 +227,9 @@ class Inspector(object): :param schema: Optional, retrieve names from a non-default schema. For special quoting, use :class:`.quoted_name`. + .. versionchanged:: 1.0.0 now returns materialized views as well + as normal views. + """ return self.dialect.get_view_names(self.bind, schema, diff --git a/lib/sqlalchemy/testing/requirements.py b/lib/sqlalchemy/testing/requirements.py index f0f0e9e47..a04bcbbdd 100644 --- a/lib/sqlalchemy/testing/requirements.py +++ b/lib/sqlalchemy/testing/requirements.py @@ -253,15 +253,6 @@ class SuiteRequirements(Requirements): return exclusions.closed() @property - def foreign_tables(self): - """target platform supports FOREIGN TABLEs.""" - - return exclusions.only_if( - lambda config: config.db.dialect.supports_foreign_tables, - "%(database)s %(does_support)s 'FOREIGN TABLEs'" - ) - - @property def schemas(self): """Target database must support external schemas, and have one named 'test_schema'.""" @@ -311,12 +302,6 @@ class SuiteRequirements(Requirements): return self.views @property - def foreign_table_reflection(self): - """target database must support inspection of the full CREATE FOREIGN TABLE definition. - """ - return self.foreign_tables - - @property def schema_reflection(self): return self.schemas diff --git a/test/dialect/postgresql/test_reflection.py b/test/dialect/postgresql/test_reflection.py index 567aec927..3bc4cd715 100644 --- a/test/dialect/postgresql/test_reflection.py +++ b/test/dialect/postgresql/test_reflection.py @@ -107,6 +107,12 @@ class AltRelkindReflectionTest(fixtures.TestBase, AssertsExecutionResults): (89, 'd1',) ] + def test_get_foreign_table_names(self): + inspector = inspect(testing.db) + connection = testing.db.connect() + ft_names = inspector.get_foreign_table_names(connection) + assert u'test_foreigntable' in ft_names + class DomainReflectionTest(fixtures.TestBase, AssertsExecutionResults): """Test PostgreSQL domains""" |