summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
authorSebastian Bank <sebastian.bank@uni-leipzig.de>2016-04-11 23:16:39 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2016-06-06 18:57:10 -0400
commit824c8664ed18f115fc109c46cec0c25d223f8aad (patch)
treedf918426223781a53331974b8c2422e138e57bc7 /lib/sqlalchemy
parenta90b0101aaf616cddb8bc675f4a221fe7de6c420 (diff)
downloadsqlalchemy-824c8664ed18f115fc109c46cec0c25d223f8aad.tar.gz
Support normal /materialized views in PG separately
Fixes: #3588 Change-Id: Ifbfcab67375f289ddb5c4522f4b803cb8b7c34de Pull-request: https://github.com/zzzeek/sqlalchemy/pull/250
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r--lib/sqlalchemy/dialects/postgresql/base.py38
1 files changed, 36 insertions, 2 deletions
diff --git a/lib/sqlalchemy/dialects/postgresql/base.py b/lib/sqlalchemy/dialects/postgresql/base.py
index 2356458b9..924c8d902 100644
--- a/lib/sqlalchemy/dialects/postgresql/base.py
+++ b/lib/sqlalchemy/dialects/postgresql/base.py
@@ -1552,6 +1552,24 @@ class PGInspector(reflection.Inspector):
schema = schema or self.default_schema_name
return self.dialect._get_foreign_table_names(self.bind, schema)
+ def get_view_names(self, schema=None, include=('plain', 'materialized')):
+ """Return all view names in `schema`.
+
+ :param schema: Optional, retrieve names from a non-default schema.
+ For special quoting, use :class:`.quoted_name`.
+
+ :param include: specify which types of views to return. Passed
+ as a string value (for a single type) or a tuple (for any number
+ of types). Defaults to ``('plain', 'materialized')``.
+
+ .. versionadded:: 1.1
+
+ """
+
+ return self.dialect.get_view_names(self.bind, schema,
+ info_cache=self.info_cache,
+ include=include)
+
class CreateEnumType(schema._CreateDropBase):
__visit_name__ = "create_enum_type"
@@ -1953,11 +1971,27 @@ class PGDialect(default.DefaultDialect):
return [name for name, in result]
@reflection.cache
- def get_view_names(self, connection, schema=None, **kw):
+ def get_view_names(
+ self, connection, schema=None,
+ include=('plain', 'materialized'), **kw):
+
+ include_kind = {'plain': 'v', 'materialized': 'm'}
+ try:
+ kinds = [include_kind[i] for i in util.to_list(include)]
+ except KeyError:
+ raise ValueError(
+ "include %r unknown, needs to be a sequence containing "
+ "one or both of 'plain' and 'materialized'" % (include,))
+ if not kinds:
+ raise ValueError(
+ "empty include, needs to be a sequence containing "
+ "one or both of 'plain' and 'materialized'")
+
result = connection.execute(
sql.text("SELECT c.relname FROM pg_class c "
"JOIN pg_namespace n ON n.oid = c.relnamespace "
- "WHERE n.nspname = :schema AND c.relkind IN ('v', 'm')"
+ "WHERE n.nspname = :schema AND c.relkind IN (%s)" %
+ (", ".join("'%s'" % elem for elem in kinds))
).columns(relname=sqltypes.Unicode),
schema=schema if schema is not None else self.default_schema_name)
return [name for name, in result]