]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Fixing some pep8s and adding get_foreign_tables.
authorRodrigo Menezes <rodrigo.menezes@moat.com>
Wed, 3 Sep 2014 20:38:43 +0000 (16:38 -0400)
committerRodrigo Menezes <rodrigo.menezes@moat.com>
Wed, 3 Sep 2014 20:38:43 +0000 (16:38 -0400)
lib/sqlalchemy/dialects/postgresql/base.py
lib/sqlalchemy/engine/interfaces.py
test/dialect/postgresql/test_reflection.py
test/requirements.py

index 40b2f60ae995becaf068cc6e138041bad9ba53e1..69ae6cfed36ccbb15371e01b00ddc43fa526e74b 100644 (file)
@@ -2086,7 +2086,7 @@ class PGDialect(default.DefaultDialect):
         s = """
         SELECT relname
         FROM pg_class c
-        WHERE relkind = 'v'
+        WHERE relkind IN ('m', v')
           AND '%(schema)s' = (select nspname from pg_namespace n
           where n.oid = c.relnamespace)
         """ % dict(schema=current_schema)
@@ -2098,6 +2098,24 @@ 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:
@@ -2434,7 +2452,7 @@ class PGDialect(default.DefaultDialect):
 
         # cast indkey as varchar since it's an int2vector,
         # returned as a list by some drivers such as pypostgresql
-        
+
         IDX_SQL = """
           SELECT
               i.relname as relname,
index 71df29cac16eef02512354209b0b3de2c4206390..e1e346850f87f3294313680e10afdf1f9f81bc04 100644 (file)
@@ -319,6 +319,12 @@ class Dialect(object):
 
         raise NotImplementedError()
 
+    def get_foreign_tables(self, connection, view_name, 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.
 
index 405ac5921eb53f105945ab520c165c35c3127185..567aec927abce217b11019f03902b92aff372de0 100644 (file)
@@ -13,7 +13,7 @@ import sqlalchemy as sa
 from sqlalchemy.dialects.postgresql import base as postgresql
 
 
-class AlternateRelkindReflectionTest(fixtures.TestBase, AssertsExecutionResults):
+class AltRelkindReflectionTest(fixtures.TestBase, AssertsExecutionResults):
     """Test reflection on materialized views and foreign tables"""
 
     __requires__ = 'postgresql_test_dblink',
@@ -23,7 +23,8 @@ class AlternateRelkindReflectionTest(fixtures.TestBase, AssertsExecutionResults)
     @classmethod
     def setup_class(cls):
         from sqlalchemy.testing import config
-        cls.dblink = config.file_config.get('sqla_testing', 'postgres_test_db_link')
+        cls.dblink = config.file_config.get('sqla_testing',
+                                            'postgres_test_db_link')
 
         metadata = MetaData(testing.db)
         testtable = Table(
@@ -39,8 +40,10 @@ class AlternateRelkindReflectionTest(fixtures.TestBase, AssertsExecutionResults)
 
         for ddl in \
                 "CREATE MATERIALIZED VIEW test_mview AS SELECT * FROM testtable;", \
-                "CREATE SERVER test_server FOREIGN DATA WRAPPER postgres_fdw OPTIONS (dbname 'test', host '%s');" % cls.dblink, \
-                "CREATE USER MAPPING FOR public SERVER test_server options (user 'scott', password 'tiger');", \
+                "CREATE SERVER test_server FOREIGN DATA WRAPPER postgres_fdw \
+                    OPTIONS (dbname 'test', host '%s');" % cls.dblink, \
+                "CREATE USER MAPPING FOR public \
+                    SERVER test_server options (user 'scott', password 'tiger');", \
                 "CREATE FOREIGN TABLE test_foreigntable ( \
                     id          INT, \
                     data        VARCHAR(30) \
@@ -63,7 +66,8 @@ class AlternateRelkindReflectionTest(fixtures.TestBase, AssertsExecutionResults)
     def test_mview_is_reflected(self):
         metadata = MetaData(testing.db)
         table = Table('test_mview', metadata, autoload=True)
-        eq_(set(table.columns.keys()), set(['id', 'data']), "Columns of reflected mview didn't equal expected columns")
+        eq_(set(table.columns.keys()), set(['id', 'data']),
+            "Columns of reflected mview didn't equal expected columns")
 
     def test_mview_select(self):
         metadata = MetaData(testing.db)
@@ -75,7 +79,8 @@ class AlternateRelkindReflectionTest(fixtures.TestBase, AssertsExecutionResults)
     def test_foreign_table_is_reflected(self):
         metadata = MetaData(testing.db)
         table = Table('test_foreigntable', metadata, autoload=True)
-        eq_(set(table.columns.keys()), set(['id', 'data']), "Columns of reflected foreign table didn't equal expected columns")
+        eq_(set(table.columns.keys()), set(['id', 'data']),
+            "Columns of reflected foreign table didn't equal expected columns")
 
     def test_foreign_table_select(self):
         metadata = MetaData(testing.db)
index 46c19389a8514269923503e70ef539cd47d3abb4..14bb256912eb1401e3128c387ddc30959fc19c0f 100644 (file)
@@ -712,7 +712,7 @@ class DefaultRequirements(SuiteRequirements):
                         'sqla_testing', 'postgres_test_db_link'),
                     "postgres_test_db_link option not specified in config"
                 )
-    
+
     @property
     def percent_schema_names(self):
         return skip_if(