From: Rodrigo Menezes Date: Fri, 5 Sep 2014 17:54:48 +0000 (-0400) Subject: Added documentation. Changed my mind - added get_foreign_table_names() only to PGInsp... X-Git-Tag: rel_1_0_0b1~70^2~84^2~4^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fd2faa9bc2c6d2d1b0b8e1738f0bce21e2527bb0;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git 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. --- diff --git a/lib/sqlalchemy/dialects/postgresql/base.py b/lib/sqlalchemy/dialects/postgresql/base.py index f65bc24735..63f6eb8914 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 @@ -2099,24 +2115,6 @@ class PGDialect(default.DefaultDialect): view_names = [row[0] for row in connection.execute(s)] 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: diff --git a/lib/sqlalchemy/engine/default.py b/lib/sqlalchemy/engine/default.py index a59efd3015..2fece76b9f 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 795be8273b..71df29cac1 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 012d1d35dd..f41ea1fa27 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 f0f0e9e470..a04bcbbdd4 100644 --- a/lib/sqlalchemy/testing/requirements.py +++ b/lib/sqlalchemy/testing/requirements.py @@ -252,15 +252,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 @@ -310,12 +301,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 567aec927a..3bc4cd7153 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"""